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]- ↑ 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.
- ↑ Isohybrid (SYSLINUX wiki)
- ↑ Mirrors for efiboot.img (mirrors.slackware.com)
Forrás
[szerkesztés]- ISOLINUX (SYSLINUX wiki)
- Make UEFI bootable live CD (LinuxQuestions.org)
- Thomas Schmitt: Collection of Boot Sector Formats for ISO 9660 Images (libburnia-team)
- Mkisofs (OSDev.org)
- Christopher J. Ruwe, Dipl.-Kfm. u. M.Comp.Sc.: Building ZFS Enabled Live CD for Debian (isolinux boot loader)
További információk
[szerkesztés]- SYSLINUX (angol Wikipédia)