оцените способ установки Gentoo с дисков
k1b0rg 23 ноября, 2007 - 18:30
предлагаю вот такое решение для людей вынужденных устанавливать Gentoo с дисков
файл /dget:
#!/bin/bash
URL=$1 #get files URL
DIST=$2 #get distfiles dir
CDMP="/mnt/cdrom/" #cdrom mount point
DISTFDIR="distfiles/" #distfiles dir in cdrom"
FILENAME=${URL/*\//}
cp $CDMP$DISTFDIR$FILENAME $DIST ||
for N in `ls /base`; do
if cat /base/$N | grep $FILENAME; then
echo "Please insert disk No $N and press \"ENTER\"";
read
cp $CDMP$DISTFDIR$FILENAME $DIST
fi
done
в консоли даем команды
#chmod +x /dget
#export FETCHCOMMAND="/dget \${URI} \${DISTDIR}"
в папке /base/ coздаем файлы 01,02,03... (по количеству дисков) со списками файлов на каждом диске.
далее
#chmod 555 /base/*
и все теперь можно просто набрать
emerge "название пакета"
и прога сама попросит по мере надобности вставить нужный диск
достоинства и недостатки:
+не надо искать где какой пакет находится
+вы пользуютесь emerge так же как у вас есть подключение в интернет
-надо часто менять диски
-монтировать и отмонтировать диски приходися вручную (хотя если использовать sudo можно будет автоматизировать этот процесс)
какие будут пожелания и советы
»
- Для комментирования войдите или зарегистрируйтесь

Quote: -надо
... пожелание, добавить eject /dev/cdrom, чтобы дископриемник выбрасывался ...
если
если установлен sudo можно сделать так:
пожелание
... если правильно понял, то будеи предлагать сменить диск даже если диск уже стоит в дископриемнике ...
... пожелание, добавить проверку наличия требуемого файла на установленном диске ...
нет конечно!
нет конечно! если стоит нужный диск и он смонтирован в /mnt/cdrom/. скрипт скачает с него без лишних вопросов.
собственно
собственно пожелания
1 не создавать папок и файлов в корне (это просто скрипт для его даты лучше юзать /var/dget, а его самого в /usr/bin )
2 все равно это все выполняется от рута так что никаких sudo не надо =)
___________________________________________
Gentoo GNU/Linux 2.6.23 GCC 4.2.2 Dual Xeon
Working on Gentoo for iPAQ hx4700 :-)
Quote: 1 не
пожелания учту
не получается говорит что не хватает прав на (раз)монтирование :(
а как монтируем
а как монтируем и размонтируем?
покажи что в фстаб написано
от рута не может не хватать прав =)
___________________________________________
Gentoo GNU/Linux 2.6.23 GCC 4.2.2 Dual Xeon
Working on Gentoo for iPAQ hx4700 :-)
монтирование:
монтирование: mount /dev/cdrom /mnt/cdrom
размонтирование: umount /dev/cdrom && eject
в фстабе прописано:
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
что интересно в консоли все работает, а в скрипте нет ошибка доступа. такое ощущение что скрипт запускается с другими правами.
/dev/cdrom /mnt/cdrom
/dev/cdrom /mnt/cdrom iso9660 noauto,users,ro,noexec,nosuid,nodev,uid=1000,utf8 0 0
:)
кстати - eject сам
кстати - eject сам отмонтирует, а маунтить то что есть в fstab можно просто mount /mnt/cdrom
Я тут похимичил
Я тут похимичил и переделал скрипты под себя. В итоге получилось 2 скрипта: один - сам dget, второй - передает ему параметры и запускает emerge -f.
Плюс в отличие от предложенного выше варианта нужно не так часто менять диски. Конечно все это пока очень криво, но работоспособно =)
/bin/dget
#!/bin/bash
URL=$1 #get files URL
DIST=$2 #get distfiles dir
FLAG=$3 # O_O
CDMP="/mnt/cdrom/" #cdrom mount point
DISTFDIR="distfiles/" #distfiles dir in cdrom"
FILENAME=${URL/*\//}
if test $FLAG = "1"; then
cp $CDMP$DISTFDIR$FILENAME $DIST ||
for N in `ls /var/dget/base`; do
if cat /var/dget/base/$N | grep $FILENAME; then
echo "Пожалуйста, вставьте DVD $N и нажмите \"ENTER\"";
umount /dev/cdrom
eject /dev/cdrom
read
mount -r /dev/cdrom /mnt/cdrom/
cp $CDMP$DISTFDIR$FILENAME $DIST
fi
done
fi
if test $FLAG = "0"; then
if ls /mnt/cdrom/ | grep $FILENAME; then
cp $CDMP$DISTFDIR$FILENAME $DIST
fi
fi
/bin/dallget
#!/bin/bash
CHOISE="0"
PACKAGE=$1
echo "Будет произведено копирование пакета $PACKAGE и его зависимостей";
echo "Введите 1 для копирования небольшого числа пакетов или 0 для большого";
read -r CHOISE;
if test $CHOISE = "0"; then
export FETCHCOMMAND="/bin/dget \${URI} \${DISTDIR} \0"
for N in `ls /var/dget/base`; do
echo "Вставьте следующий диск (DVD No $N)";
read;
mount /dev/cdrom /mnt/cdrom -r
emerge -f $PACKAGE;
done
export FETCHCOMMAND="/bin/dget \${URI} \${DISTDIR} \1"
echo "Ну типа проверка";
emerge -f $PACKAGE;
fi
if test $CHOISE = "1"; then
export FETCHCOMMAND="/bin/dget \${URI} \${DISTDIR} \1"
emerge -f $PACKAGE;
fi
Ну и естессно chmod, export как в исходном варианте.
Для запуска копирования надо просто запустить
dallget packagek1b0rg, есть идея,
k1b0rg, есть идея, стукните пожалуйста в аську, нужно обсудить. А что именно - так это язык, на котором придётся программировать, а также ещё некоротые аспекты. В общем, жду Вас.
http://antarctica.net.ru - мы делаем линукс доступнее. ICQ# 334-547-677
пожелание-вопрос
... RooTest, когда будет новый срез? ...
А когда хотите?
А когда хотите? Могу через несколько дней, могу когда 2007,1 выйдет. Пишите пожелания сюда, а можно и в аську
Кстати, если процесс написания данной системы управления пакетами, если её можно так назвать, не затянется надолго, то вскоре увидите её уже в срезе...
http://antarctica.net.ru - мы делаем линукс доступнее. ICQ# 334-547-677
Система
Система управления дисками с пакетами 4-:Е
База для DVD'шных distfiles
Вот написал прогу на питоне для работы с distfiles на dvd, если кому это
еще интересно, то выложил на http://www.penguinux.ru/pr_Depack.php
Ещё один велосипед
От себя добавлю ещё один скрипт, который написал для тех же целей. Диски часто менять не нужно, монтирует само.
#!/usr/bin/perl # fetch.pl #-------------- use strict; use warnings; exit if not defined $ARGV[0]; system 'cd /root/bin' system 'rm -f 1 2 3 4 5 6 7 8 9 10 11 missing'; print "Получение списка файлов...\n"; open MISSING, '>', 'missing'; open FILE, "emerge -qpf $ARGV[0] 2>&1 |"; while (my $file = <FILE>) { next if $file eq "\n"; if ($file !~ m!^.*/([^/]+?)\s*$!) { print "? $file"; next; } $file = $1; print "$file"; if (`ls /usr/portage/distfiles/ | grep ^$file\$`) { print " - найден в distfiles\n"; next; } print "\n"; my $location = `grep -R ^$file\$ /root/dvd-ls`; if (!$location) { print MISSING "$file\n"; } else { next if $location !~ m!^/root/dvd-ls/(\d+?)/(.+?):(.+)$!; my ($disk, $dir, $file) = ($1, $2, $3); open DISK, '>>', $disk; print DISK "$dir/$file\n"; close DISK; } } close FILE; close MISSING; print "Готово\n"; for (my $i = 1; $i <= 11; ++$i) { open DISK, "$i" or next; print "Вставьте диск #$i\n"; system("eject /dev/dvd"); sleep 20; system "mount /mnt/dvd"; while (<DISK>) { chomp; system "cp -v /mnt/dvd/$_ /usr/portage/distfiles/\n"; } system 'eject /mnt/dvd'; close DISK; }Для его работы нужно выполнить следующее:
После этого сохранить скрипт в /root/bin.
PS Если что не нравится - критикуйте, я ещё только учусь)
учитывая ваши
учитывая ваши пожелания и в результате экспериментов на себе я внес такие усовершенствования:
1) сделал 2 режима работы скрипта: 1 режим скачивает по мере надобности, 2 режим предварительное составление списка файлов и последующее скачивание.
2) возможность сбросить часть дисков на отдельную папку на HDD и качать отуда в distfiles (пригодится если на жест. диске есть свободное место, но его мало, чтобы переписать все диски, да и distfiles не забивается лишними файлами)
Файл /usr/bin/dget:
#!/bin/bash BASE_DIR=/var/pkg_dvd_base/ # сдесь задаем папку со списками файлов на дисках DIST_HDD=/mnt/media/distfiles/ # задаем папку на жестком диске куда мы можем сбросить часть дистфайлов MODE="get-now" #по умолчанию стоит режим №1 while [ $1 ]; do case $1 in "-u" ) shift 1; URL=$1;; #get files URL "-d" ) shift 1; DIST=$1;; #get distfiles dir "-mode" ) shift 1; MODE=$1;; #set mode esac; shift done CDMP="/mnt/cdrom/" #cdrom mount point DISTFDIR="distfiles/" #distfiles dir in cdrom" FILENAME=${URL/*\//} case $MODE in "get-now" ) { echo "copy $CDMP$DISTFDIR$FILENAME to $DIST" cp $DIST_HDD$FILENAME $DIST || cp $CDMP$DISTFDIR$FILENAME $DIST || { for N in `ls $BASE_DIR`; do if cat $BASE_DIR$N | grep $FILENAME; then echo "Please insert disk No $N and press \"ENTER\""; eject /dev/cdrom read F mount /mnt/cdrom/ cp $CDMP$DISTFDIR$FILENAME $DIST fi done } };; "get-later" ) { mkdir /tmp/pack_list/ > /dev/null echo $DIST > /tmp/dist cp $DIST_HDD$FILENAME $DIST || echo "pack" > /tmp/pack_list/$FILENAME };; esac;Файл /usr/bin/get-now:
#!/bin/bash FETCHCOMMAND="dget -u \${URI} -d \${DISTDIR} -mode get-later" emerge -f $1 DIST=`cat /tmp/dist` for N in `ls /tmp/pack_list`; do dget -u "url/$N" -d "$DIST" rm /tmp/pack_list/$N doneИСПОЛЬЗОВАНИЕ:
в make.conf добавляем "FETCHCOMMAND="dget -u \${URI} -d \${DISTDIR}"
для скачки надо набрать команду "get-now <ИМЯ ПАКЕТА>"
примечание: иногда на больших пакетах типа kde, gnome, xorg-x11 и т.д. остаются не скачанные пакеты. В таких случаях рекомендуется запустить "get-now <ИМЯ ПАКЕТА>" 2-3 раза на больших пакетах
хотелось бы еще добавить пищание пс спикера при смене диска только вот команды не знаю может кто знает?
beep Вот к НГ: beep
beep
Вот к НГ:
beep -f 523 -l 375 -n -f 880 -l 375 -n -f 880 -l 375 -n -f 784 -l 375 -n -f 880 -l 375 -n -f 698 -l 375 -n -f 523 -l 375 -n -f 523 -l 375 -n -f 523 -l 375 -n -f 880 -l 375 -n -f 880 -l 375 -n -f 987 -l 375 -n -f 784 -l 375 -n -f 523 -l 750:)
Доброго
Доброго времени суток господа! =)))
Почитал ваши скрипты, хорошая штука))) Вот только у меня проблема не совсем совпадает с данной..возникла необходимость сделать второй(третий) каталог distfiles, т.е. при установке через emerge, пакеты должны искаться сначала в одном каталоге, потом в другом..
В make.conf переменной DISTDIR можно присваивать только одно значение, а жаль)))
Можно ли это обойти каким-нибудь другим способом?
Для примера:
/usr/portage/distfiles
/mnt/distfiles
/mnt/distfiles.old
Попробуй depack
Попробуй depack (http://penguinux.ru/pr_Depack.php)