FAI - Fully Automatic Installation
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