Faragosz blogja

Boot Lemez készítése

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

  1.  Gyökér fájlrendszer elkészítése
  2.  Megfelelõ kernel lefordítása és lemezre
    másolása
  3.  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