Linux rendszerek automatizált telepítésére kerestem már megoldást korábban, de valamennyi manuális beavatkozásra szükség volt az eddigi megoldásaimnál. A következő cikkben viszont bemutatok egy ezzel kapcsolatos projektet, FAI.

Környezet létrehozás

Tesztelés céljára létrehozunk két virtuális gépet, az egyik az install server, a másik az install client szerepet tölti majd be.

A teszt környezet Vagrant lesz. A virtuális gép alapja egy Debian Bullseye lesz, Linux KVM virtuális környezetben. Létrehozunk egy faiserver és egy demohost nevű gépet, utóbbi PXE boot funkcióval indul. Az első gép lesz az install server, a második az install client.

role name IP MAC
install server faiserver 192.168.33.2 -
install client demohost 192.168.33.3 00:11:22:0a:0b:0c

demohost

Login Password
root fai
demo fai

Mivel ez a telepítő környezet az osztályok (class concept) elvét használja arra, hogy eldöntse mit és hogyan csinál, hamarosan mutatok arra példát, hogyan bírálható felül pl.: egy időzóna beállítás az install client esetén.

Amire érdemes figyelni, ha a Vagrant feltelepült, hogy a vagrant-libvirt plugin-ból a 0.8.2-es verzió legyen telepítve, mert a 0.9.0 verzió rosszul kezelte a box nélküli konfigurációt, amit a demohost használ.

vagrant plugin install vagrant-libvirt --plugin-version '0.8.2'

0.10.0 verziótól újra működik

vagrant plugin update

Konfiguráció, VM létrehozás

A kiinduló konfigurációs fájlunk:

git clone https://github.com/csepely/fai.git

A lehetséges branch-ek listája:

git branch -a

Átváltani:

git checkout main;ls
git checkout efi;ls
git checkout pub_net;ls

A FAI Guide alapján készült a Vagrantfile állomány provision része.

A szükséges konfigurációs állományok megléte után hozzuk létre a fai néven hivatkozott virtuális gépet, a telepítés menete figyelemmel kísérhető a konzol kimeneten.

vagrant up fai

Az utolsó lépések között szerepel az, hogy létrehozzuk a demohost nevű gépet, amikor a fai VM elkészül indítható a demohost létrehozása is.

vagrant up demohost

A demohost kimenete interaktívan pl.: a virt-manager segítségével látható.

A gép elkészülte után alapértelmezetten egy ENTER segítségével indítható újra, azonban újraindítás után nyomjunk ESC billentyűt, hogy megállítsuk a boot folyamatot, mert ellenkező esetben újra PXE boot funkcióval indulna a VM, válasszuk a listában megjelenő lehetőségek közül a 2. Virtio disk… -t.

Egyedi időzóna beállításhoz jelentkezzünk be a fai VM-be, majd futtassuk az alábbi parancsokat:

vagrant ssh fai
sudo -i
ainsl -a /srv/fai/config/class/TIMEZONE.var 'TIMEZONE=Europe/Budapest'
fai-chboot -IF -u nfs://192.168.33.2/srv/fai/config -k ADDCLASSES=TIMEZONE demohost

A configuration space nevű helyen /srv/fai/config/ létrehozunk egy új osztály változót a class/ mappa alatt, a nevéből adódóan a TIMEZONE osztályról van szó. Ezen belül pedig a parancsban látható bash sort szúrjuk bele, majd újrageneráljuk a PXE boot folyamathoz szükséges konfigurációs fájlt, hogy a demohost újratelepítéséhez látszódjanak a fenti változtatások.

Alapértelmezetten Europe/Berlin időzónát használ a telepítő környezet, ez látható a FAIBASE.var állományban. Át is írhatjuk az eredeti konfigurációs állományokat, de felülbírálni jobbnak tűnik, mert mindig lesz egy eredeti kiinduló állapotunk, amit testre tudunk szabni.

Az így elkészülő gép telepítésekről napló bejegyzés keletkezik a faiserver VM /var/log/fai/remote-logs/ mappa alatt.

A változások kipróbálásához előbb eldobjuk a régi demohost VM-et, majd újra létrehozzuk.

vagrant destroy demohost
vagrant up demohost

A változások ellenőrzésére használjuk az alábbi parancsot a demohost VM alatt:

vagrant ssh demohost
ls -al /etc/localtime
# ... Europe/Budapest

A FAI megoldása több disztribúcióval is használható, én elsősorban Debiannal használom, de Ubuntu, vagy akár a személyes kedvencem, Archlinux telepítés is létrehozható vele, valamint virtuális gép image-k is, ha kellő képpen megismerjük az elvet, ami szerint testreszabható a telepítő környezet.

Néhány hasznos FAI parancs, konfigurációs beállítás, fájl

Egyedi osztályok

Egyedi osztályok hozzáadása egy PXE boot géphez:

fai-chboot ... -k ADDCLASSES=TIMEZONE,...

Titkosított partíció létrehozása

Ha esetleg titkosított partíciót is szeretnénk kezelni a FAI telepítő rendszerrel, akkor érdemes az /etc/fai/NFSROOT-ban hozzáadni a telepítendő csomagok közé a cryptsetup csomagot.

/etc/fai/NFSROOT

...
PACKAGES install-norec FULL
...
mdadm
cryptsetup
#git # git consumes a lot of disk space on the FAI CD

VM képfájl generálása

Egy ideig eltartott mire rájöttem, hogy miért nem készíti el a VM képfájlt a fai-diskimage alapértelmezett Debian telepítésnél, ezért remélem másnak is segítség lesz. A VM-en belül, vagy még a Vagrantfile-ban módosítsuk…

/etc/lftp.conf

set ssl:verify-certificate no

disk_config files

Nehezen találtam infót arról, ha az én igényeim azok lennének, hogy:

  • RAID10
  • Teljes rendszer titkosítás
  • LVM

Az ehhez szükséges disk_config állomány:

disk_config disk1 disklabel:gpt bootable:1 fstabkey:uuid
primary /boot/efi 512MiB  vfat  rw
primary - -100% - -

disk_config disk2 disklabel:gpt fstabkey:uuid
primary - 512MiB - -
primary - -100% - -

disk_config disk3 disklabel:gpt fstabkey:uuid
primary - 512MiB - -
primary - -100% - -

disk_config disk4 disklabel:gpt fstabkey:uuid
primary - 512MiB - -
primary - -100% - -

disk_config raid fstabkey:uuid
raid10 - disk1.2,disk2.2,disk3.2,disk4.2 - -

disk_config cryptsetup
luks:"fai" - md0 - - lukscreateopts="--type luks1"

disk_config lvm fstabkey:uuid
vg vgRAID10 md0
vgRAID10-root / 80GiB   ext4  rw,noatime,errors=remount-ro
vgRAID10-swap swap RAM:110%     swap sw