Automatické síťové instalace operačních systémů na uživatelské stanice nebo servery jsou běžným standardem při dodávkách IT řešení společnostem jejichž infrastruktura má vysoké SLA nároky na dostupnost.
Je to ale výhodná i jinde. Například v případech, kdy nastavení systému stanic obnáší spoustu příkazů, které vykonávat ručně by bylo neefektivní a náchylné k chybám a opomenutí nastavení.
PXE klient
PXE klientem pro náš PXE server je každá síťová karta, která má nastavený boot ze sítě pro BIOS mód, né UEFI mód.
V našem návodu si vytvoříme virtuální stroj na hypervizoru QEMU. Když vybereme
--os-variant=archlinux, tak síťová karta vždy používá iPXE boot ze sítě. Pouze Windows virtuální stroje mají defaultní nastavení UEFI boot.
Přidáme ještě parametr
--pxe aby hned po vytvoření VM stroj bootoval ze sítě a né z disku.
user@myhost:~# virt-install --connect qemu:///system \
-n bios2 \
--description "" \
--os-variant=archlinux \
--ram=2048 \
--vcpus=1 \
--disk path=/var/lib/libvirt/images/bios2.qcow2,size=20,format=qcow2,bus=sata \
--graphics spice \
--bridge=bridge01 \
--pxe
Starting install...
Allocating 'bios.qcow2' | 20 GB 00:00:00
Creating domain... | 00:00:00
Running graphical console command: virt-viewer --connect qemu:///system --wait bios
PXE server a DHCP nastavení na routeru
PXE server je zařízení v síti, ze kterého náš vytvořený virtuální stroj stáhne instalační soubory, jako z instalačního DVD, a spustí nebo i nainstaluje operační systém.
Každé zařízení v síti, které chce nějak operovat, musí získat nejprve IP adresu od DHCP serveru.
Náš čerstvě vytvořený virtuální stroj při PXE bootu jistě adresu dostane, ale také bude potřebovat od DHCP serveru vědět, kde najde prvotní soubor, který si má stáhnout.
Musíme tedy modifikovat nastavení DHCP na našem routeru.
Poměrně rozšířené open-source řešení pro firmware routeru je Open-WRT, které umožňuje nejvíce nastavení.
Nastavení lze přidat přes položku v menu Network -> DHCP and DNS. Pak úplně poslední záložka PXE/TFTP.
- Klikneme na Add
- napíšeme jméno souboru lpxelinux.0, což je PXE soubor, který umí stahovat soubory přes TFTP, HTTP a NFS a také zobrazit bootovací menu.
- Přidáme Server name a Server address, obě položky s IP cílového PXE serveru, kde poběží TFTP služby, která tento soubor poskytne.
- Případně můžeme vybrat Instance, ale není potřeba, protože více jak jednu instance dnsmasq určitě nemáme.
archiso_pxe.cfg
Posledním nastavením na routeru je force odeslání jména konfiguračního souboru, který si má PXE klient také stáhnout přes TFTP protokol.
Toto nastavení musíme změnit přes modifikaci souboru
/etc/config/dhcp přímo na routeru pomocí ssh a poté restartovat službu příkazem
/etc/init.d/dnsmasq restart.
Do konfigurační části dhcp 'lan' přidáme dvě DHCP option, které se odešlou klientovi, i když se na ně neptal. První je jméno konfiguračního souboru a druhá je cesta ve které ji najde na TFTP serveru. Nastavení uvedeme v platnost příkazem
/etc/init.d/dnsmasq restart
config dnsmasq
option domainneeded '1'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option cachesize '1000'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases2'
option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
option localservice '1'
option ednspacket_max '1232'
option logqueries '1'
option sequential_ip '1'
option nonwildcard '0'
option logdhcp '1'
config dhcp 'lan'
option interface 'lan'
option start '20'
option limit '50'
option leasetime '1d'
option dhcpv4 'server'
option ra 'server'
list ra_flags 'managed-config'
list ra_flags 'other-config'
option ra_slaac '0'
option dns_service '0'
list dhcp_option_force '209,archiso_pxe.cfg'
list dhcp_option_force '210,/'
config boot
option filename 'lpxelinux.0'
option servername '192.168.1.110'
option serveraddress '192.168.1.110'
option instance 'cfg01411c'
Zprovoznění TFTP a NFS služeb na PXE serveru
Na příslušném PXE serveru si nainstalujeme TFTP a NFS služby:
root@myhost:~# pacman -S tftp-hpa nfs-utils
Cestu k TFTP souborům případně změníme v
/etc/conf.d/tftpd
Na server umístíme instalační iso soubor archlinux-2025.07.01-x86_64.iso a namountujeme ho:
mount -o loop,ro ~/archlinux-2025.07.01-x86_64.iso /mnt/archiso/
Překopírujeme soubory syslinuxu do TFTP adresáře:
cp -r /mnt/archiso/boot/syslinux/* /srv/tftp/
Původní Archlinux menu si zazálohujeme:
mv /srv/tftp/archiso_pxe.cfg /srv/tftp/archiso_pxe.cfg_
Vytvoříme si nový soubor archiso_pxe.cfg a v něm napíšeme jednoduché menu:
Obsah souboru archiso_pxe.cfg
DEFAULT menu.c32
PROMPT 0
TIMEOUT 20
menu title PXEBoot Arch Network Loader
LABEL archlinux
MENU LABEL Arch Linux x86_64
LINUX /boot/vmlinuz-linux
INITRD /boot/initramfs-linux.img
APPEND archisobasedir=/arch archiso_nfs_srv=${pxeserver}:/srv/pxeboot/archlinux cms_verify=y cow_spacesize=4G script=tftp://192.168.1.110/installScript.sh
SYSAPPEND 3
ENDTEXT
Položky LINUX A INITRD nám říkají kde najdeme cestu k ramdisku. Tato cesta je TFTP cestou a proto musíme tyto soubory umístit do správného adresáře.
cp /mnt/archiso/arch/boot/x86_64/vmlinuz-linux /srv/tftp/boot/
cp /mnt/archiso/arch/boot/x86_64/initramfs-linux.img /srv/tftp/boot/
NFS server
Čast APPEND menu se už týka načtení samotného systému souborů plnohodnotného operačního systému. Cílem je dostat se k souboru
/srv/pxeboot/archlinux/arch/x86_64/airootfs.sfs přes NFS server.
Nastartujeme NFS službu:
systemctl start nfs-server.service
Sdílené adresáře se přidávají do souboru
/etc/exports
Přidejte tam řádek:
/srv/pxeboot 192.168.1.0/24(ro,fsid=1)
Ten říká, která cesta, na jaké síti a s jakými právy bude přístupná.
# /etc/exports - exports(5) - directories exported to NFS clients
#
# Example for NFSv3:
# /srv/home hostname1(rw,sync) hostname2(ro,sync)
# Example for NFSv4:
# /srv/nfs4 hostname1(rw,sync,fsid=0)
# /srv/nfs4/home hostname1(rw,sync,nohide)
# Using Kerberos and integrity checking:
# /srv/nfs4 *(rw,sync,sec=krb5i,fsid=0)
# /srv/nfs4/home *(rw,sync,sec=krb5i,nohide)
#
# Use `exportfs -arv` to reload.
/srv/pxeboot 192.168.1.0/24(ro,fsid=1)
Jak nám komentář v souboru napovídá, po úpravě aktualizujeme nastavení příkazem:
exportfs -arv
Můžeme si vypsat sdílené složky s jejich parametry, ale podrobné nastaven NFS nás nezajímá, pokud nechceme budovat nějakou síťovou služby se sdílenými daty s mnoha klienty.
user@myhost:~# exportfs -v
/srv/http2 192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,root_squash,no_all_squash)
Potřebujeme si hlavně ověřit, že sdílené soubory jsou dostupné i vzdáleně a to uděláme příkazem:
showmount -e 192.168.1.110
user@myhost:~# showmount -e 192.168.1.110
Export list for 192.168.1.110:
/srv/pxeboot 192.168.1.0/24
Teď zpět k řádku APPEND v souboru menu.
archiso_nfs_srv parametr je NFS cesta k překopírovaným souborům z ISO souboru.
Místo ${pxeserver} doplní PXE IP, kterou dostal od DHCP, ale klidně si tam napiště IP přímo.
archisobasedir parametr je prostě adresář arch v rozbaleném DVD, ve kterém se nachází adresář x86_64 a právě v něm bude PXE hledat soubor airootfs.sfs
script=tftp://192.168.1.110/installScript.sh tento parametr překopíruje skript z TFTP serveru a spustí jej hned po naběhnutí operačního systému do RAM.
Vytvoříme si skript, který se provede po náběhu systému do RAM. V něm počkáme až doběhnou všechny služby systému, pak doinstalujeme pár základních balíčků a máme v podstatě stejný stav jako bysme spustili instalaci z DVD.
/srv/tftp/installScript.sh
#!/bin/bash
until journalctl -b -u graphical.target | grep Reached
do
sleep 5
echo "waiting"
done
systemctl is-active graphical.target
echo "Instalace zacina: ......"
pacman -Sy --noconfirm
pacman -Sq --noconfirm net-tools tree
Automatická instalace systému na pevný disk
Teď začíná ta zajímavější část, kdy musíme naskriptovat všechny ty manuální kroky, které děláme když se proklikáváme instalačním menu například Debianu nebo píšeme jednotlivé kroky do promptu na Archu.