PXE boot Win 10 s WinPE.iso

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

Nastavenie DHCP servera

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.

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *