Следующие действия производятся на любой доступной машине с уже установленной операционной системой Linux.
Берём из дистрибутива файл image/network.img и монтируем его командой:
$ mount -t vfat -o loop=/dev/loop0 <path>/image/network.img /mnt/image
предполагая, что <path> — это путь до корневого каталога дистрибутива на CD-ROM. Изменим в образе установочной дискеты файл syslinux.cfg, записав в него следующие строчки:
default rescue ... label rescue kernel vmlinuz append ramdisk_size=64000 initrd=network.rdz network rescue rw vga=788
Размер RAM-диска увеличиваем до 32 Мб. Этого должно хватить с избытком (обычно достаточно 20 Мб). Главное, что бы он был не меньше, чем распакованный файл rescue_stage2.bz2.
Размонтируем /mnt/image и запишем образ на дискету командой:
$ umount /mnt/image && dd if=network.img of=/dev/fd0
При загрузке с такой дискеты программа установки по умолчанию перейдёт в “спасательный” режим с размером RAM-диска равным 32 Мб, хотя и другие режимы, вызываемые по клавише F1, остаются доступны.
Поскольку нам придётся добавить некоторые модули интерпретатора Perl в файл rescue_stage2.bz2, то придётся увеличить размер последнего. Создаём новый файл, файловую систему в нем и монтируем полученный образ:
$ dd if=/dev/zero of=/mnt/image/rescue_stage2 ibs=1024 count=30000
$ mke2fs -qF /mnt/image/rescue_stage2
$ mount -o loop /mnt/image/rescue_stage2 /mnt/disk
Убедиться в том, что образ успешно создан и примонтирован, можно с помощью команды mount, вызванной без параметров. Предварительно распаковав оригинальный образ rescue_stage2.bz2 из дистрибутива, тоже монтируем его:
$ mkdir /mnt/disk.orig $ bzip2 -dc <path>/Mandrake/base/rescue_stage2.bz2 > /tmp/rescue_stage2 $ mount -o loop /tmp/rescue_stage2 /mnt/disk.orig
Теперь копируем все содержимое из /mnt/disk.orig в /mnt/disk, чтобы получить образ с содержимым оригинального, но большего размера.
$ umount /mnt/disk.orig $ rm -f /tmp/rescue_stage2
Теперь так же монтируем установочный образ:
$ bzip2 -dc <path>/Mandrake/base/mdkinst_stage2.bz2 > /tmp/mdkinst_stage2 $ mount -o loop /tmp/mdkinst_stage2 /mnt/disk.orig
В каталоге /mnt/disk.orig нас интересует Perl:
$ cp -R /mnt/disk.orig/usr/lib/perl5 /mnt/disk/usr/lib/perl5
Интерпретатор (/usr/bin/perl) уже есть в rescue_stage2 и его версия та же, что и в mdkinst_stage2.
$ umount /mnt/disk.orig $ rm -f /tmp/mdkinst_stage2
Теперь последний штрих — сценарий на языке Perl, который будет брать файлы с FTP-сервера и записывать их содержимое в STDOUT. Текст скрипта следующий:
<BEGIN> #!/usr/bin/perl use Net::FTP; $addres=shift(@ARGV); $file=shift(@ARGV); $login='anonymous'; $passw='installer@rescue'; $prefix='/pub'; $ftp = Net::FTP->new($addres, Debug => 0) or die ''; $ftp->login($login, $passw) or die ''; $ftp->cwd($prefix); $ftp->get($file, *STDOUT); $ftp->quit; <EOF>
Можно поместить его как /mnt/disk/bin/getftp с правами 0755. В этом скрипте нет проверок вводимых данных и обработок ошибок; если у вас будет желание, вы можете модифицировать этот скрипт по своему усмотрению. Главная рабочая строка этого скрипта:
$ftp->get($file, *STDOUT);
Имеем полностью готовый к работе rescue_stage2; все, что нам нужно, там уже есть.
$ umount /mnt/disk $ bzip2 -9 /mnt/image/rescue_stage2 $ mkdir /var/ftp/pub/ALTLinux $ mkdir /var/ftp/pub/ALTLinux/base $ mv /mnt/image/rescue_stage2.bz2 /var/ftp/pub/ALTlinux/base/
Дальнейшие шаги предполагают, что в текущей системе установлен и работает FTP-сервер с корневым каталогом /var/ftp.
Теперь можно загрузить любой компьютер с подготовленной в самом начале дискеты и ввести адрес FTP-сервера, на котором в каталоге /pub лежит образ второго этапа установки. В используемом по умолчанию “спасательном” режиме можно произвести, например, следующие операции:
$ getftp <IP_FTP_SERVER> </path/filename.img.bz2> | \ bzip2 -d -c | dd of=/dev/hda
или:
$ mkfs.ext2 /dev/hda1 $ mount /dev/hda1 /mnt/disk $ cp /mnt/disk $ getftp <IP_FTP_SERVER> </path/filename.cpio.bz2> | \ bzip2 -d -c| cpio -i -make-directories $ chroot /mnt/disk $ lilo $ vi /etc/passwd
В данном разделе эти команды приведены только в качестве примера. Ниже назначение этих команд и порядок их использования будут подробно описаны.