Установка 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; }Даём ему права на исполнение
В-общем, всё. Работает это просто:
В файле 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
исходники ядра и груб я скопировал руками
когда грузиться система:
P.S. На первом диске есть папка xorg - ее я просто копировал в distfiles.
Знаю что решение не лучшее. Буду рад выслушать ваши предложения.
а я вот..
а я вот перед установкой на vmware настраивал на нем второй виртуальный cdrom? к которому цеплял заранее скинутые iso с дисков и у меня грузилось все что надо )) единственно что разруливал так это /dev/cdrom0 /dev/cdrom1
можно к одному из cdrom ов привентить installcd а к cdrom у привязать физический cdrom =) главное разрулить в настройказ вмвари мастер/раб чтобы небыло траблов с загрузкой livecd )