Boot CD készítése

Címkék

Boot CD készítése


Bevezető


Egy Linux boot CD sok esetben hasznos lehet:

  • Új kernel tesztelése
  • Lemezhiba utáni helyreállítás
  • Letiltott rendszer javítása



A most elkészülő CD a szabványos, különféle
disztribúcióktól abban külünbözik, hogy
egy saját fájlrendszert is tartalmaz, tehát olyan gépen
is egy működőképes Linuxot kapunk, ahol nincs feltelepítve
operációs rendszer.Feltételezem, hogy az olvasó tisztában van a Linux rendszer-adminisztráció alapkérdéseiben, fstab, és passwd fájlok mire jók, vagy a rendszer parancsok, mint pl. a mount, és a df hogyan működik.



Egy boot CD-t többféle módon létre tudunk hozni, most egy boot floppy készítését írom le, majd annak CD-re másolását.



Az elkészítés lépései

  • Gyökér fájlrendszer elkészítése
  • Megfelelő kernel lefordítása és lemezre
    másolása
  • A lemezek tartalmának cd-re másolása



A gyökér fájlrendszer elkészítése



A gyökér fájlrendszernek tartalmaznia kell azokat a fájlokat, amik szükségesek egy minimális Linux elindulásához:

  • Alap könyvtárak: /dev, /proc, /bin, /etc, /lib, /usr,
    /tmp
  • Parancsok: sh, ls, cp, mv, stb.
  • Konfigurációs fájlok: rc, inittab, fstab, stb.
  • Eszközök: /dev/hd*, /dev/tty*, /dev/fd0, stb.
  • Eszközök által használt alap függvényeket
    nyújtó futásidejű eljáráskönyvtárak

A fájlrendszer elkészítéséhez szükség van egy területre, ahova másoljuk a fájlokat. Legegyszerűbb egy loopback eszköz csatolása, ami valójában egy létező fájl fájlrendszerként való
használata (másolhatunk bele, törölhetünk vele fájlokat stb)




Fájl elkészítése:



dd if=/dev/zero of=/tmp/fajlnev bs=1k count=4096



Ekkor el kell készíteni a fájlon valamilyen fájlrendszert:



mkfs.ext2 /tmp/fajlnev



Majd fel kell csatlakoztatni a fájlt loopback eszközként:



mount -o loop -t ext2 /tmp/fajlev /mnt



Az fájlrendszer benépesítése.



Létre kell hozni az alap könyvtárakat:



/dev -- Eszközök, melyek a B/K műveletekhez szükségesek

/proc -- Alkönyvtár-rendszer, amire a proc fájlrendszernek van szüksége

/etc -- Rendszerkonfigurációs fájlok

/sbin -- Kritikus rendszer binárisok

/bin -- A rendszer részét alkotó alap binárisok

/lib -- Futásidejű támogatást nyújtó
osztott eljáráskönyvtárak

/mnt -- Más lemezek karbantartására szolgáló
beillesztési pont

/usr -- Egyéb eszközök és alkalmazások



A következő könyvtárakat kell feltölteni:



/dev - Ide azokat az eszközöket kell átmásolni
a gyökér /dev könyvtárból, amelyekre egy alap
Linuxnak szüksége van. Fontos, hogy az eszközöket a
cp -dpR /dev/mnt parancsal másoljuk, mert ekkor a linux nem próbálja meg a fájlok belsejét is másolni.



Mindenképpen át kell másolni a következő
eszközöket: console, kmem, mem, null, ram, tty1.



/etc - Ide kerülnek a linux konfigurációs fájljai:



rc.d/* -- rendszerindító és futásszint váltó szkriptek

fstab -- beillesztendő fájlrendszerek
listája



Legalább a következőket kell tartalmaznia:



/dev/ram0
/
ext2 defaults

/dev/fd0
/
ext2 defaults

/proc
/proc proc
defaults



inittab -- az init folyamat fájljai, az indításkor elsőként elinduló folyamat.

Egy minimális inittab fájl például így nézhet ki:



id:2:initdefault:

si::sysinit:/etc/rc

1:2345:respawn:/sbin/getty 9600
tty1

2:23:respawn:/sbin/getty 9600
tty2



passwd -- felhasználók listája,
home könyvtárak, stb.

group -- felhasználói csoportok

shadow -- felhasználók jelszavai.
Nem kötelező ezt használni.

termcap -- a terminál képesség-adatbázisa.



rc - a következőket kellene tartalmaznia:



#!/bin/sh

/bin/mount -av

/bin/hostname Kangaroo




/bin és /sbin
Ide kell bemásolni az alapműveleteket:

  • init, getty login, mount, parancsértelmező,
    (sh, bash, stb.)
  • ls, mv, cat és a dd

/lib - Ki kell adni a következő parancsot:



% ldd /sbin/mke2fs

libext2fs.so.2 => /lib/libext2fs.so.2
(0x40014000)

libcom_err.so.2 => /lib/libcom_err.so.2
(0x40026000)

libuuid.so.1 => /lib/libuuid.so.1
(0x40028000)

libc.so.6 => /lib/libc.so.6
(0x4002c000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2
(0x40000000)




Az összes megjelenő fájlt be kell másolni a /lib
könyvtárba.



Modulok.



Ha moduláris a kernel, a modulokat el kell helyezni a /lib/modules könyvtárba. Célszerű még bemásolni a insmod, rmmod , lsmod, modprobe, depmod és aswapout parancsokat.



/var - El kell benne készíteni a log, és run
könyvtárakat, a run-ban az utmp könyvtárakat



Ekkor le kell futtatni a:



chdir /mnt; chroot /mnt /sbin/ldconfig



parancsot, ami újragenerálja az mnt/etc/ld.so.cache fájlt.



Az fájlrendszer feltöltése



Le kell az fájlrendszert csatolni, átmásolni egy fájlba, majd betömöríteni



umount /mnt

dd if=/tmp/fajlnev bs=1k | gzip
-v9 > rootfs.gz



Ekkor létrejön a rootfs.gz fájl, ami tartalmazza
a tömörített fájlrendszert.



Kernel választása



Egy olyan kernelt kell lefordítani, ami minél
egyszerűbb és minél kisebb. Emellett feltétlenül
tartalmaznia kell a memórialemez és az ext2 támogatást.



Lemez elkészítése



A kernelt érdemes lilo-val telepíteni,
ekkor később lehetőségünk van további paraméterek
beállítására.



Először el kell készíteni bdlilo.conf fájlt
a követkető sorokkal:



boot =/dev/fd0

install =/boot/boot.b

map =/boot/map

read-write

backup =/dev/null

compact

image = KERNEL

label = Bootdisk

root =/dev/fd0




Most létre kell hozni egy kernel fájlrendszert:



Először ki kell számítani a KERNEL_BLOKK méretét,
a kernel image méretét vegyük KB-ban és adjunk hozzá 50-et.



Egy lemezen készítsük el a kernel fájlrendszert:



mke2fs -i 8192 -m 0 /dev/fd0
KERNEL_BLOKK




Ezután be kell mountolni:



mount /dev/fd0 /mnt



Letörölni a lost+found könyvtárat, és
létrehozni a boot, és dev könyvtárakat,
majd a dev könyvtárba belemásolni a következő
eszközöket



cp -R /dev/{null,fd0,cdrom,hdc}
/mnt/dev



a boot könyvtárba pedig átmásolni a gyökér
/boot
könyvtárából a boot.b fájlt.



Utoljára bele kell másolni a kernelt, és a bdlilo.conf
fájlt a diszketta gyökérkönyvtárába



Ekkor kész a kernel fájlrendszer, csak a lilot-kell
lefuttatni:



lilo -v -C bdlilo.conf -r /mnt



Memórialemez szó beállítása



A kernel image belsejében van a memórialemez szó, ami
megadja, hogy hol található a gyökér fájlrendszer, több más paraméterrel együtt. A szó az rdev utasítással érhető el, és a következőképpen kell értelmezni:



Az fájlrendszer közvetlenül a kernel után kerül, tehát az eltolás az első szabad blokkra (aminek meg kell egyeznie a KERNEL_BLOKK-al) fog mutatni. A 14. bit 1, a 15. nulla.



Például, tegyük fel, hogy egy lemezt készítünk, és a gyökér fájlrendszer a 253. (decimális) blokknál kezdődik. A memórialemez szó értékének 253-nak (decimális) kell lennie, a 14. bitet 1-re, a 15. bitet 0-ra kell állítani. Ahhoz, hogy kiszámítsuk az értéket, egyszerűen csak össze kell adni a decimális számokat.



253 + 2^14 = 253 + 16384 = 16637.



Ekkor le kell futtatni a következő parancsot



rdev -r /dev/fd0 ÉRTÉK



most le lehet csatolni a lemezt.



Elkészült a használható boot floppy.



A gyökér fájlrendszer átvitele.


A gyökérfájlrendszert a következőképpen kell
fel felírni lemezre



dd if=rootfs.gz of=/dev/fd0
bs=1k seek=KERNEL_BLOKK




Ekkor elkészült a boot floppy.





Boot floppy felmásolása CD-re


Hajtsuk végre a következő parancsot:



dd if=/dev/fd0 of=boot.img bs=10k
count=144



Ekkor a bootfloppy tartalma a boot.img image fájlba másolódik.

Másoljuk a boot.img fájlt egy könyvtárba,
ez lesz az ISO fájlrendszer forrása


Ekkor adjuk ki a:



mkisofs -r -b boot.img -c boot.catalog -o bootcd.iso .



parancsot ami létrehozza a bootcd.iso fájlt. Ezt a fájlt
írjuk ki CD-re és kész a boot cd.





Forrás:
Tom Fawcett: Bootdisk-howto (http://tldp.org/HOWTO/Bootdisk-HOWTO)




Készítette: Faragó Szabolcs

Hozzászólások

Amúgy szerintetek egy ilyenre milyen kernelt érdemes tenni? Gondolom nem a legújabb 2.6 -os sorozatot, hanem valami régebbit... vagy a 2.6 -ost is le lehet csupaszítani annyira, hogy ne foglaljon sok helyet? És melyik kernel lehet a jobb? Ami moduláris, vagy inkább a "mindent bele" statikus ?

Aha... akkor elmondanád itt részletesen azt, hogy mi is változott a fenti íráshoz képest...?

Hogy az "új" módon is lehessen készítgetni... :)

Szerintem ha boot-cd -t keszítünk, többminden is kerülhet a fájlrendszerbe, illetve a kernelbe... nem kötelező szerintem az egésznek egy floppy -n elférnie, a cd-n úgyis van hely... :)

> Például, tegyük fel, hogy egy lemezt készítünk, és a

> gyökér fájlrendszer a 253. (decimális) blokknál kezdődik.

Ezt az értéket honnan lehet megtudni? Mármint ami a példában 253. Vagy ahány blokk (vagyis ahány kilobyte) a kernel mérete+1 ?