оцените способ установки Gentoo с дисков

предлагаю вот такое решение для людей вынужденных устанавливать 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: -надо

Цитата:
-надо часто менять диски
-монтировать и отмонтировать диски приходися вручную (хотя если использовать sudo можно будет автоматизировать этот процесс)

... пожелание, добавить eject /dev/cdrom, чтобы дископриемник выбрасывался ...

если

если установлен sudo можно сделать так:

........
echo "Please insert disk No $N and press \"ENTER\"";
 sudo eject 
read
 sudo mount /dev/cdrom /mnt/cdrom/ 
cp $CDMP$DISTFDIR$FILENAME $DIST 
fi
done

пожелание

... если правильно понял, то будеи предлагать сменить диск даже если диск уже стоит в дископриемнике ...
... пожелание, добавить проверку наличия требуемого файла на установленном диске ...

нет конечно!

нет конечно! если стоит нужный диск и он смонтирован в /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 не

Цитата:
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 :-)

монтирование:

монтирование: 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 package

k1b0rg, есть идея,

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;
}

Для его работы нужно выполнить следующее:

DEV=/dev/dvd MNT=/mnt/dvd mkdir /root/dvd-ls;
cd /root/dvd-ls; for I in 1 2 3 4 5 6 7 8 9 10 11;
do mkdir $I; echo 'Вставьте диск #'$I;
eject $DEV; sleep 10; mount -o ro $DEV $MNT;
ls $MNT/distfiles > $I/distfiles;
if [ $I = 1 ]; then ls /mnt/dvd/xorg $I/xorg; fi;
done

После этого сохранить скрипт в /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)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".