Linux/Saját linux live CD készítése/Minimális tartalom létrehozása
A liveCD tartalmát egy könyvtárszerkezetben állítjuk elő, melytől elvárjuk, hogy
- be lehessen lépni a chroot utasítással (azaz tartalmazzon shellt és a hozzá szükséges dinamikus könyvtárakat)
- az adott linux-disztribúcióban (újabb) csomagokat lehessen benne installálni (a csomagokat letöltő alkalmazás konfigurálva legyen).
Nem várjuk el a hálózati konfigurációt: ezt a chroot örökli a host rendszertől. Nem várjuk el, hogy bootolható legyen: liveCD esetén ez a CD kísérő információinak a feladata.
Ez a szócikk a minimális live CD-tartalmat állítja elő beállítások nélkül. Éppen csak annyit, ami a bebootoláshoz szükséges. A legfontosabb beállítások külön szócikkben találhatók.
Kiinduló helyzet
szerkesztésE szócikkben azt feltételezzük, hogy a létrehozandó tartalom gyökere az eredetileg üres /mnt könyvtár, mely mountolt fájlrendszer is lehet.
Alaprendszer letöltése
szerkesztésA debian-alapú disztribúciókban így lehet letölteni a minimális rendszert:
debootstrap suite /mnt
E szócikk írásakor[1] a stabil suite (disztribúción belüli verziónév):
- debian: stretch
- ubuntu: bionic.
Az alaprendszerről érdemes mentést készíteni, mert előfordulhat, hogy másképp is megpróbáljuk előállítani a liveCD-t, és a visszatöltés jóval gyorsabb a debootstrap újabb futtatásánál.
Rpm-alapú alaprendszer telepítését nem részletezzük, de példát mutatunk rá, hogyan lehet debian-alapú rendszerből Fedorát telepíteni ZFS root fájlrendszerre. A példa felhasználható (akár más) rpm-alapú alaprendszer telepítésére is.
A továbbiakban azt feltételezzük, hogy debianban vagyunk. Más disztribúcióban a csomagnevek különbözhetnek.
Belépés chroot-ba
szerkesztésA chroot egy nagyon egyszerű virtuális környezet, melyben a guest a host diszkjének egy könyvtárát látja root fájlrendszerként, és hozzáfér annak alkönyvtáraihoz, de a host diszkjének többi részéhez nem. Ebből következik, hogy a könyvtár alatt egy működőképes linux rendszernek kell lennie.
A chroot /mnt
utasítás egy shellt indít a guest környezetében. Kilépésig a /mnt könyvtárat látjuk root fájlrendszernek. A gép többi erőforrását a guest-beli shell eléri (memória, processzor, hálózat) – feltéve, hogy a chroot-on belüli fájlokon keresztül akar hozzáférni.
A chroot-ban végzett műveletek egy részéhez szükség van a host eszközfájljaira. A proc és sys fájlrendszer chroot-on belülről is hozzáférhető, de egyszerűbb azokat is a belépés előtt csatolni:
mount /dev /mnt/dev --bind
mount /proc /mnt/proc --bind
mount /sys /mnt/sys --bind
chroot /mnt # chroot-ban vagyunk
Az alaprendszer konfigurálása chroot-ban
szerkesztésAz első teendő a root jelszó törlése vagy megváltoztatása, egyébként bootolás után nem tudnánk bejelentkezni:
passwd -d root # törli a root jelszavát
A liveCD-n overlay fájlrendszer lesz, amit a bootolás után az initrd-nek kell felállítania. Ehhez szükség van egy csomagra:
apt-get install live-boot
A bootoláshoz nem kell, hogy legyen kernel a fájlrendszerben, a boot loader ugyanis a CD-ről fogja betölteni a kernelt, és a már futó kernel nyitja meg a root fájlrendszert. Viszont szükség van a chroot környezetben előállított initrd-re a bootoláshoz, és a használatkor a kernel még be nem töltött moduljaira is.[2] A legegyszerűbb felinstallálni a kernelt, bár ez kb. 250 MByte helyet foglal a liveCD-n:
apt-get install linux-image-amd64
Fontos, hogy az initrd generálásakor a livecd csomag már telepítve legyen. Kétség esetén így lehet előállítani:
update-initramfs -u -t -k all
Ennyi elegendő egy minimális bootolható liveCD-hez.
Kétféleképpen léphetünk tovább:
- az alaprendszer testreszabása VAGY
- bootolható ISO-fájl előállítása (következő alfejezet). Később visszetérhetünk a testreszabásra, de meg kell ismételni az ISO-fájl előállítását.
Kilépés chroot-ból
szerkesztésapt-get clean # letöröljük a felinstallált csomagok fájljait
umount /dev /proc /sys
exit # ismét a hoston vagyunk
A következő lépés bootolható ISO előállítása az eddig installált csomagokkal.
Jegyzetek
szerkesztés- ↑ 2018. június.
- ↑ Az initrd egy mini linux rendszer, melyet a boot loader tölt be az általa létrehozott memóriadiszkre, majd betölti és elindítja a kernelt ezzel a roottal, mint normál linux rendszert. Az initrd init programja tölti be a szükséges kernel-modulokat (melyeket az immár memóriadiszken levő fájlrendszere tartalmaz), majd a pivot_root kernel-hívással root fájlrendszert vált. A kernel felszabadítja az initrd memóriaterületét, és az új rooton elindítja annak init-jét (ami a mai rendszerekben a systemd).
Forrás
szerkesztés- Debootstrap (wiki.debian.org)
- Debian 9 “Stretch” szerver profi telepítése (a 2017. augusztus 15-i ingyenes online képzés felvétele)