Создание загрузочных образов

Следующие действия производятся на любой доступной машине с уже установленной операционной системой 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
      

В данном разделе эти команды приведены только в качестве примера. Ниже назначение этих команд и порядок их использования будут подробно описаны.