Hirdetés

Linux Live ISO bootolása PXE-ről, UEFI rendszereken

Ilyen dolog márpedig nincs; legalábbis nem úgy, ahogyan más esetben, pl. BIOS-os gépeken megszokhattuk a PXE-s bootolást (azaz : hogy töküres gépre hálózatról indítani lehessen OS telepítést), hogy akár favágó módon egy ISO-t be lehet rántani, ha gyorsan kell valami. Na UEFI-n ilyen nincs. Pár dolog elindul (többé-kevésbé) sanboot-tal, meg Debian 11-re van mókolt firmware file, amiben van egy rakás hardver driver, és az működik közvetlenül csak a kernelt+initrd-t berántva PXE-n, de az elég régi, 12-höz még nem láttam ilyet.

Egy Ubuntu pedig nehezebb eset.

Az itthoni környezeten ugye már van a BIOS-os PXE/iPXE mellett egy EFI-s iPXE, ami még a Windows telepítő tesztekhez lett kreálva. A jó hír az, hogy iPXE alól nekem semmi nem működött, csak a Debian direkt bootolása. Mivel részben itthonra is, de munkahelyre is jól jön néha Linux telepítés PXE-ről, meg kellett azt is oldani. (Feltételezem a bejegyzéshez, hogy már van egy működő PXE környezet, amiről megy legalábbis az iPXE indítása UEFI-s gépen.)

Természetesen ez is favágó megoldás lesz :DDD , mert ez egyszerűbb első körben. (A kifinomultabb ugye, amikor NFS-re megy a telepítő :K .) A példában Ubuntu és Mint lesz (nagyon nem mindegy, mert a favágás miatt az Ubuntu elég púpos , 6GB a telepítő... :D ) . (Elkészülés után lett a végére Debian is :D )

Szóval első körben iPXE alól kell indítani egy Grubx64-et. (Ha valakinek nem kell Windows install, vagy GRUB-ból akarja azt is indítani, mert ugye lehet, akkor persze egyből bootolhatja a Grubx64-et... nekem már ott volt az iPXE, tehát onnan GRUB-ozódik a dolog.) A grubx64.efi megtalálható a (mondjuk, hogy Ubuntu, de a Mint-en is) telepítő CD-n a /EFI/boot könyvtárban. (Létezik signed is, még nem próbáltam secure boot-hoz.) Ha már úgyis csatolva van a CD, akkor a /casper-ből is kell az initrd és a kernel (vmlinuz) (Mint-en az initrd neve initrd.lz) A kernelt és az initrd-t tegyük le az ISO-val együtt pl. a webszerverre, vagy ez a két file akár mehet a TFTP-re is, a lényeg, hogy a GRUB majd le tudja tölteni mindet.

A grubx64.efi mehet akár webszerverre, akár a TFTP szerver könyvtárába (utóbbi talán jobb eset). A GRUB a konfigfile-ját alapvetően a /grub/grub.cfg néven keresi. A / pedig ilyenkor az, ahonnan letöltődött a grubx64.efi. (Ha elindult a GRUB, akkor meg is lehet nézni a GRUB shellben az echo $prefix vagy a set paranccsal, hogy ő mit tekint a konfigfile alapértelmezett helyének.)

Az iPXE-ből így indul a GRUB :
chain ${boot-url}/grubx64.efi
#vagy kernel ${boot-url}/grubx64.efi
boot

(A ${boot-url} az iPXE -nek azt jelenti, hogy ahonnan ő indult, nálam pl. ugyanott van az iPXE és a grubx64.efi, így ez egyszerű. )
Ha van működő GRUB, amit a PXE boot során, vagy iPXE-ből elindítunk, akkor kapunk egy GRUB shellt. Azaz, ha van konfigfile a /grub/grub.cfg néven, azt be is akarja húzni.

A grub.cfg meg valami ilyesmi :
set default="0"
set timeout=10
set linux_gfx_mode=keep
menuentry 'Linux Mint Live CD 22 Cinnamon' {
linux (http)/linuxmint/vmlinuz ip=dhcp url=http://192.168.1.106/linuxmint/linuxmint22cinnamon.iso toram  netboot=url boot=casper initrd=initrd.lz
#ha OEM install a cél, akkor a kernel paramétereihez még : oem-config/enable=true only-ubiquity username=mint hostname=mint
initrd (http)/linuxmint/initrd.lz

}

menuentry 'Ubuntu 24.04' {
linux (http)/ubuntu/vmlinuz ip=dhcp url=http://192.168.1.106/ubuntu/ubuntu2204.iso toram  netboot=url boot=casper initrd=initrd
initrd (http)/ubuntu/initrd
}

menuentry 'BIOS' {
fwsetup
}

menuentry 'EXIT' {
exit
}

Itt a (http) azt jelenti, hogy részemről a webszerverről (ami ugyanott van, mint a TFTP, sőt, még a könyvtár is ugyanaz) kellene letölteni az initrd-t, kernelt, ISO-t. Persze a GRUB nem fog panaszkodni, ha teljesen ki van írva a cím. A timeout=10 azt jelenti, hogy 10mp múlva elindul a default-ban megadott bejegyzés. A kernelnek átadott paraméterek elég beszédesek. IP-t kérjen (meg is lehet adni), a netboot módja url (lehetne NFS is), stb.

Ha minden jó, akkor valami ilyesmi történik :

A GRUB menü :

TőTTődik :

És ott a Mint Live CD (akkor az Ubuntu még nem volt hajlandó működni) :

Na most ugye itt az a gond, hogy a teljes ISO letöltődik a RAM-ba, majd ott még másolódik egy ramdiskre, szóval az ISO méreténél 2x nagyobb memória kell, ami a 6,2GB-os Ubuntu Live CD esetén... ciki :D A Mint telepítője pedig csak 2,8GB. A Canonical sajnos már nem ad netboot installert Ubuntura, csak a szerverre - ha hozzáértő az ember, akkor ez nem gond, azzal is lehet desktopot telepíteni. Nekem viszont olyasmi kellett (főleg, mivel munkahelyen is alkamazunk PXE-s telepítést) amivel első körben könnyen lehet a telepítőt cserélni (tehát új verzió esetén csak oda kell szórni pár file-t a megfelelő néven), valamint könnyen kialakítható hozzá a környezet. (8GB-nál kevesebb RAM-mal meg már itthon se gyakran fordul elő semmi, ami EFI-s, lehet barbárkodni ISO-kkal ;] .) Másik hátránya, hogy nyilván azt a 3-6GB-ot át kell rángatni a hálózaton, ami idő.

Lesz még ezen finomítva, pl. az itt, vagy itt látható NFS-es műsorral, vagy akár kipróbálom azt is, hogy a Debian netboot telepítői mit tudnak ISO-ként bebootolva GRUB-ból (mert iPXE-ből semmit :D spoiler : Grub alól ugyanazt tudják :D ) Mindenesetre már így is elég kényelmes itthon bármit (fizikait vagy virtuálist) telepíteni; automatizálni is lehetne, de hát itthon még kétszer ugyanaz nem kellett kb. :DDD

(Update : a végére azért sikerült összekaparni egy iPXE-ből is működő hálózati Debian 12 telepítőt. Ez ugye fullban Internetről megy, bár nyilván egy otthon webszerverre kirakva a file-okat meg otthonról fog. Bónusz : mindegy, hogy EFI vagy BIOS, megy mindenen, RAM-tól függetlenül.

#mukodo Bookworm current-hez iPXE alól
set inst-dir http://ftp.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/
kernel ${inst-dir}/linux initrd=initrd.magic auto=true priority=critical ip=dhcp
initrd ${inst-dir}/initrd.gz
initrd http://cdimage.debian.org/cdimage/firmware/bookworm/current/firmware.cpio.gz 
boot

)

Tovább a fórumba.