B.5. Pokročilé možnosti

B.5.1. Spouštění vlastních příkazů během instalace

Nástroje pro přednastavení nabízí velice mocnou vlastnost, kterou je možnost spouštění libovolných příkazů nebo skriptů v určitých bodech instalace.

Po připojení souborového systému instalovaného systému je tento dostupný v adresáři /target. Pokud pro instalaci používáte CD, je po připojení dostupné přes /cdrom.

# Přednastavení d-i není už ze své podstaty bezpečné. Nic
# v instalačním systému nekontroluje pokusy kolem přetečení bufferu
# ani zneužití hodnot v souboru s přednastaveními. Používejte tyto
# soubory pouze z důvěryhodných zdrojů!
# Následuje ukázka, jak v d-i spustit automaticky nějaký shellový příkaz.

# První příkaz je spuštěn co nejdříve - hned po načtení přednastavení.
#d-i preseed/early_command string anna-install nejaky-udeb
# Tento příkaz je spuštěn těsně před vstupem do dělení disků. Může se
# hodit pro dynamické přednastavení rozdělení disku, které závisí na
# aktuálním stavu disků (které ještě nemusí být vidět v době spuštění
# předchozího příkazu preseed/early_command).
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# Tento příkaz je spuštěn těsně před koncem instalace, ale ještě je
# připojen adresář /target. Buď můžete použít chroot na /target
# a pracovat přímo v něm, nebo můžete použít příkaz apt-install
# resp. in-target pro jednoduchou instalaci balíků resp. spouštění
# příkazů v nově instalovaném systému.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. Použití přednastavení pro změnu výchozích hodnot

Pomocí přednastavení můžete dosáhnout i toho, že se otázka normálně zobrazí, ale změní se její výchozí odpověď. (Například na úvodní otázce ohledně jazyka můžete přednastavit místo angličtiny češtinu, takže uživateli stačí stisknout Enter, ale stále mu necháváte možnost volby jiného jazyka.) Dosáhnete toho tak, že po nastavení proměnné změníte příznak seen na hodnotu false.

d-i foo/bar string hodnota
d-i foo/bar seen false

Chcete-li stejného výsledku dosáhnout pro všechny otázky, můžete použít zaváděcí parametr preseed/interactive=true, což se může hodit pro testování a ladění konfiguračního souboru s přednastavením.

Zopakujme, že vlastník d-i by se měl používat pouze pro proměnné používané samotným instalačním systémem. Pro proměnné nacházející se v instalovaných balících byste měli jako vlastníka použít jméno příslušného balíku (viz poznámka pod čarou u B.2.2 – „Použití zaváděcích parametrů jako formy přednastavení“).

Přednastavujete-li pomocí zaváděcích parametrů, můžete použít speciální operátor ?=, kterým instalátor donutíte, aby danou otázku zobrazil. Například foo/bar?=hodnota (nebo vlastník:foo/bar?=hodnota). To samozřejmě funguje jen u parametrů, kterým odpovídá nějaká otázka zobrazená během instalace, tj. nefunguje to pro interní parametry.

Pro více ladicích informací můžete použít zaváděcí parametr DEBCONF_DEBUG=5, který zajistí, že debconf bude mnohem upovídanější, co se týče aktuálního nastavení proměnných a postupu instalačními skripty.

B.5.3. Zřetězené nahrávání souborů s přednastavením

Přestože je použití jednoho velkého souboru s přednastavením jednoduché, zdaleka nemusí být přehledné a navíc postrádá flexibilitu. Z tohoto důvodu je možné nastavení rozdělit do několika samostatných souborů a ty pak skládat dohromady. Protože později uvedené volby přepisují volby zadané dříve, přímo se nabízí vytvoření hlavního (sdíleného) souboru s obecnými předvolbami a k němu několik dalších souborů se specifickým nastavením pro danou situaci.

# Zadat můžete i více souborů najednou, stačí je oddělit mezerami.
# Vložené soubory mohou obsahovat jak deklarace pro přednastavení,
# tak příkazy pro zavedení dalších souborů. Pokud cestu zadáte
# relativně, hledají se soubory ve stejném adresáři, jako nadřízený
# soubor.
#d-i preseed/include string x.cfg

# d-i může volitelně kontrolovat kontrolní součty souborů
# s přednastavením. V současnosti jsou podporovány pouze md5 součty.
# Seznam součtů zadejte ve stejném pořadí, v jakém se budou načítat
# soubory s přednastavením.
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# Mnohem pružnější je použití shellového příkazu, který vrátí názvy
# souborů, jež se mají nahrát.
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# Nejpružnější možnost stáhne program a spustí jej. Program může
# používat příkazy pro manipulaci s databází debconfu jako např.
# debconf-set. Pokud jsou názvy souborů relativní, berou se ze
# stejného adresáře jako soubor s přednastavením, který je spouští.
# Zadat můžete i více skriptů, stačí je oddělit mezerami.
#d-i preseed/run string foo.sh

Zřetězené nahrávání souborů s přednastavením funguje i mezi různými typy přednastavení. Například pokud používáte přednastavení z initrd nebo ze souboru, můžete v nich uvést proměnnou preseed/url a po naběhnutí sítě tak plynule přejít do souboru s přednastavením staženým ze sítě. Musíte však být opatrní, protože to také znamená, že se proces přednastavení spustí znovu a mimo jiné tím dostanete šanci na druhé spuštění příkazu preseed/early, tentokráte po naběhnutí sítě.