Boot Lemez készítése
BootCD készítése
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 muveletekhez 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 a swapout 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 liloval 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