Sieciowa i zautomatyzowana instalacja systemu EuroLinux Desktop

Sieciowa i zautomatyzowana instalacja systemu EuroLinux Desktop

W dużych środowiskach ręczna instalacja wielu systemów operacyjnych może być czasochłonna i nużąca. Proces ten można jednak w pełni zautomatyzować. W tym artykule opiszemy rozwiązanie umożliwiające automatyczną, nienadzorowaną instalację systemu EuroLinux Desktop na komputerze posiadającym dostęp do serwera instalacyjnego poprzez interfejs LAN.

W dużych środowiskach ręczna instalacja wielu systemów operacyjnych może być czasochłonna i nużąca. Proces ten można jednak w pełni zautomatyzować. W tym artykule opiszemy rozwiązanie umożliwiające automatyczną, nienadzorowaną instalację systemu EuroLinux Desktop na komputerze posiadającym dostęp do serwera instalacyjnego poprzez interfejs LAN.

Do instalacji sieciowej wymagane jest równoczesne skorzystanie z trzech rozwiązań: serwera DHCP, TFTP i HTTP. Na potrzeby artykułu zainstalujemy wszystkie te serwery na jednej maszynie hostującej (opartej na systemie EuroLinux 9 lub Desktop) i zapiszemy konfigurację tej maszyny jako trwałą. Dzięki temu będzie ona mogła dokonywać wielokrotnych instalacji automatycznych systemu EuroLinux Desktop również w przyszłości.

Poniższa konfiguracja przeznaczona jest tylko dla klientów opartych na BIOS-ie. Aby uruchomić klienta z sieci, w BIOS-ie klienta należy ustawić bootowanie poprzez sieć na pierwszym miejscu listy bootującej oraz należy wyłączyć opcję Secure Boot. W przypadku niektórych komputerów opcja uruchamiania z sieci może być wyłączona lub niedostępna. Opcję automatycznej instalacji sieciowej z UEFI opiszemy w przyszłości w oddzielnym artykule. Na początek jednak trochę teorii.

PXE

PXE (ang. Preboot Execution Environment) to rozwiązanie umożliwiające uruchomienie na komputerze systemu operacyjnego, mimo że nie jest on na nim zainstalowany, ani komputer/klient nie posiada dostępu do fizycznego nośnika instalacyjnego. Po rozpoczęciu instalacji klient będzie odpytywał serwer DHCP. Otrzyma pliki startowe z serwera TFTP i pobierze obraz instalacyjny z serwera HTTP. Serwer DHCP skonfigurujemy tak, aby używał obrazów startowych SYSLINUX.

Przygotowanie obrazu ISO

Całą poniższą procedurę wykonamy jako root. W pierwszej kolejności instalujemy serwer WWW:

dnf install -y httpd

Pobieramy obraz ISO systemu EuroLinux Desktop do katalogu /media:

wget -P /media https://dn.euro-linux.com/ELD-9-x86_64-latest.iso

Dodajemy punkt montowania obrazu ISO w głównym katalogu serwera WWW:

mkdir /var/www/html/eld-iso && chown nobody:nobody /var/www/html/eld-iso

Do pliku /etc/fstab dodajmy teraz linię montującą nasz obraz ISO w nowo utworzonym podkatalogu:

/media/ELD-9-x86_64-latest.iso /var/www/html/eld-iso iso9660 ro,nofail 0 0

Chociaż każdy z wymienionych serwerów może być uruchomiony na innym systemie fizycznym, procedury w tej sekcji zakładają, że wszystkie serwery są uruchomione na jednym systemie.

Kickstart

Skorzystamy również z projektu Kickstart, pozwalającego na automatyczne wykonywanie nienadzorowanej instalacji i konfiguracji systemu operacyjnego. System zainstaluje się automatycznie przez sieć z następującymi ustawieniami domyślnymi:

  • wykorzystana zostanie pełna dostępna przestrzeń dyskowa;
  • utworzone zostaną partycje:
    • root /;
    •  swap;
    • /boot;
    • na dyskach powyżej 50 GB również partycja /home;
  • domyślnym użytkownikiem i hasłem systemowym będzie słowo eurolinux;
  • instalacja będzie przebiegała w trybie graficznym;
  • wykorzystany zostanie polski język systemu i polski układ klawiatury;
  • wybrana zostanie strefa czasowa Europa/Warszawa.

Przy problemach z automatycznym partycjonowaniem na starszych komputerach, pomocne może być uzupełnienie poniższej konfiguracji linii: ignoredisk --only-use= poprzez dodanie na końcu dysku systemowego wykorzystywanego na kliencie, np. sda.

Poniższe polecenie zapisuje zapisują konfigurację Kickstart w głównym katalogu serwera WWW:

cat << EOF > /var/www/html/ks.cfg
graphical
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
keyboard --xlayout='pl'
lang pl_PL.UTF-8
url --url=http://10.0.0.1/eld-iso/
%packages
@^eld
%end
firstboot --enable
clearpart --all --initlabel
autopart
timesource --ntp-disable
timezone Europe/Warsaw --utc
rootpw --plaintext --lock eurolinux
user --groups=wheel --name=eurolinux --password=eurolinux --plaintext
EOF

Serwery HTTP, TFTP i DHCP

Możemy teraz uruchomić serwer HTTP:

systemctl enable httpd --now

Następnie instalujmy serwery TFTP i DHCP dla pxeboot:

dnf install -y tftp-server dhcp-server

Dodajemy również serwisy na firewallu dla wszystkich nowo utworzonych serwerów:

firewall-cmd --add-service=http --add-service=tftp --add-service=dhcp --permanent

firewall-cmd --reload

Teraz możemy skonfigurować serwer DHCP:

cat << EOF > /etc/dhcp/dhcpd.conf
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;

subnet 10.0.0.0 netmask 255.255.255.0 {
  option routers 10.0.0.254;
  range 10.0.0.2 10.0.0.253;
  class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 10.0.0.1;
      filename "pxelinux/pxelinux.0";
  }
}
EOF

Uruchamiamy serwer DHCP:

systemctl enable dhcpd --now

Połączenie sieciowe

Wykonamy dwa polecenia, aby uzyskać statyczne połączenia pomiędzy przygotowywanym sewerem pxe, a instalowanymi automatycznie systemami – po ifname musimy oczywiście użyć nazwy interfejsu sieciowego maszyny hostującej:

nmcli connection add con-name pxe type ethernet ifname enp0s25 ip4 10.0.0.1/24 gw4 10.0.0.1 ipv4.dns 10.0.0.1

nmcli connection up pxe

Do poprawnego działania konfiguracji wymagane jest przekopiowanie plików z syslinux-tftpboot:

rpm2cpio /var/www/html/eld-iso/AppStream/Packages/syslinux-tftpboot*.rpm | cpio -imdv
mkdir /var/lib/tftpboot/pxelinux/
cp tftpboot/* /var/lib/tftpboot/pxelinux/
rm -rf tftpboot

oraz skopiowanie obrazów kernela i init ramdysku:

cp /var/www/html/eld-iso/images/pxeboot/* /var/lib/tftpboot/pxelinux/

Skonfigurujemy również bootloadera pxelinux, tak aby na kliencie wyświetlały się dwie pozycje bootowania systemu: z sieci lub z dysku twardego oraz tak, aby konfiguracja wskazywała na obraz instalatora umieszczony na serwerze HTTP.

Uwaga: w pierwszej linii tworzony jest katalog, nie plik – to nie jest błąd :)

mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
cat << EOF > /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
default vesamenu.c32
prompt 1
timeout 600

display boot.msg

label linux
  menu ^Install system
  menu default
  kernel /vmlinuz
  append initrd=/initrd.img ip=dhcp inst.repo=http://10.0.0.1/eld-iso/ inst.ks=http://10.0.0.1/ks.cfg
label local
  menu label Boot from ^local drive
  localboot 0xffff
EOF

Teraz możemy uruchomić serwer TFTP:

systemctl enable tftp --now

oraz komputer klienta. Powinna rozpocząć się całkowicie zautomatyzowana instalacja systemu poprzez LAN.

Podsumowanie

Opisane rozwiązanie jest szczególnie przydatne przy wielostanowiskowej instalacji systemu EuroLinux Desktop. Zautomatyzowany proces instalacji przez sieć bez wykorzystania fizycznego nośnika jest ze strony klienta bardzo prosty, wygodny i nieangażujący zasobów. Wielokrotnych instalacji może bowiem dokonywać nawet osoba bez przygotowania technicznego.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.