Automatizujeme instalaci
Přednastavení lze využít u všech běžných způsobů instalace, které se liší v možnosti, kde může být soubor s konfigurací umístěn.
Způsob instalace | initrd | soubor | síť |
---|---|---|---|
CD/DVD | ano | ano | ano |
zavedení ze sítě | ano | ne | ano |
z pevného disku (USB) | ano | ano | ano |
Použití initrd je univerzální, ale pracnější na přípravu. Má však tu výhodu, že konfigurace je dostupná na začátku instalačního procesu. Oproti tomu soubor umístěný v síti je k dispozici až po jejím nastavení, které musíme udělat ručně.
Používáme-li variantu s initrd, stačí pouze, aby se soubor s konfigurací jmenoval preseed.cfg
a nacházel se v kořenovém adresáři initrd. U zbylých způsobů je třeba instalátoru říci, kde má soubor hledat. Použijeme k tomu parametry jádra, které buď umístíme příslušného konfiguračního souboru (např. syslinux.cfg
) nebo je předáme jádru ručně při zavádění. Kromě cesty ke konfiguračnímu souboru můžeme také uvést jeho kontrolní součet.
# HTTP
preseed/url=http://pocitac/cesta/k/preseed.cfg
preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
# TFTP
preseed/url=tftp://pocitac/cesta/k/preseed.cfg
preseed/url/checksum=5da499872becccfeda2c4872f9171c3d
# CD
preseed/file=/cdrom/preseed.cfg
preseed/file/checksum=5da499872becccfeda2c4872f9171c3d
# USB
preseed/file=/hd-media/preseed.cfg
preseed/file/checksum=5da499872becccfeda2c4872f9171c3d
Vytvoření souboru s přednastavením
Konfigurační soubor využívá stejný formát jako debconf-set-selections(1), formát je následující:
<vlastník> <jméno otázky> <typ otázky> <hodnota>
Při vytváření vlastní konfigurace můžeme vyjít z ukázkového souboru, který si upravíme dle vlastních potřeb. Další možnost je si soubor vytvořit na čerstvě naistalovaném systému, k čemuž je třeba mít nainstalovaný balík debconf-utils
:
$ debconf-get-selections --installer > preseed.cnf
$ debconf-get-selections >> preseed.cnf
Než soubor použijeme, můžeme je pomocí debconf-set-selections
zkontrolovat:
$ head -4 preseed.cfg
#### Contents of the preconfiguration file (for buster)
### Localization
# Preseeding only locale sets language, country and locale.
d-i debian-installer/locale strin en_US
$ debconf-set-selections -c preseed.cfg
warning: Unknown type strin, skipping line 4
Takto můžeme například odhalit chybu v typu, ale neexistující otázku již ne.
Ukázky přednastavení
Obecné
# Lokalizace
d-i debian-installer/locale string cs_CZ
# Rozložení klávesnice
d-i keyboard-configuration/xkb-keymap select cz
# Nastavení časového pásma
d-i time/zone string Europe/Prague
Síť
# Síť nemusíme nastavovat vůbec
d-i netcfg/enable boolean false
# Statické nastavení IPv4
d-i netcfg/get_ipaddress string 192.168.1.42
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1
d-i netcfg/get_nameservers string 192.168.1.1
d-i netcfg/confirm_static boolean true
Zrcadlo
d-i mirror/country string manual
d-i mirror/http/hostname string http.cz.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
Uživatelé
V konfiguračním souboru lze také přednastavit hesla jak pro uživatele root, tak pro běžného uživatele. Můžeme jej uložit v nešifrované podobně (což je samozřejmě bezpečnostní riziko) nebo jako crypt(3) hash.
# Heslo pro uživatele root v nešifrované podobě
d-i passwd/root-password password h3sl0
d-i passwd/root-password-again password h3sl0
# Heslo pro uživatele root jako crypt(3) hash
d-i passwd/root-password-crypted password $6$EdHzCIa7oPqJYLsl$2RGfIdaKkxRXDWi5Y2Q2ENjhNe7LfBXBItf16hTvsYE4PDYWdimt3iLtzXjLPv89RhCbY//4rZGCRbTBffyXq0
Hash získáme pomocí:
$ mkpasswd -m sha-512
# Vytvoření běžného uživatele
d-i passwd/user-fullname string Frantisek Prochazka
d-i passwd/username string franta
# Heslo běžného uživatele v čitelném tvaru
d-i passwd/user-password password heslo1
d-i passwd/user-password-again password heslo2
# Heslo bezneho uživatele jako crypt(3) hash
d-i passwd/user-password-crypted password $6$dK0F/EFSR/$ZYGXLMML8jGXrSZXkMtpRu.z7e2UzFTRgkuwXQSHojCDvo2C7Ln9/6WTwuQlpKVAVYt/bKA0CUV/YL2T4tLuF1
Zadáme-li do proměnných passwd/root-password-crypted
nebo passwd/user-password-crypted
jako hodnotu vykřičník, bude účet zakázán.
Rozdělení disku
Dělení disku je limitováno možnostmi, které nabízí partman-auto
. Při použití celého disku nebo stávajícího volného místa není konfigurace složitá.
# Automatické rozdělení volného místa
d-i partman-auto/init_automatically_partition select biggest_free
# Použití prvního SCSI/SATA disku:
d-i partman-auto/disk string /dev/sda
Akutálně jsou pro rozdělení disku dostupné tři metody:
- regular
- LVM
- crypto – LVM nad zašifrovanou oblastí
# Použití LVM
d-i partman-auto/method string lvm
Dále jsou k dispozici tři schémata dělení:
- atomic -všechny soubory v jedné oblasti
- home – samostatná oblast /home
- multi – samostatné oblasti /home, /var a /tmp
# Použití atomic schématu
d-i partman-auto/choose_recipe select atomic
# Souhlas s rozdělením
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
Zdrojový repozitář pro debian-installer
obsahuje další ukázky konfigurace.
Instalace základního systému
# Neinstalovat doporučené balíky
d-i base-installer/install-recommends boolean false
# Pokud nechceme instalovat jádro
d-i base-installer/kernel/image string none
Nastavní pro apt
# Povolení sekcí contrib a non-free
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
# Nasteveni updates a security
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org
Výběr balíků
# Nastavení meta balíků pro tasksel
tasksel tasksel/first multiselect standard, ssh-server
# Vlastní balíky
d-i pkgsel/include string tmux vim mc
# Můžeme povolit popularity contest
popularity-contest popularity-contest/participate boolean true
Zavaděč
# Je-li Debian jediný OS, nainstaluje se Grub do MBR
d-i grub-installer/only_debian boolean true
Úprava instalačního ISO obrazu
Takto připravený konfigurační soubor můžeme použít pro modifikování initrd již existujícího ISO obrazu. ISO obraz si samozřejmě můžeme sestavit sami, ale pokud chceme pouze aplikovat přednastavení, rychlejší je úprava již hotového. K manipulaci s initrd využijeme cpio(1).
Instalační ISO obraz rozbalíme a do initrd přidáme preseed.cfg
:
$ mkdir isofiles
$ bsdtar -C isofiles -xf firmware-10.3.0-amd64-netinst.iso
$ chmod +w -R isofiles/install.amd/
$ gunzip isofiles/install.amd/initrd.gz
$ echo preseed.cfg | cpio -H newc -o -A -F isofiles/install.amd/initrd
$ gzip isofiles/install.amd/initrd
$ chmod -w -R isofiles/install.amd/
Chceme-li, aby náš ISO obraz nabootoval přímo do instalátoru, je třeba nastavit timeout:
$ chmod +w -R isofiles/isolinux
$ sed -i 's/timeout 0/timeout 50/' isofiles/isolinux/isolinux.cfg
$ echo 'totaltimeout 100' >> isofiles/isolinux/isolinux.cfg
$ chmod -w -R isofiles/isolinux
Jelikož jsme měnili existující soubory, je na místě přepočítat jejich kontrolní součty:
$ cd isofiles
$ chmod +w md5sum.txt
$ rm md5sum.txt
$ iso_files="$(find -follow -type f | egrep '.*')"
$ for f in $iso_files; do md5sum "$f" >> md5sum.txt done
$ chmod -w md5sum.txt
Nakonec vytvoříme nový ISO obraz:
$ xorriso -as mkisofs -o preseeded.iso \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot \
-boot-load-size 4 -boot-info-table isofiles
Rozhodně testujte
Takto připravený ISO obraz můžeme snadno otestovat například pomocí qemu
. Je třeba opatrnosti, pokud je na cílovém stroji více pevných disků nebo pokud nebude Debian jediným operačním systémem. Ukázkový konfigurační soubor z výše uvedeného odkazu nepokrývá automatizaci celého procesu, je proto na místě námi vytvořený obraz předem vyzkoušet.