Instalacja systemu operacyjnego, w tym systemu Linux nie stanowi dziś większego problemu dzięki zastosowaniu graficznych instalatorów co jeszcze kilka lat temu nie było takie oczywiste w niektórych dystrybucjach. Zdarzają się jednak sytuacje, kiedy proces instalacji musimy wielokrotnie powtarzać (np. szkolne komputery, wypożyczalnie itd), często w krótkim odstępie czasu co może przysparzać wiele pracy. Istnieją oczywiście skrypty i technologie automatyzujące ten proces jak Ansible, Puppet, ale nie zawsze możemy sobie pozwolić na tego typu infrastrukturę w mniejszej firmie.

Z pomocą w systemach Debian przychodzi instalacja automatyczna, nienadzorowana dzięki, której możemy przygotować specjalny plik i załadować go na początku procesu instalacji.

Proces nienadzorowanej instalacji w systemie Debian nazywa się “Preseeding”. Każdy kto choć raz instalował system Debian wie, że proces instalacji niezależnie czy graficzny czy nie polega tak naprawdę na zadaniu serii pytań przez instalator i udzieleniu serii odpowiedzi przez użytkownika. Preseeding to tak naprawdę przygotowany wcześniej zestaw pytań i odpowiedzi, dzięki którym instalator niejako sam sobie odpowie na te pytania, a proces instalacji przebiegnie szybko i bezproblemowo.

Niniejszy poradnik powstał na bazie systemu operacyjnego Debian 10.3 – netinstall.

1.   Przygotowanie pliku “preseed.cnf”.

Przy pomocy ulubionego edytora teksyu otwieramy nowy, pusty plik o nazwie np. “preseed.cnf”. Nazwa ta może być dowolna.

Na początek ustawimy keymapę dla naszego systemu operacyjnego wraz z językiem. Zwykle instaluję poniższy schemat, aby włączyć obsługę języka polskiego, ale jednocześnie wszelkie komunikaty pozostały w języku angielskim. Ma to na celu ułatwienie rozwiązania ewentualnych problemów, gdyż większość dobrych poradników i manuali jest w języku angielskim, a jak wiemy polskie tłumaczenia komunikatów nie są najlepsze.

d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF-8, pl_PL.UTF-8
d-i keyboard-configuration/xkb-keymap select us

W kolejnym kroku ustawimy sieć. Możemy posłużyć się zarówno konfiguracją automatyczną z dhcp jak skorzystać z manualnego przydzielania adresów IP, bo również i taka jest możliwość.

d-i netcfg/choose_interface select auto

To wystarczy do konfiguracji w trybie DHCP. Jeżeli jednak chcemy ustawić adres IP i całą sieć ręcznie to konieczne będzie dodanie pod spodem pozostałych opcji sieciowych.

d-i netcfg/disable_autoconfig boolean true
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually

d-i netcfg/get_ipaddress string 192.168.1.100
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
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/wireless_wep string

W kolejnym kroku ustawimy hostname naszego serwera.

d-i netcfg/hostname string server1.wladcysieci.pl

Możemy także pozostawić hostname domyślny lub zaciągnąć go z DHCP.

d-i netcfg/get_hostname string unassigned-hostname

Następnie musimy ustawić serwery lustrzane, z których instalator pobierze pakiety potrzebne do instalacji oraz ustawi te serwery jako źródło dla późniejszych instalacji. Użyjemy naszych Polskich serwerów, dla przyspieszenia pobierania i obniżenia opóźnienia.

d-i mirror/country string manual
d-i mirror/http/hostname string ftp.pl.debian.org
d-i mirror/http/directory string /Debian
d-i mirror/http/proxy string

Kolejnym krokiem będzie ustawienie hasła dla użytkownika “root”. To hasło zostanie ustawione jako domyślne i będzie można je zmienić po instalacji.

d-i passwd/root-password password Wladca123
d-i passwd/root-password-again password Wladca123

Jeżeli nie chcemy tworzyć od razu użytkownika dodatkowego na prawach administratora ustawiamy poniższą opcję.

d-i passwd/make-user boolean false

Jeżeli jednak chcemy utworzyć użytkownika wraz z grupą to doklejamy poniższy fragment.

d-i passwd/user-fullname string Wladca
d-i passwd/username string wladca
d-i passwd/user-password password Wladca123
d-i passwd/user-password-again password Wladca123

Ustawiamy strefy czasowe i zegar na Polskę.

d-i clock-setup/utc boolean true
d-i time/zone string Europe/Warsaw
d-i clock-setup/ntp boolean false

Kolejnym krokiem będzie ustawienie odpowiednich partycji i podział dysku według wytycznych. Istnieje tutaj dowolność. Możemy utworzyć tylko jedną partycję, możemy utworzyć kilka i dowolnie zarządzać ich rozmiarami.

Poniższy zestaw przygotowany przeze mnie ustawia tylko jedną partycję, usuwa wszystkie inne, które ewentualnie pozostały i tworzy system bez partycji SWAP. Układ partycji LVM pozwoli na późniejszą ewentualną zmianę partycji i przesuwanie rozmiaru.

Usuwamy wszystkie partycje.

d-i partman-auto/init_automatically_partition select biggest_free
d-i partman-basicfilesystems/no_swap boolean true
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true

Tworzymy partycję systemową i na wszystkie pliki.

Mała podpowiedź:

# – atomic: wszystko na jednej partycji

# – home:   oddziel partycję /home

# – multi:  oddzielenie partycji /home, /usr, /var oraz /tmp

My wykorzystamy jak wspomniałem funkcję “atomic”, czyli wszystko na jednej.

d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

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
d-i partman/confirm_nooverwrite boolean true

Z uwagi na fakt, że jest to wersja minimalna systemu i taka ma być, rezygnujemy z instalacji niepotrzebnych pakietów oraz wyłączamy sugerowanie ich.

d-i base-installer/install-recommends boolean false

Konfigurujemy opcje repozytorium, tj. jakiego typu pakiety ma brać pod uwagę podczas przeszukiwania repo.

d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org

Wybieramy podstawowe pakiety systemu do instalacji czyli wersję minimal wraz z narzędziami takimi jak ssh, oraz developerskimi.

tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server build-essential
d-i pkgsel/upgrade select full-upgrade
popularity-contest popularity-contest/participate boolean false

Konfigurujemy bootloader grub. Od tego zależy to jak system będzie się uruchamiał. Jeżeli mamy tylko jeden system to wystarczy pozostawienie jak poniżej.

d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true

Na sam koniec mamy możliwość dorzucenia skryptów poinstalacyjnych do systemu. Jeżeli na przykład instalujemy system na serwerze zdalnym i nie mamy możliwości podłączenia na przykład płyty, czy nośnika, a chcemy uruchomić po instalacji czystego systemu jakiś skrypt to w tym miejscu możemy go dodać.

d-i preseed/late_command string \
in-target wget -O /root/install.sh https://repo.domena.pl/install.sh ;\
in-target chmod +x /root/install.sh

Możemy także zdalnie uruchomić ten skrypt po instalacji systemu.

in-target /root/install.sh

Na koniec restartujemy system po instalacji.

d-i finish-install/reboot_in_progress note

Tak przygotowany plik preseed.cnf powinniśmy umieścić na serwerze www, tak aby instalator mógł w trakcie instalacji go pobrać z sieci i załadować do pamięci.

2.   Instalacja automatyczna

Włączamy instalację systemu Debian. Pojawi nam się po wybootowaniu okienko instalatora.

Okno instalatora

W tym momencie naciskamy klawisz “ESC”, aby wyjść do trybu tekstowego.

Tryb tekstowy

Pojawi nam się znak zachęty po słowie boot:.

Wpisujemy tutaj sekwencję, która uruchomi autoinstalator systemu wraz z odpowiedziami na wszystkie pytania, które zawarliśmy z pliku preseed.cnf.

auto url=https://wladcysieci.hosterion.pl/preseed.cnf

Naciskamy Enter.

Jeżeli nasz preseed jest wystawiony po protokole HTTPS instalator może nie rozpoznać naszego certyfikatu (zwłaszcza samopodpisanych i innych darmowych). Wtedy konieczne jest dodanie opcji do linii.

debian-installer/allow_unauthenticated_ssl=true

Nierozpoznany certyfikat
Proces instalacji 1
Proces instalacji 2
Proces instalacji 3
Proces instalacji 4
Proces instalacji 5
Proces instalacji 6
Proces instalacji 7
Proces instalacji 8
Proces instalacji 9
Proces instalacji 10
Proces instalacji 11

Poniżej dostępny jest cały działający plik “preseed.cnf” wykorzystany do instalacji naszego systemu.

https://wladcysieci.hosterion.pl/preseed.cnf

### Podstawowe ustawienia
# Konfiguracja locale
d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF-8, pl_PL.UTF-8
d-i keyboard-configuration/xkb-keymap select us

# Konfiguracja sieci
d-i netcfg/choose_interface select auto
d-i netcfg/hostname string server1.wladcysieci.pl

# Konfiguracja repozytorium
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.pl.debian.org
d-i mirror/http/directory string /Debian
d-i mirror/http/proxy string

# Konfiguracja uzytkownika root
d-i passwd/root-password password Wladca123
d-i passwd/root-password-again password Wladca123
d-i passwd/make-user boolean false

# Konfiguracja zegara
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Warsaw
d-i clock-setup/ntp boolean false

# Konfiguracja partycji
d-i partman-auto/init_automatically_partition select biggest_free
d-i partman-basicfilesystems/no_swap boolean true
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
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
d-i partman/confirm_nooverwrite boolean true

# Konfiguracja instalatora
d-i base-installer/install-recommends boolean false
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org

# Instalacja podstawowych pakietow i narzedzi
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server
d-i pkgsel/upgrade select full-upgrade
popularity-contest popularity-contest/participate boolean false

# Konfiguracja bootloadera
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true

# Restart po instalacji
d-i finish-install/reboot_in_progress note