Bejelentkezés

ISO_GRUB

Csillag inaktívCsillag inaktívCsillag inaktívCsillag inaktívCsillag inaktív
 

GRUB Boot ISO-ból

Írta: Kyle Rankin
Megjelent: 2017. március 14-én a Linux Journal - GRUB HOWTOs alatt
http://www.linuxjournal.com/content/grub-boot-iso


Tavaly olyan projekten dolgoztam, aminek a célja OEM-stílusú helyreállító partíció készítése számtógéphez. Miközben az OEM-telepítők valamilyen saját programmal egyszerűen felülírják és telepítik a képet a partícióra, ennél minden nyílt forráskódú szoftveren alapult. A helyreállító partíció csak néhány giga méretű volna – elegendően nagy a telepítő DVD ISO-képének és néhány, a telepítést segítő, előre gyártott fájl számára. Ha a felhasználó bármikor visszatérne a gyártó telepítette operációs rendszer verziójához, a GRUB-menüből kiválaszthatja az opciót, ami ISO-ból boot-ol és úgy indítja a telepítőt, mintha USB-kulcsot, vagy DVD-t használnánk.

Régebbi leírásokat olvasgatva ISO GRUB-ból boot-olásáról, számos bonyolult utasítást találhatsz, esetenként azért, mert régebbi típusú GRUB-hoz készültek. Napjaink GRUB2-jével szerencsére szabványos ISO boot-olása nem ennyire bonyolult. A példámban itt egy Debian Stretch telepítő DVD-t használtam, de ugyanezen lépéseknek működniük kell más disztribúciókkal és telepítő ISO-kal is, némi módosítással.

A partíció létrehozása

Először is készítsünk egy helyreállító partíciót. A telepítést én egy szkripttel automatizáltam, de egyszerűen csak egy, a telepítő DVD elhelyezéséhez elegendő nagyságú partíciót készítettem. Felcímkéztem, hogy később megkülönböztethessem a többi lemeztől és a lemez második partíciójának tettem meg. Mivel ezt automatikus módban csináltam, dd-t alkalmaztam az aktuálisan használt telepítő DVD képének elkészítésére, mintegy a telepítést befejező script-ként, amit annak a partíciónak a gyökerében, install_dvd1.iso néven mentett. Természetesen, ha ezt működő, operációs rendszerrel rendelkező rendszer alól csinálod, akkor egyszerűen át is másolhatod az iso-t közvetlenül a lemezre.

Készítsd el a GRUB Config-ot

A következő lépés egy olyan GRUB-config elkészítése, ami csatolja az ISO-t loopback-ként és betölti az adott ISO-ban található kernelt és initrd fájlt. Debian-alapú rendszereknél készíthetsz bash-szkripteket, amik saját GRUB konfigurációt raknak a /etc/grub.d/ alá és futtatják a grub-update-et az új grub.cfg felépítéséhez. De közvetlenül is szerkesztheted a grub.cfg-t is, vagy használhatod a disztribúció GRUB-konfigurációs szkriptjét a következő menüelemek hozzáadásához:

set root='hd0,msdos2'
set isofile="/install_dvd1.iso"
menuentry "Install OS" {
loopback loop (hd0,msdos2)$isofile
linux (loop)/install.amd/vmlinuz vga=788 auto=true file=/media/preseed.cfg -- quiet
initrd (loop)/install.amd/initrd.gz
}
menuentry "Install OS (Expert)" {
loopback loop (hd0,msdos2)$isofile
linux (loop)/install.amd/vmlinuz vga=788 -- quiet
initrd (loop)/install.amd/initrd.gz
}

Egy kicsit boncoljuk fel ezt a GRUB konfigurációt. Először is beállítasz két változót: a GRUB által használt root partíciót (a lemez második partíciója, amire a GRUB hd0,msdos2-ként hivatkozik) és az ISO fájlt.

set root='hd0,msdos2'
set isofile="/install_dvd1.iso"

Ezt követi két külön GRUB menü (mind a menuentry {}stanzas-on belül). Az első egy előkészített konfigurációs fájlra mutat és egy részben automatikus Debian-telepítést indít el, amíg a másik csak betölti a Debian telepítőt, előkészített fájl nélkül, és amolyan „Szakértő” módban viselkedik, így az összes telepítési opciót magad választhatod ki.

Eddig a pontig a GRUB-opciók eléggé hasonlítottak a más GRUB konfigurációkhoz, ám itt kezdődnek a változások. A menükben ezután egy loopback eszközt jelölsz meg a GRUB-nak használatra:

loopback loop (hd0,msdos2)$isofile

Innentől, akármikor hivatkozol a (loop)-ra a konfig-ban, a GRUB tudni fogja, hogy a loop címkéjű loopback fájlrendszert kell elérni, ami a (hd0,msdos2)/install_dvd1.iso-ra mutat. A következő két sor elég ismerős kell legyen azoknak, akik már dolgoztak Linux GRUB beállítással, ám némi csavarral:

linux (loop)/install.amd/vmlinuz vga=788 auto=true file=/media/preseed.cfg --quiet
initrd (loop)/install.amd/initrd.gz

Az első sor meghatározza a betöltendő kernelt és az annak átadandó opciókat, majd a következő sor rámutat a GRUB által a használandó initrd fájlra. A fő különbség, hogy minden fájlútvonalat egy (loop) indít, utasítva a GRUB-ot, hogy a fájlokat a loopback fájlrendszerben keresse.

Ha ezeknek a beállításokat a helyükre raktad a grub.cfg-ben, a következő boot-kor két új menü opciót látsz ott. Amikor először így kipróbáltam a legfrissebb Debian-telepítőt, akadt egy kis gondom. Kiderült, hogy az ISO-val érkezett initrd nem tartalmazza azt a telepítő szkriptet, ami az ISO-nak merevlemezről történő telepítéshez kell. Azt feltételezi, hogy DVD-ről, vagy USB lemezről tölt be. Kiderült, hogy emiatt, egy másik Debian-telepítő initrd-jét kell letölteni és a helyreállító lemezen elhelyezni, hogy működjön. Itt sikerült találnom egy működő initrd fájlt.

Természetesen, a partíció gyökerében ezzel az új initrd.gz fájllal, egy kicsit meg kellett változtatnom a GRUB-beállító fájlomat, hogy arra mutasson:

set root='hd0,msdos2'
set isofile="/install_dvd1.iso"
menuentry "Install OS" {
loopback loop (hd0,msdos2)$isofile
linux (loop)/install.amd/vmlinuz vga=788 auto=true file=/media/preseed.cfg --quiet
initrd /initrd.gz
}
menuentry "Install OS (Expert)" {
loopback loop (hd0,msdos2)$isofile
linux (loop)/install.amd/vmlinuz vga=788 -- quiet
initrd /initrd.gz
}

Vedd észre, hogy az initrd sora most a /initrd.gz-re mutat. Mivel a gyökér-változókat a config-ban már korábban meghatároztam, tudja hogy a hd0,msdos2-n kell keresnie a fájlt. Mihelyst az új initrd a helyére került, rendben voltam és a telepítő az elvárt módon működött. Ha ezt egy másik telepítővel akarod használni, győződj meg arról, hogy amikor a kernel betölti, képes-e a lemezen megkeresni a használandó ISO-t.

You have no rights to post comments