SystemRescue (dříve SystemRescueCD) vyšel nedávno v nové verzi. Je to velice užitečný nástroj a v podstatě nezbytný švýcarský nožík linuxového admina.
O něco méně známý je projekt Ventoy, který umožňuje vytvořit bootovací USB flash disk, ze kterého pak lze nastartovat několik různých systémů výběrem z menu. Je to dokonce tak jednoduché, že na připravený flash disk stačí nakopírovat další obraz CD a automaticky se objeví v menu při příštím startu.
Úprava konfigurace SystemRescue
SystemRescue umožňuje ovlivňovat chování systému pomocí konfiguračních souborů, jejich použití ale vyžaduje ve výchozím stavu sestavení nového systémového obrazu, což je trochu nepohodlné, zvlášť když projekt má každou chvíli novou verzi.
Druhou možností je ukládat konfigurace přímo do bootovacího oddílu flash disku, ale to je možné jen když je SystemRescue na disku jako jediný operační systém. Tím se ale zase ztrácí kouzlo toho, že v podstatě jakýkoliv systém je možné nabootovat z jednoho flash disku.
Tady může přijít ke slovu Ventoy, který má moduly pro pokročilejší operace, především dva z nich se nám budou hodit. První umožní přidat příkazy do menu isolinux bootujícího obrazu a druhý vložit soubor do initramfs.
Cílem celé operace bude dosáhnout chování, kdy nastartované SystemRescue bude mít nastavené SSH klíče, aby se do něj dalo vzdáleně přihlásit a bude mít vypnutou síť. Tu si totiž konfiguruji ručně a pokud zůstane běžet výchozí NetworkManager, tak buď přiděluje IP přes DHCP nebo shazuje a nahazuje síťovou kartu ve snaze IP z DHCP získat. V obou případech tím přebíjí ručně nastavenou síť. Konfiguračních voleb je daleko více a jistě si najdete ty svoje.
Konfigurační soubor
Princip celé funkce rozšiřujících modulů je, že v kořenové složce bootovacího flash disku Ventoy je adresář ventoy
a z ní je pak načítán konfigurační soubor ventoy.json
. Ten se doporučuje vytvořit nástrojem VentoyPlugson.sh
. Bohužel mně se nikdy nepodařilo se s ním skamarádit, aby fungoval tak, jak potřebuji.
Konfigurační soubor si tedy vytvářím ručně a pokud to budete dělat také, nechoďte si stěžovat do konference, že to nefunguje. Autoři nemají pochopení pro toho, kdo soubor modifikuje ručně. Jejich parser pro JSON je velmi primitivní (musí běžet se skutečně minimálními nároky na paměť) a tak nepromíjí žádnou chybu. Pokud si ale vytvoříte šablonu přes VentoyPlugson a potom jen opravíte cesty, je velká naděje, že modifikace bude úspěšná.
V našem případě může ventoy.json
vypadat takto:
{ "injection":[ { "image": "/systemrescue-12.00-amd64.iso", "archive": "/ventoy/custom_defaults.tgz" } ], "conf_replace":[ { "iso": "/systemrescue-12.00-amd64.iso", "org": "/sysresccd/boot/syslinux/sysresccd_sys.cfg", "new": "/ventoy/sysresccd_sys_1.cfg" } ] }
První blok je asi trochu pochopitelnější, klíčové slovo injection
znamená, že budeme vkládat nový obsah do obrazu initramfs. Klíčové slovo image
určuje, pro který systémový obraz daná volba platí. Tady tedy pro systemrescue-12.00-amd64.iso
v kořeni našeho flash disku. Volba archive
potom určuje, jaký archiv bude rozbalen do kořene initramfs po dekompresi. Vždy se musí jednat o archiv .tar.gz
. Bude rozbalen skutečně jen do initramfs, v běžícím systému jej potom už nenajdete.
V našem případě bude obsahovat jen jeden soubor s názvem custom_defaults.yaml
. Jeho obsah může vypadat takto:
--- global: nofirewall: true rootpass: "Bae0c^8*Sxequa8" sysconfig: authorized_keys: "nejakynazev": "ssh-ed25519 AAAA............" autorun: exec: 300: path: "/usr/bin/nmcli" parameters: - "conn" - "down" - "Wired connection 1" wait: on_error
Podrobný popis asi není potřeba, první část vypne firewall a nastaví heslo roota. To může být i jen haš, pokud by hrozilo, že ke konfiguraci bude mít přístup někdo nepovolaný. Druhá část přidá klíče do SSH, takže je možné se vzdáleně přihlásit bez použití hesla. Třetí část po startu SystemRescue vypne NetworkManager pomocí nástroje nmcli
.
Zabalení souboru
Tento soubor zabalíme do archivu .tar.gz
takto:
# tar cvzf custom_defaults.tgz custom_defaults.yaml
Umístíme jej do adresáře ventoy
, vedle souboru ventoy.json
. Já si nechávám pro jednoduchost oba soubory v tomto adresáři a po změně jen pustím znovu stejný příkaz tar
.
Druhý konfigurační blok potom nahrazuje vybraný soubor uvnitř bootovacího obrazu za jiný. Zjistit cestu, na které je nahrazovaný soubor uvnitř obrazu, může být složitější: U SystemRescue pomůže přidat k bootu parametr break
, který zajistí, že se boot zastaví po rozbalení initramfs.
Parametr new
už určuje jen cestu k souboru na flash disku. Tento soubor si prostě ze SystemRescue vykopíruji a poupravím. Mezi verzemi se bohužel mění popisek (label) instalačního média, podle verze SystemRescue, ale jinak lze soubor většinou používat stále stejný. Provádím v něm jen jednu modifikaci, přidávám bootovací parametr sysrescuecfg=/custom_defaults.yaml
.
Ten odkazuje na cestu, ze které si (v rámci initramfs) SystemRescue načte konfiguraci pro prvotní nastavení. Tento soubor jsme do initramfs vložili v předchozí části návodu parametrem injection
.
Obdobným způsobem lze vložit do instalačního média Windows například ovladače VirtIO, pro bezproblémovou instalaci ve virtualizovaném prostředí.