Создание загрузочного CD диска с дистрибутивом linux. как сделать свой live CD linux


Как сделать свой CD c linux

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: ysinit:/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, размер — чтоб влезло все необходимое
Hабор подбираем экспериментально (для этого очень полезен перезаписываемый
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

Загружаемся