Linuxnews - Forum
Делаем загрузочный CD с Linux. - multik (02-Mar-2001, 15:43)
Cборка загрузочного CD c "live"-системой:

1) собираем ядро с вкомпилеными опциями:
Block Devices --> RAM disk support,
--> Initial RAM disk (initrd) support
ну естественно ext2 поддержка и вся фигня типа нетворк модулей и что там
еще пригодится, в зависимости от будущего применения диска.

2) создаем дерево каталогов будущего CD:
/tmp/CD/
/tmp/CD/.boot
/tmp/CD/live

а также временные точки для монтирования образов:
/mnt/BOOT
/mnt/INITRD
/mnt/BIN
/mnt/SBIN
/mnt/USR
/mnt/LIB

3) создаем заготовку "boot-floppy" (загрузочный CDROM в процессе загрузки
изображает из себя флоп.. это BIOS-овы заморочки...)

dd if=/dev/zero of=/tmp/CD/.boot/boot.img bs=512 count=5760
mkfs.ext2 /tmp/CD/.boot/boot.img
mount -o loop /tmp/CD/.boot/boot.img /mnt/BOOT
mkdir /mnt/BOOT/boot
mkdir /mnt/BOOT/dev

4) копируем ядро
cp vmlinuz /mnt/BOOT
и загрузочный сектор:
cp /boot/boot.b /mnt/BOOT/boot/boot.b

копируем в /mnt/BOOT/dev необходимые девайсы: /dev/fd0, fd0E2880,
fd0H1440, loop0-loop8, mem, null, ram, ram0, ram1..., tty, tty0,tty1,tty2
- все рабочие девайсы не надо копировать СЮДА, их поместим внутрь
ramdisk'а.

5) готовим ramdisk: dd if=/dev/zero of=/tmp/initrd count=3072 (размер
подобрать экспериментально чтоб в за-gzip-енном виде влезло вместе с
ядром на 2.88Mb)

mkfs.ext2 /tmp/initrd
mount -o loop /tmp/initrd /mnt/INITRD
cd /mnt/INITRD
mkdir etc bin sbin tmp var cdrom dev lib mnt proc root usr

далее, выясняем какие библиотечки нужны с помошью ldd :

ldd /bin/bash , ldd /sbin/init и тп, копируем эти библиотеки в /mnt/INITRD/lib,

из программ нужно:

getty (agetty или чего там)
init,telinit,runlevel
sh (ash, bash или какую там шелл предпочитаете)
cmp
mkdir
mke2fs
mkfifo
mknod
mkswap
mount,umount
reset,tset
swapon,swapoff
hostname :)

все это дело кидаем в bin, делаешь симлинки sbin --> bin,
usr/bin --> bin, usr/sbin --> bin.
--------------
Потом в /mnt/INITRD/etc создаем inittab, fstab, rc (необходимо) и по
желанию - другие конфигуряшки для аварийно-спасательного диска.
в inittab пишем:
------------
id:2:initdefault:
si::sysinit:/etc/rc
g1:2345:respawn:/sbin/getty 9600 tty1
g2:23:respawn:/sbin/getty 9600 tty2
g3:23:respawn:/sbin/getty 38400 tty3
g4:23:respawn:/sbin/getty 38400 tty4
------------

В rc:
------------
#!/bin/sh
/bin/mke2fs /dev/ram1
/bin/mount -av
/bin/hostname emergency
/usr/bin/tset linux
/etc/rc.d/rc.modules
/etc/rc.d/rc.network
echo
echo "=================================="
echo "Welcome to EMERGENCY RESCUE system"
echo "=================================="
echo
/bin/mount /dev/ram1
-------------

в fstab:
-------------
/dev/ram0 / ext2 defaults 0 0
/dev/fd0 / ext2 defaults 0 0
/proc /proc proc defaults 0 0
/dev/cdrom /cdrom iso9660 ro,user 0 0
/cdrom/live/lib.img /lib ext2 ro,loop 0 0
/cdrom/live/sbin.img /sbin ext2 ro,loop 0 0
/cdrom/live/bin.img /bin ext2 ro,loop 0 0
/cdrom/live/usr.img /usr ext2 ro,loop 0 0
/dev/ram1 /tmp ext2 defaults 0 0

-----------------------
как можно заметить в вышеприведенных конфигах монтируются файлы *.img -
в них-то мы и кладем аварийные и спасательные примочки. Создаем
файлы-образы с помощью dd, размер - чтоб влезло все необходимое :)
Набор подбираем экспериментально (для этого очень полезен перезаписываемый
CD-rewritable).

---------------------
далее.. собрав в /mnt/INITRD рамдиск, отмонтируем его, гзипуем и
кладем в /mnt/BOOT. Потом создаем /tmp/lilo.conf и в него пишем:
---------------------------------
#lba32
vga = 0x030A
compact
message=/mnt/BOOT/boot/message
boot = /dev/loop0
disk = /dev/loop0
bios = 0x00
sectors = 36
heads = 2
cylinders = 80
install = /mnt/BOOT/boot/boot.b
backup = /dev/null
map = /mnt/BOOT/boot/map
timeout = 150
read-write
image = /mnt/BOOT/vmlinuz
initrd = /mnt/BOOT/initrd.gz
read-only
append="ramdisk_size=8192 load_ramdisk=1"
root = /dev/ram0
------------------

потом говорим
lilo -C /tmp/lilo.conf
он нам отвечает
added *vmlinuz

после этого отмонтируем /mnt/BOOT, идем в директорию /mnt/CD и делаем
образ cdrom-a:

mkisofs -o /tmp/image.iso -R -V"BOOT" -v -a -T -d -D -N \
-b .boot/boot.img -c .boot/boot.b /mnt/CD

прожигаем диск (односессионный):
cdrecord -v -speed=4 dev=0,0,0 -eject /tmp/image.iso

Загружаемся ? :)

(c) Ilia Pavlenko ilia@xtra.co.nz

 Авторское право

 (c) 2001 SWsoft Pte Ltd.


Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости