Instalace Kickstart nám umožňují snadno skriptovat a replikovat bezobslužné nebo částečně bezobslužné instalace Fedory, Red Hat Enterprise Linux nebo CentOS. Pokyny potřebné k instalaci operačního systému jsou specifikovány s vyhrazenou syntaxí v souboru Kickstart, který je předán instalačnímu programu Anaconda. V tomto tutoriálu uvidíme, jak znovu použít již existující LUKS
(Linux Unified Keys Setup) kontejner při provádění instalace Kickstart:to je něco, čeho nelze dosáhnout pouze pomocí pokynů Kickstart a vyžaduje to několik dalších kroků.
V tomto tutoriálu se naučíte:
- Jak používat existující kontejner LUKS při provádění Kickstart instalace Fedory, RHEL nebo CentOS
- Jak vytvořit a používat soubor updates.img pro použití s instalačním programem Anaconda.
Jak nainstalovat Fedora/RHEL/CentOS přes kickstart na stávající zařízení LUKS
Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Fedora/Rhel/CentOS |
Software | K provedení tohoto výukového programu není potřeba žádný konkrétní software. |
Jiné |
|
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Úvod
Kickstart nám umožňuje snadno replikovat a přizpůsobovat instalace operačního systému způsoby, kterých je jednoduše nemožné dosáhnout z grafického instalátoru Anaconda. Můžeme například deklarovat, které balíčky nebo skupiny balíčků by měly být nainstalovány v systému a které by naopak měly být vyloučeny.
Máme také možnost spouštět vlastní příkazy před nebo po provedení instalace a specifikovat je ve vyhrazeném %pre
a %post
oddíly souboru Kickstart. Tuto posledně zmíněnou funkci využijeme k použití již existujícího LUKS
zařízení během procesu instalace.
Šifrování s nativní syntaxí Kickstart
Vytváření kontejnerů LUKS je poměrně snadné a lze jej provést pouze pomocí nativních pokynů pro kickstart. Zde je příklad:
part pv.01 --ondisk=sda --encrypted --luks-type=luks1 --cipher=aes-xts-plain64 --pbkdf-time=5000 --passphrase=secretpassphrase
Ve výše uvedeném příkladu pomocí část
instrukci vytvoříme zašifrovaný lvm
fyzický svazek na /dev/sda
disk. Uvádíme LUKS
verzi, kterou chcete použít (v tomto případě luks1 – alespoň v posledních verzích Fedory se luks2 stal výchozím), šifra
a čas, vyjádřený v milisekundách, strávený pro PBKDF
(Heslo-Based Key Derivation Function) zpracování přístupové fráze (je ekvivalentem použití --iter-time
možnost cryptsetup
).
I když to není bezpečný zvyk, použili jsme také --passphrase
poskytnout šifrovací přístupovou frázi:bez této možnosti by byl instalační proces přerušen a my bychom byli vyzváni, abychom ji poskytli interaktivně.
Jasně vidíme, jak pomocí Kickstartu získáme mnohem větší flexibilitu ve srovnání s tradiční instalací; proč bychom tedy museli provádět další kroky? Stále existují některé úkoly, které nemůžeme dosáhnout pouze pomocí standardní syntaxe Kickstart. Mimo jiné nemůžeme vytvořit LUKS
kontejnery na nezpracovaných zařízeních (pouze na oddílech) nebo určit algoritmus hash, který se má použít pro LUKS
nastavení klíče, které je ve výchozím nastavení nastaveno na sha256
(na tom není nic špatného).
Z těchto důvodů můžeme chtít vytvořit nastavení oddílu před provedením instalace, buď ručně, nebo pomocí nástrojů jako parted uvnitř %pre
části samotného souboru kickstart. Můžeme také mít pouze existující LUKS
nastavení, které nechceme zničit. Ve všech těchto případech musíme provést další kroky, které uvidíme za chvíli.
Sekce kickstart %pre
%pre
sekce kickstart souboru je první, která má být analyzována, když je soubor načten. Používá se k provádění vlastních příkazů před zahájením instalace a musí být uzavřen explicitně pomocí %end
instrukce.
V %pre
, ve výchozím nastavení se používá interpret bash shell, ale další lze zadat pomocí --interpreter
možnost (pro použití pythonu bychom napsali %pre --interpreter /usr/bin/python
). Tuto sekci můžeme použít ke spuštění příkazů potřebných k otevření existujícího LUKS
kontejner. Zde je to, co můžeme napsat:
%pre
iotty="$(tty)"
exec > "${iotty}" 2> "${iotty}"
while true; do
cryptsetup luksOpen /dev/sda1 cryptroot - && break
done
%end
Podívejme se na výše uvedený kód. Nejprve uložíme výsledek tty
příkaz, který vypíše název souboru terminálu připojeného ke standardnímu vstupu do iotty
proměnná.
Pomocí exec> "${iotty}" 2> "${iotty}"
příkaz jsme přesměrovali standardní výstup a standardní chybu na stejný terminál:
takto budeme moci zadat heslo kontejneru při crytpsetup luksOpen
bude proveden příkaz a na obrazovce se zobrazí výzva. Příkaz se spouští v nekonečné smyčce, která je přerušena pouze při LUKS
kontejner je úspěšně otevřen.
Pokud chceme spustit zcela bezobslužnou instalaci, musíme předat přístupovou frázi přímo cryptsetup (opět se nedoporučuje). Napsali bychom:
%pre echo -n "ourverysecretpassphrase" | cryptsetup luksOpen /dev/sda1 cryptroot - %end
Ve výše uvedeném příkladu jsme předali přístupovou frázi do standardního vstupu příkazu cryptsetup pomocí roury |
:použili jsme echo
pomocí -n
možnost vyhnout se přidání znaku nového řádku na konec přístupové fráze.
Oprava instalačního programu Fedora 31 anaconda
Pokud se pokusíme použít odemčený kontejner LUKS při instalaci Fedory 31 přes Kickstart, obdržíme následující
zprávu a proces bude přerušen:
Stávající odemčené zařízení LUKS nelze pro instalaci použít bez šifrovacího klíče zadaného pro toto
zařízení. Prosím, znovu prohledejte úložiště.
To se děje kvůli tomuto potvrzení zavedenému ve verzi Fedora 31 instalačního programu Anaconda. Kód v podstatě zkontroluje, zda má stávající zařízení LUKS registrovaný klíč, pokud tomu tak není, instalace se přeruší. Problém je v tom, že blivet
, knihovna python, kterou Anaconda používá ke správě oddílu, získá klíč pouze v případě, že kontejner otevře:to lze provést z grafického instalátoru, ale v okamžiku psaní není k dispozici instrukce Kickstart pro odemknutí existujícího
Vytvoření souboru updates.img
V tuto chvíli je jediným řešením (o kterém vím) záplata zdrojového kódu Anacondy a okomentování řádku, který provádí ovládací prvek zavedený výše uvedeným odevzdáním. Dobrou zprávou je, že ovládání je velmi jednoduché.
Jako první věc musíme naklonovat úložiště Anaconda git, konkrétně f31-release
větev:
$ git clone https://github.com/rhinstaller/anaconda -b f31-release
Jakmile je repo naklonováno, zadáme anaconda
a upravte adresář pyanaconda/storage/checker.py
file:vše, co musíme udělat, je okomentovat řádek 619
:
def set_default_checks(self):
"""Set the default checks."""
self.checks = list()
self.add_check(verify_root)
self.add_check(verify_s390_constraints)
self.add_check(verify_partition_formatting)
self.add_check(verify_partition_sizes)
self.add_check(verify_partition_format_sizes)
self.add_check(verify_bootloader)
self.add_check(verify_gpt_biosboot)
self.add_check(verify_swap)
self.add_check(verify_swap_uuid)
self.add_check(verify_mountpoints_on_linuxfs)
self.add_check(verify_mountpoints_on_root)
#self.add_check(verify_unlocked_devices_have_key)
self.add_check(verify_luks_devices_have_key)
self.add_check(verify_luks2_memory_requirements)
self.add_check(verify_mounted_partitions)
Uložíme úpravu a z kořenového adresáře úložiště spustíme makeupdates
skript, který se nachází v scripts
adresář. Aby byl skript spuštěn, musíme mít python2
nainstalováno:
$ ./scripts/makeupdates
Skript vygeneruje updates.img
soubor, který bude obsahovat naše úpravy. Pro kontrolu jeho obsahu můžeme použít lsinitrd
příkaz:
$ lsinitrd updates.img Image: updates.img: 8.0K ======================================================================== Version: Arguments: dracut modules: ======================================================================== drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 . drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run/install drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run/install/updates drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run/install/updates/pyanaconda drwxr-xr-x 2 egdoc egdoc 0 Jan 30 09:29 run/install/updates/pyanaconda/storage -rw-r--r-- 1 egdoc egdoc 25443 Jan 30 09:29 run/install/updates/pyanaconda/storage/checker.py ========================================================================
Tento soubor použijeme k „záplatě“ instalátoru Fedory 31.
Použití opravy
Abychom mohli použít úpravy obsažené v souboru, který jsme právě vygenerovali, musíme jej umístit někam, kde k němu můžeme snadno přistupovat, například přes ftp nebo http, nebo dokonce na místní blokové zařízení, a použít inst.updates parametr, který na něj odkazuje z obrazu instalačního programu Fedory. Z nabídky grub zvýrazníme položku nabídky „Instalovat Fedoru“:
Nabídka instalačního programu Fedory 31
Jakmile je vybrán řádek nabídky, stiskneme klávesu Tab:příkazový řádek jádra spojený s položkou se zobrazí ve spodní části obrazovky:
Příkazový řádek jádra používaný položkou “Install Fedora” Vše, co nyní musíme udělat, je připojit
inst.updates
instrukci a zadejte cestu k updates.img
soubor, který jsme vytvořili. Za předpokladu, že soubor Kickstart i soubor updates.img jsou přístupné přes http na místním serveru s IP 192.168.0.37, napsali bychom:vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Fedora-S-dvd-x86_31-31 quiet inst.updates=http://192.168.0.37/updates.img inst.ks=http://192.168.0.37/ks.cfg
V tomto okamžiku můžeme stisknout enter pro spuštění. S výše uvedenou úpravou si instalátor již nebude stěžovat na
odemčené LUKS
zařízení a instalace proběhne bez problémů.
Závěry
V tomto článku jsme viděli, jak vyladit instalaci kickstart, aby bylo možné znovu použít již existující LUKS
zařízení a odemkněte jej v %pre
sekce kickstart souboru a jak použít malé řešení na instalační program Fedora 31 Anaconda, který by jinak selhal, když se pokusíte o takový typ instalace. Pokud vás zajímá syntaxe Kickstart, podívejte se prosím na online dokumentaci.