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és

E 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és

A 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és

A 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és

Az 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és
apt-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.

  1. 2018. június.
  2. 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).