Linux/Saját linux live CD készítése/Bootolható ISO-fájl előállítása isolinux-szal

Ez a szócikk arról szól, hogy egy felinstallált linux rendszerből hogyan lehet hibrid (CD-ről és USB-ről is bootolható) ISO-fájlt létrehozni. Az installálás külön szócikkekben található.

Az elkészült ISO tesztelése és felírása külön szócikkben található.

ISO-n e szócikkben az ISO 9660 de facto szabványt és kiterjesztéseit értjük. Az USB általában pendrive.

Boot loaderek szerkesztés

Linuxon diszkről bootoláshoz a szinte kizárólag használt boot loader a grub.[1] A legtöbb live és install CD mégis isolinux-szal bootol – mármint BIOS-ban. UEFI-bootolásra viszont az isolinux nem képes.

Az isolinux-hoz tartozik egy isohybrid nevű program,[2] ami egy BIOS-ban bootolható ISO-t UEFI-bootolhatóvá tesz. Ehhez szükség van egy UEFI-ben bootolni képes diszk-képre. Az isolinux az efiboot.img-t ajánlja – amin grub boot loader van…[3] ezt viszont isohybrid nélkül is fel lehet telepíteni.

E szócikkben az isolinux-os live CD készítést ismertetjük. Pontosabban: BIOS-ban a boot loader az isolinux, UEFI-ben a grub. A teljesen grub-os változat eltéréseit másik szócikk írja le.

Szükséges debian-csomagok: isolinux grub-pc-bin grub-efi-amd64-bin xorriso

Kiindulási helyzet szerkesztés

A telepített linux rendszer a /mnt könyvtár alatt van.

Egy most még üres munkakönyvtárban vagyunk.

A fájlrendszer tömörítése szerkesztés

/mnt-ből kimásoljuk a kernelt és az initrd-t, egyelőre a munkakönyvtárba:

cp -p /mnt/vmlinuz vmlinuz
cp -p /mnt/initrd.img initrd

Tömörített fájlrendszerré alakítjuk a most felinstallált alaprendszert. Debianban a squashfs-tools csomag kell hozzá. Ha még nem csatoltuk le a chroot-hoz használt virtuális fájlrendszereket, most tegyük meg, ellenkező esetben a tömörítő hibát fog jelezni.

mksquashfs /mnt filesystem.squashfs -e boot

Ezután a /mnt tartalmára nem lesz szükségünk. Lecsatolhatjuk, ha külön fájlrendszerben van. A bootolhatóvá tétel és az ISO generálásának módja független a tartalomtól.

Munkakönyvtárak létrehozása szerkesztés

A fenti három fájlon kívül konfigurációs fájlokat is létrehozunk. A live alkönyvtárban gyűjtjük össze a bootolható ISO-hoz szükséges munkafájlokat.

#!/bin/bash

# Munkakonyvtarak letrehozasa
rm -rf live       # ha volt elozo tartalom, toroljuk
mkdir -p live/{isolinux,efi/boot}

# A kernel bemasolasa
cp -p vmlinuz initrd live/

Bootolás BIOS-ból szerkesztés

Az isolinux konfigurációs fájlját (isolinux.cfg) a munkakönyvtárban hozzuk létre:

ui menu.c32
prompt 0
menu title Boot Menu
timeout 50

label zfs-live
        menu label ^ZFS-live
        menu default
        linux /vmlinuz
        append initrd=/initrd boot=live

label zfs-live-failsafe
        menu label ^ZFS-live (failsafe)
        linux /vmlinuz
        append initrd=/initrd boot=live persistence config memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal

A fájl önmagáért beszél, csak annyit érdemes megjegyezni, hogy a timeout tizedmásodpercben értendő.

# BIOS-bootolashoz
cp -p /usr/share/live/build/bootloaders/isolinux/isolinux.bin \
         /usr/lib/syslinux/modules/bios/* isolinux.cfg    live/isolinux/

UEFI-bootolás szerkesztés

A grub konfigurációs fájlja (grub.cfg) ugyancsak a munka könyvtárban:

insmod all_video

set default="0"
set timeout=5

menuentry "ZFS live" {
    linux /vmlinuz boot=live nomodeset
    initrd /initrd
}

Ez még egyszerűbb.

Létrehozzuk a grub programot és moduljait tartalmazó fájlt a leendő helyén, és a helyére másoljuk a grub.cfg-t:

# EFI-bootolashoz
cp -p grub.cfg live/efi/boot/
grub-mkimage      \
        -d /usr/lib/grub/x86_64-efi \
        -o live/efi/boot/bootx64.efi \
        -p /efi/boot \
        -O x86_64-efi \
        fat iso9660 part_gpt part_msdos normal boot linux configfile loopback efifwsetup efi_gop efi_uga \
        ls search_label search search_fs_uuid test all_video exfat ext2 hfsplus udf cat memdisk tar minicmd help

Az ISO előállítása szerkesztés

A live könyvtár alá a fentiekben az alábbi fájlokat másoltuk:

isolinux/*.c32
isolinux/isolinux.bin
isolinux/isolinux.cfg
efi/boot/bootx64.efi
efi/boot/grub.cfg
initrd
vmlinuz

Az isolinux kezdetű sorok BIOS-ban, az efi kezdetűek UEFI-ben kellenek, az utolsó két sor pedig mindkettőben.

Az ISO-t előállító szkript:

xorriso -as mkisofs \
        -V 'ZFS live' \
        -boot-load-size 4 -boot-info-table \
        -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
        -isohybrid-gpt-basdat \
        -c isolinux/boot.cat \
                -b isolinux/isolinux.bin -no-emul-boot \
        -eltorito-alt-boot \
                -e efi/boot/bootx64.efi -no-emul-boot \
        -o zfs-live.iso \
        -graft-points \
                live \
                /live/filesystem.squashfs=filesystem.squashfs

mkisofs a klasszikus ISO-előállító program volt linuxban. Mára már nem fejlesztik. A xorriso egy függetlenül kifejlesztett, jóval több funkciójú program. A -as mkisofs után a többi kapcsoló az eredeti mkisofs-belivel (közel) azonos jelentésű.

A -V az ISO nevét adja meg.

A két -boot-… mind az isolinux, mind a grub boot loader számára szükséges. Az első a BIOS-nak mondja meg, hogy hány 512-bájtos szektort töltsön be a boot image elejéből. A második a xorriso-nak szól: módosítsa a boot image-t többlet információval. Ezért az isolinux.bin-t muszáj volt lemásolni.

A -isohybrid-mbr dos/mbr partíciós táblát tesz az ISO elejére. Ez USB-re íráskor előnyös, mert az USB fennmaradó területén újabb partíciókat hozhatunk létre saját szkripteknek vagy más fájloknak. Ezen felül a legtöbb BIOS diszkként bootolja az USB-t, és elvárja a partíciós táblát, sőt, sokszor a bootolható partíciót is, bár a boot flag-et a mai boot loaderek már nem használják.

A -isohybrid-gpt-basdat az UEFI-bootoláshoz szükséges fájlokat külön partícióba teszi. Az fdisk -l zfs-live.iso ezt írja ki:

…
zfs-live.iso1 *        0 823295  823296  402M  0 Empty
zfs-live.iso2       1292   1371      80   40K ef EFI (FAT-12/16/32)

Látjuk, hogy az EFI-partíció a másik partíció belsejében van. Ezt a formát használják a live és install CD-k.

Bootolható ISO esetén meg kell adni egy fájlt, ami a boot image-ek listáját tárolja (a mi esetünkben a -b és -e kapcsolóval megadottakat). A fájlnevet úgy kell választani, hogy ne legyen névütközés a többi fájllal. A névnek más jelentősége nincs. Ezt a nevet adja meg a -c kapcsoló; a boot.cat fájlt az xorriso állítja elő

A -eltorito-alt-boot azt jelzi, hogy az őt követő kapcsolók (esetünkben -e és -no-emul-boot) másik boot image-re vonatkoznak. (Több ilyen kapcsoló is lehetne, pl. ha a 64-bites PC-n kívül más gépen is bootolni szeretnénk a live CD-t. A BIOS és UEFI is külön platformnak számít.)

A -o az eredményfájl nevét adja meg.

A -graft-points azt teszi lehetővé, hogy az ISO-gyökér könyvtárába több helyről származó fájlt tegyük.

Ha a tételben nincs =, akkor a megadott fájlt vagy könyvtárat (esetünkben live-t) beteszi az ISO gyökérkönyvtárába. A = bal oldala az ISO-beli, a jobb oldala a fájlrendszerbeli fájl nevét és útvonalát adja meg. Például a

cp -p grub.cfg live/efi/boot/
…
xorriso -as mkisofs \        -graft-points \
                live \
                /live/filesystem.squashfs=filesystem.squashfs

kódot ezzel helyettesíthetnénk:

xorriso -as mkisofs \        -graft-points \
                live \
                /live/filesystem.squashfs=filesystem.squashfs \
                /efi/boot/grub.cfg=grub.cfg

A keletkezett ISO tartalmát a xorriso -indev zfs-live.iso -report_el_torito plain paranccsal listázhatjuk ki:

…
Volume id    : 'ZFS live'
El Torito catalog  : 33  1
El Torito cat path : /isolinux/boot.cat
El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
El Torito boot img :   1  BIOS  y   none  0x0000  0x00      4         323
El Torito boot img :   2  UEFI  y   none  0x0000  0x00   1153          34
El Torito img path :   1  /isolinux/isolinux.bin
El Torito img opts :   1  boot-info-table isohybrid-suitable
El Torito img path :   2  /efi/boot/bootx64.efi

A keletkezett ISO mountolható:

mount zfs-live.iso könyvtár -t iso9660 -o ro

könyvtár-ban a live könyvtár tartalmát és a -graft-points-val betett fájlokat látjuk viszont.

Egy partíciós ISO szerkesztés

A xorriso fenti paraméterei közül a -isohybrid-gpt-basdat sora kimarad.

fdisk -l zfs-live.iso egy partíciót mutat:

Device        Boot Start    End Sectors  Size Id Type
zfs-live.iso1 *        0 350207  350208  171M 17 Hidden HPFS/NTFS

Az ISO tartalma:

…
Volume id    : 'ZFS live'
El Torito catalog  : 33  1
El Torito cat path : /isolinux/boot.cat
El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
El Torito boot img :   1  BIOS  y   none  0x0000  0x00      4         323
El Torito boot img :   2  UEFI  y   none  0x0000  0x00   1153          34
El Torito img path :   1  /isolinux/isolinux.bin
El Torito img opts :   1  boot-info-table isohybrid-suitable
El Torito img path :   2  /efi/boot/bootx64.efi

Vagyis a paraméter elhagyása az USB számára változtatta meg a partíciós táblát az ISO elején, a rendszerterületen. Az ISO belsejében a CD számára maradt a két partíció.

Jegyzetek szerkesztés

  1. Annak a 2-es változata, amit nem is szokás feltüntetni. Az 1-es változatot már nem használja szinte senki.
  2. Isohybrid (SYSLINUX wiki)
  3. Mirrors for efiboot.img (mirrors.slackware.com)

Forrás szerkesztés

További információk szerkesztés