Pred nejakým časom som potreboval na starší NoteBook nainštalovať linux. Vzhľadom k tomu, že už nemám žiadne voľne CD/DVD a na nešťastie som nemal k dispozícii ani žiadny USB kľúč, rozmýšľal som ako nainštalujem OS, keď nemam žiadne médium z ktorého by som nabootoval. Myslel som si, že som zachránený, keď som našiel doma pohodenú micro SD kartu. Po naformátovaní som na kartu rozbalil ISO obraz a začal som v NTB linux bootovať. Inštalácia prebiehala bez problémov, ale pri kopírovaní dát z SD karty na harddisk NoteBooku, nastal problém a inštalátor ukončil proces inštalácie (niektoré dôležité súbory nebolo možné skopírovať).
Potom ma napadlo, že OS je možné zaviesť aj cez sieťovú kartu. O možnosti bootovania cez sieťovú kartu som vedel, ale prakticky nikdy som to nepotreboval, tak som sa o to ďalej nezaujímal. Teraz však prišiel ten čas, keď som si povedal, že to musím vyskúšať. Medzitým som si USB kľúč zadovážil a linux som do NTB nainštaloval. Teraz ma ale viac zaujíma PXE. Podmienkou bootavania zo siete je podpora tejto funkcie v BIOSe (resp. v UEFI).
PXE
Preboot EXecution Enviroment, je štandard, ktorý zaviedla v roku 1999 spoločnosť Intel. Pri tejto technológii sa zavádza (bootuje) operačný systém prostredníctvom počítačovej siete. Dôvodov prečo bootovať po sieti je viac: napr. sieťové zavedenie použité pre diagnostiku počítača. Tak isto sa táto metóda používa na hromadnú inštaláciu operačných systémov atď…
Na zavedenie systému zo siete budeme potrebovať
- DHCP server
- TFTP server
- NFS/FTP/HTTP/Samba server
- Syslinux
Vo väčšine tutoriálov a návodov sú spomenuté technológie nastavené na tom istom servery a topológia siete je následovná

Server PXE poskytuje všetky služby vrátane DHCP servera. V tomto prípade klienti získavajú IP adresy s DHCP servera, ktorý je nainštalovaný na PXE servery. Ja som to mohol riešiť podobným spôsobom, ale u mňa je situácia trochu odlišná a nechcel som zasahovať do siete fyzicky. Moja topológia siete je klasická, kde už DHCP server existuje, takže ďalší DHCP server som na sieti nemohol použiť.

Zdroj internetu je VDSL2, ktorý je prebridgovaný cez modem Zyxel VMG-1312-B30B a na RB450 je použitý ROS Mikrotik 6.45.1 (23.11.2019). Problém je v tom, že DHCP server musí byť nastaveny pre PXE bootovanie a takto sa nedá nastaviť hocijaký DHCP server. Mikrotik však takéto nastavenie umožňuje.
DHCP na PXE servery
DHCP server na PXE funguje následovne: ak na klientskom počítači povolíme v BIOSe/UEFI bootovanie zo siete a pri zapnutí počítača stlačíme kláves F12, tak počítač vyšle broatcastovu správu v UDP datagrame s vloženeou správou DHCPDISCOVER, kde je nastavený príznak PXE. Na takúto správu odpovie len DHCP server, ktorý je nastavený tak, aby odpovedal, počítačom, ktoré žiadajú o sieťové bootovanie (iné DHCP servery, ktoré nemajú nastavené sieťové bootovanie, túto správu ignorujú). DHCP server vyšle počítaču správu DHCPOFFER s IP adresou, maskou siete, bránou a IP adresou TFTP servera. Ak bol v prvej odpovedi DHCP servera určený aj TFTP server , tak PXE kontaktuje zase DHCP server pomocou DHCPREQUEST a žiada o plnú cestu k bootstraping programu (Network Boot Program – NBP). DHCP server odpovedá správou DHCPACK. Následne sa stiahne do operačnej pamäte bootstraping (NBP). NBP je sieťovou obdobou zavádzača jadra operačného systému.
Čo budeme potrebovať
- Mikrotik kde nastavíme DHCP
- LXC linuxový kontajner Centos 7
- TFTP server
- NFS, FTP, Samba, alebo HTTP/HTTPS server
- Syslinux
Konfigurácia DHCP na Mikrotiku
Cez WinBox sa prihlásime do administračného rozhrania routera mikrotik a otvoríme si New Terminal. V terminály zadáme príkaz na zobrazenie dostupných sieti.
ip dhcp network print
Ja routujem na LAN len 2 siete, takže výpis vyzerá následovne
# ADDRESS GATEWAY DNS-SERVER
0 192.168.1.0/24 192.168.1.1 192.168.1.1
1 192.168.5.0/24 192.168.5.1 192.168.1.1
Sieť 192.168.1.0/24 nastavíme tak, aby DHCP server prideľoval IP adresy klientom ktorí požadujú sieťové bootovanie. Čiže sieti pridáme niektoré parametre a to konkrétne boot-file-name, next-server a ntp-server
address=192.168.1.0/24 boot-file-name=pxelinux.0 dns-server=192.168.1.1 gateway=192.168.1.1 next-server=192.168.1.111 ntp-server=192.168.1.111

To by malo byť všetko čo sa týka nastavenia DHCP na mikrotiku. Toto nastavenie pridelí PXE klientovy IP adresu, masku siete, bránu (GW) a ukáže klientovy na ktorej IP adrese sa nachádza TFTP server z ktorého sa bude kopírovať do operačnej pamäte bootstraping.
Inštalácia LXC Centos 7
V návode budeme uvažovať IP adresu PXE servera 192.168.1.111
Môže byť použitý aj fyzicky server, ale vzhľadom k tomu, že virtualizácia je dnes súčasťou aj bežných domácnosti, tak prečo nevyužiť linuxový kontajner, alebo KVM.
Ja som inštaloval Centos 7 v Proxmoxe cez webové rozhranie, čiže inštalácia bola na niekoľko klikov. V nasledujúcom zozname sú vyznačené, len položky, ktoré som pozmenil, alebo ktoré som vyplňoval (ostatné som nechal na prednastavených hodnotách). Pokiaľ sme prihlásený na proxmoxe cez webové rozhranie, tak klikneme na
- Create CT
- Unprivileget container: Off
- CT ID: zadáme číslo pre kontajner (defaultne sa vyplní automaticky)
- Hostname: pxe-server
- Password: ********
- Confirm Password: ********
- SSH Public Key: pokiaľ používame tak ho môžeme nakopírovať
- Templates: centos-7-default_20171212_amd64.tar.xz
- Disk size (GiB): 24 GB (môže byť aj viac)
- Cores: 2
- Memory (MiB): 2048
- Swap (MiB): 2048
- IPv4/CIDR: 192.168.1.111/24
- Gateway (IPv4): 192.168.1.1
Kontajner spustíme a prihlásime sa cez webový terminál „shell„. Najprv aktualizujeme systém, nainštalujeme SSH server, SSH klient, službu povolíme a spustíme. Odporúčam nainštalovať aj file manager mc a editor nano
pct enter 111
yum update
yum -y install openssh-server openssh-clients
chkconfig sshd on
systemctl enable sshd.service
service sshd start
yum install -y mc && yum install -y nano
Teraz sa môžeme do kontajnera prihlásiť cez SSH (mne osobne sa pracuje lepšie v normálnom terminály narozdiel od webového). Ešte pred konfiguráciou spomeniem, že na linuxovom kontajnery v predvolenom režime sú vypnuté služby selinux a firewalld (resp. iptables). Pracovať budeme ako root s promptom #.
Inštalácia TFTP servera
Najprv si na Centose nainštalujeme TFTP server. Po úspešnej inštalácii službu spustíme a povolíme automaticky štart po štarte systému. Skontrolujeme či služba beží.
yum install -y tftp-server
systemctl start tftp.service && systemctl enable tftp.service
systemctl status tftp.service
Inštalácia Samba server
Nainštalujeme a nakonfigurujeme Samba server na ktorom budú uložené zdroje odkiaľ sa následne budú inštalovať operačné systémy. SMB server bude nastavený ako anonymous, čiže prístup v sieti nebude vyžadovať prihlasovacie údaje.
- Nainštalujeme Sambu
- Zálohujeme konfiguračný súbor
- Vytvoríme adresár pre OS v našom prípade Win 10
- Otvoríme konfiguračný súbor pre úpravy
yum install samba samba-client samba-common
cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
mkdir -p /samba/win10
nano /etc/samba/smb.conf
Konfiguračný súbor, len trocha poupravíme a uložíme. Takto by mohol vyzerať obsah súboru.
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = WORKGROUP
security = user
netbios name = centos
map to guest = bad user
passdb backend = tdbsam
[win10]
comment = Anonymous File Server Share
path = /samba/win10
browsable =yes
writable = yes
guest ok = yes
read only = no
force user = nobody
Pre kontrolu môžeme spustiť ešte
testparm
Službu teraz nastavíme aby sa spúšťala pri štarte systému a zapneme ju.
systemctl enable smb.service
systemctl enable nmb.service
systemctl start smb.service
systemctl start nmb.service
Teraz môžeme skúsiť či sa dokážeme v LAN sieti pripojiť z počítača na ktorom beží Windows na zdieľaný adresár v linuxe. Vo Windowse klikneme na Start a napíšeme.
\\192.168.1.111
Ak je všetko v poriadku, tak by sme mali vidieť adresár win10.
Inštalácia PXE
Teraz nainštalujeme syslinux. Syslinux je projekt, ktorý vyvíja sadu utilít určených pre zavedenie operačných systémov z rôznych médii. Nás bude zaujímať hlavne zavedenia OS cez sieť o ktorú sa stará PXELINUX.
yum install -y syslinux
Ďalej nakopírujeme Bootloadery zo syslinuxu do /var/lib/tftpboot
cp -r /usr/share/syslinux/* /var/lib/tftpboot
Do /var/lib/tftpboot/ budeme vkladať súbory z ktorých sa budú operačné systémy zavádzať (kernely a initial ramdisk). Na PXE server by sme mali teraz uploadnuť ISO obraz inštalačného media Windows 10, tam ho primountovať a obsah prekopírovať do pripraveného adresára. Problém je v to, že mount v LXC nie je jednoduchý a mne sa ani nepodarilo mount ISO súboru urobiť. Preto som sa rozhodol, že ISO obraz Windows 10 mountnem na pracovnom PC a obsah prekopírujem na PXE server pomocou SCP príkazu. Takže pripojíme ISO obraz Windows 10 do adresára /mnt/iso (ak /mnt/iso neexistuje, tak ho vytvoríme). ešte upozorním, že túto operáciu vykonávame na PC, kde je uložený ISO obraz OS. Ja mám ISO obraz uložený na pracovnom PC, ktoré beží na linuxe, tak použijem následovné príkazy.
sudo mkdir /mnt/iso
sudo mount -o loop /media/jany/1026B1C426B1AADC/OS/ms_windows/win_10/Win10_1903_V2_Slovak_x64.iso /mnt/iso
Ak používate OS Windows, tak na pripojenie ISO obrazu použijete nejaký nástroj určený pre Windows (napr. UltraISO) a kopírovať na server budete cez winscp. Čiže ja som v linuxe použil na kopírovanie obsahu celého adresára na server príkaz:
scp -r /mnt/iso/* root@192.168.1.111:/samba/win10
Teraz zmeníme rekurzívne privilégia adresáru a vlastníka nastavíme na nobody
chmod -R 0755 /samba/win10
chown -R nobody:nobody /samba/win10
Vytvoríme si adresár kde bude boot menu a do súboru default vložíme bootovacie menu.
mkdir /var/lib/tftpboot/pxelinux.cfg
nano /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 0
timeout 300
ontimeout 5
menu title PXE Boot Menu
label 1
menu label ^1 - Install Win 10
kernel memdisk
initrd WinPE_10.iso
append iso raw
label 2
menu label ^2 - Boot from local media
localboot 0x80
WinPE.iso
Presunieme sa do operačného systému Windows 10 a vytvoríme si WinPE.iso. K tomu budeme potrebovať WADK a WinPE.
Po nainštalovani program spustíme
strat -- > Deployment and Imaging Tools and Enviroment
- Vytvoríme pracovny adresár
- Upravíme image a start.cmd
- Uložíme a image odpojíme
- Na koniec vygenerujeme ISO
copype amd64 c:\WinPE_x64
Dism /Mount-Image /ImageFile:"c:\WinPE_x64\media\sources\boot.wim" /index:1 /MountDir:"c:\WinPE_x64\mount"
notepad c:\WinPE_x64\mount\Windows\System32\Startnet.cmd
wpeinit
net use z: \\192.168.1.111\Win10
z:\setup.exe
Dism /Unmount-Image /MountDir:"c:\WinPE_x64\mount" /commit
MakeWinPEMedia /ISO c:\WinPE_x64 c:\WinPE_10.iso
Vytvorené ISO musíme teraz preniesť na PXE server do /var/lib/tftpboot/. Ja som WinPE.iso vytváral vo Win 10, ktorý je nainštalovaný na vmware ESXi, takže som to robil cez remminu na pracovnom desktope. WinPE.iso som si cez FTP preniesol na pracovný počítač a následne som ho cez SCP preniesol na PXE server.
scp /home/jany/Plocha/WinPE_10.iso root@192.168.1.111:/var/lib/tftpboot/
Presunieme sa ku klientskému PC, ktoré chceme bootvať po sieti a pri zapnutí PC držíme kláves F12. Na klientskom PC naskoči bootovacie menu, kde označime položku Install Win 10. Ak nezačne bootovanie, ale sa vypíše následujúca hláška:
Could not find ramdisk image:“ [path to iso]. V takomto prípade stačí nastaviť privilégia ISO obrazu na 777 a vlastníka na nobody.
chmod -R 0777 /var/lib/tftpboot/WinPE_10.iso
chown nobody:nobody /var/lib/tftpboot/WinPE_10.iso
To je všetko čo sa týka nastavenia PXE servera. Teraz znova zapneme PC a pridržíme kláves F12. Z bootovacieho menu vyberieme Install Win 10 a počkáme pokým nám nenabehne setup.exe. Ďalej môžeme pokračovať ako keby sme OS inštalovali z klasického DVD/USB média.
Záver
V tomto krátkom návode je spomenutá aj inštalácia linuxového kontajnera Centos 7 zo šablóny na Proxmexe . Ako som uviedol už v blogu, tak selinux a iptables sú vypnuté, čiže z tohto hľadiska nebude potrebné vytvárať žiadne pravidlá. Ďalej tento návod popisuje ako vytvoriť WinPE.iso obraz na zavedenie OS Win 10. Tak ako je to popísane v tomto návode mi to aj funguje. V nasledujúcom blogu ukážem ako nainštalovať Windows 10 pomocou wimboot. Bude sa jednať o podobný návod, ale namiesto memdisk bude použitý wimboot.