Установка Gentoo из 11 дисков

Просьба помочь начинающим. Точнее- дал товарищу 11 двд-дисков - срез distfiles - ну и хэндбук.
Когда я ставил на своем компе, то как-то не задумывался над тем, как эти диски подключать: места было много и я то, что нужно скопировал на другие разделы (партиции) диска и монтированием все решилось.

А теперь ситуация у товарища: Он (пока для начала) в vmware загружает InstallCD, доходит до того момента, что нужно "подсовывать" файлы в distfiles. Вытаскивает диск, подключает диск с нужными файлами, а при чтении (ls /mnt/dvdrom) получается, что выдает не все файлы. Да и файлы были на диске в каталоге distfiles. Этого каталога там нету- на ls выдает какие-то 20 файлов (возможно- первые 20 из записанных).
Поэтому вопрос: Может, знает кто, как по-умному ставить из 11 двд-дисков?
P.S.
Когда регистрация пройдет, то дальнейшие вопрсы будет задавать он, а не я =)

А как он

А как он монтирует диски?
________________________
Да поможет Вам F1
Да сохранит Вас F2
Во имя святого Ctrl'а, Alt'а и Del'а
Да будет так! Enter

mount /dev/dvd /mnt/dvdrom

mount /dev/dvd /mnt/dvdrom

А

А размонтировать не забывает? :-)
VMWare позволяет подключать в систему вместо DVD-шек ISO-шки, это если траблы со чтением под Линуксом, а под Виндой видно. Также можно в качестве жесткого диска (например второго) использовать физический диск (проверено мной), либо физический раздел. Я делал так, освободил раздел, создал в нем НТФС (на FAT-32 не поместится все), слил под Виндой все что нужно, подключил диск к VMWare, бутнулся, примонтировал диск (лайв-СиДи умеет читать НТФС). И все )))

Quote: А

Цитата:
А размонтировать не забывает? :-)

конечно не забывает

UMOUNT_CMD = "umount /mnt/cdrom"
....
....
....
       os.system(UMOUNT_CMD)

А InstallCD

А InstallCD запускает как gentoo docache?

Решение

Решение проблемы здесь: http://antarctica.net.ru/forum/viewtopic.php?t=7

Я делал так -

Я делал так - загрузился с minimal-cd, скопировал stage3 на жёсткий, делал туда chroot,настроил что надо, загрузился в стоящую убунту 7, сделал chroot, всё нужное для сборки по частям скопировал в дистфайлы,делал emerge и он что нужного было на диске сливал,умаялся. собрал из chroot ядро,перезагрузился и всё пашет. там уже можно прям оттуда

только вот замаялся делать mount/umount. хотел поставить ivman,да что-то мне эта канитель нездоровая надоела и я вернулся в убунту работать :-)

возможно

возможно нужно...
в начале загрузки с дика при выборе ядра указать параметр docache:
boot: gentoo docache

Как делал я:

Как делал я:

mkdir ~/dvd-ls
for ((I = 1; I <=11; I++)) do
  sudo eject /dev/dvd;
  echo "Вставьте диск #$I";
  sleep 10;
  sudo mount /dev/dvd /mnt/dvdrom/ -o ro;
  mkdir ~/dvd-ls/$I;
  ls /mnt/dvd/distfiles > ~/dvd-ls/$I/distfiles;
  if ((I==1)); then
    ls /mnt/dvd/xorg > ~/dvd-ls/$I/xorg;
  fi;
done

Дальше создаём файл fetch.pl с вот таким содержанием:

#!/usr/bin/perl
# fetch.pl
#--------------

use strict;
use warnings;

exit if not defined $ARGV[0];
system 'rm -f 1 2 3 4 5 6 7 8 9 10 11 missing';
print "Получение списка файлов...\n";
open MISSING, '>', 'missing';
open FILE, "emerge -pf $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\$ ~/dvd-ls`;
        if (!$location)
        {
                print MISSING "$file\n";
        }
        else
        {
                next if $location !~ m!^~/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("sudo eject /dev/dvd");
        sleep 20;
        system "sudo mount /mnt/dvdrom";
        while (<DISK>)
        {
                chomp;
                system "cp -v /mnt/dvdrom/$_ /usr/portage/distfiles/\n";
        }
        system 'sudo eject /mnt/dvdrom';
        close DISK;
}

Даём ему права на исполнение

chmod 0755 fetch.pl

В-общем, всё. Работает это просто:

cd /<Папка со скриптом>/
./fetch <Необходимый пакет>

В файле missing.txt будут файлы, которые на диске не были.
Надеюсь, это облегчит участь товарища))

------------
ЗЫ мой первый скрипт под Линух)

Ты диски

Ты диски проверял? У тебя на машине все файлы видно? Если у тя тож токо 20 - то криво записал :)
Если нет - то кочай свежую версию ливцд.

python

в свое время писал скрипты на питоне
писал на скорую руку, главное чтобы работало (так и пользуюсь этими скриптами)

скрипт для создания базы данных db.py

#!/usr/bin/env python

import os

# путь для сохранения базы данных
db_path="/root/lists/"

# путь до дистфайлов на двдях
dists_path = "/mnt/cdrom/distfiles"

#  кол-во дисков
disc_count = 11

# команды монтирования и размонтирования дисков
mount_cmd = "mount /mnt/cdrom"
umount_cmd = "umount /mnt/cdrom"

for disc_index in xrange(1,disc_count+1):
	if disc_index > 1:
		print 'Please wait: umounting disc...'
		os.system(umount_cmd)
	print 'Insert %d DVD' % disc_index
	t = raw_input("Press Enter when finished...")
	os.system(mount_cmd)
	l = os.listdir(dists_path)
	f = open(db_path + str(disc_index), "w")
	for s in l: f.write(s + "\n")
	f.close()

скрипт для копирования определенного пакета copy.py

#!/usr/bin/env python
# -*- coding: utf8 -*-

# путь до списков (слэш обязателен)
DB_DIR = "/root/lists/"
# путь копирования тарболов
LOCAL_DIST_DIR = "/usr/portage/distfiles/"
# путь до каталога на ДВД
DISC_DIST_DIR = "/mnt/cdrom/distfiles/"
# команды монтирования и размонтирования ДВД
MOUNT_CMD = "mount -o ro /dev/hdc /mnt/cdrom"
UMOUNT_CMD = "umount /mnt/cdrom"
# кол-во дисков
DISC_COUNT = 11

import sys, os


all_packages = 0
ondisc_packages = 0
disc_package = 0


# получаем список ссылок для скачивания
l = os.popen3("emerge -pf "+sys.argv[1])[2].readlines()
# удаляем пустые строки 
for x in l[:]: 
	if x=="\n" : l.remove(x)
# выделяем из первой ссылки имя файла	
for i in range(len(l)):
	l[i] = l[i].split(" ")[0].split("/")[-1]
all_packages = len(l)
print 'Total %d files' % all_packages
# проходим по всем дискам
for disc_number in xrange(1,DISC_COUNT+1):
	# получаем список файлов, хранящихся на disc_number ДВД
	f = open(DB_DIR + str(disc_number), "r")
	flist = f.readlines()
	f.close()
	# удаляем перевод строки
	for i in range(len(flist)): flist[i] = flist[i][:-1]
	copy_list = list()
	# выбираем пакеты, которые нам надо
	for s in l:
		if flist.count(s)>0 : copy_list.append(s)
	# и если такие есть то копируем их на винт		
	if len(copy_list)>0:
		print 'Insert %d DVD' % disc_number
		raw_input('Press enter when finished...')
		os.system(MOUNT_CMD)
		for s in copy_list: 
			os.system("cp "+DISC_DIST_DIR+ s +" "+LOCAL_DIST_DIR+" || die \"not copy\"")
		os.system(UMOUNT_CMD)
		disc_packages = len(copy_list)
		ondisc_packages += disc_packages
		print 'Copyed %d files' % disc_packages
print 'Total copy '+str(ondisc_packages)+' of '+str(all_packages)+' files'

Иногда удобнее скопировать сразу несколько пакетов:
для начала очищаем файл cat /dev/null > ./lists/copy_list
скрипт для добавления пакета в очередь для копирования list.py

#!/usr/bin/env python
# -*- coding: utf8 -*-

LIST_FILE="/root/lists/copy_list"

import os, sys

f = open(LIST_FILE, "r")
l = f.readlines()
f.close()
for i in range(len(l)): l[i]=l[i][:-1]
cl = os.popen3("emerge -fp "+sys.argv[1])[2].readlines()
for x in cl[:]: 
	if x=="\n": cl.remove(x)
for i in range(len(cl)):
	cl[i] = cl[i].split(" ")[0].split("/")[-1]

for s in cl:
	if l.count(s)==0: l.append(s)

f = open(LIST_FILE, "w")
for s in l: f.write(s+"\n")
f.close()

скрипт для копирования очереди copy_list.py

#!/usr/bin/env python
# -*- coding: utf8 -*-

LIST_FILE="/root/lists/copy_list"
# путь до списков (слэш обязателен)
DB_DIR = "/root/lists/"
# путь копирования тарболов
LOCAL_DIST_DIR = "/usr/portage/distfiles/"
# путь до каталога на ДВД
DISC_DIST_DIR = "/mnt/cdrom/distfiles/"
# команды монтирования и размонтирования ДВД
MOUNT_CMD = "mount /dev/hdc /mnt/cdrom"
UMOUNT_CMD = "umount /mnt/cdrom"
# кол-во дисков
DISC_COUNT = 11

import sys, os

# получаем список ссылок для скачивания
f = open(LIST_FILE, "r")
l = f.readlines()
f.close()
# удаляем пустые строки 
for i in range(len(l)): l[i] = l[i][:-1]
# проходим по всем дискам
for disc_number in xrange(1,DISC_COUNT+1):
	# получаем список файлов, хранящихся на disc_number ДВД
	f = open(DB_DIR + str(disc_number), "r")
	flist = f.readlines()
	f.close()
	# удаляем перевод строки
	for i in range(len(flist)): flist[i] = flist[i][:-1]
	copy_list = list()
	# выбираем пакеты, которые нам надо
	for s in l:
		if flist.count(s)>0 : copy_list.append(s)
	# и если такие есть то копируем их на винт		
	if len(copy_list)>0:
		print 'Insert %d DVD' % disc_number
		raw_input('Press enter when finished...')
		os.system(MOUNT_CMD)
		for s in copy_list: 
			os.system("cp "+DISC_DIST_DIR+ s +" "+LOCAL_DIST_DIR)
		os.system(UMOUNT_CMD)

На этапе установки нужна уже готовая база, созданная скриптом db.py
исходники ядра и груб я скопировал руками
когда грузиться система:

cd путь_до_скриптов

если нужно задаем USE флаги
echo "app-misc/mc -ncurses slang unicode" >> /etc/portage/package.use

./list.py syslog-ng
./list.py mc
./list.py screen
./list.py splash-utils
........
./copy_list.py
emerge -va syslog-ng mc screen splash-utils


если нужен какой-то один пакет
./copy.py kde
emerge -va kde

P.S. На первом диске есть папка xorg - ее я просто копировал в distfiles.

Знаю что решение не лучшее. Буду рад выслушать ваши предложения.

а я вот..

а я вот перед установкой на vmware настраивал на нем второй виртуальный cdrom? к которому цеплял заранее скинутые iso с дисков и у меня грузилось все что надо )) единственно что разруливал так это /dev/cdrom0 /dev/cdrom1
можно к одному из cdrom ов привентить installcd а к cdrom у привязать физический cdrom =) главное разрулить в настройказ вмвари мастер/раб чтобы небыло траблов с загрузкой livecd )

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

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