Pxe server

Posted by Wesley Landaal on Sun, Nov 12, 2023

PXE Boot Server

Was er klaar mee met elke keer een usb stick maken voor een installatie.
Dus ik heb een pxe boot server opgezet.
Hier onder een uitleg hoe ik dat gedaan heb.
Je kunt er je voordeel mee doen of dingen uit mijn config gebruiken.

Vereisten

  • Linux server
  • Docker & Docker compose
  • Je server moet een static ip hebben
  • dhcp-server met pxe opties (en toegang tot je dhcp natuurlijk)

Installeren

Maak een map aan op je server voor de installatie.

1mkdir netboot
2cd netboot
3mkdir assets
4mkdir config

Maak een compose file in de map netboot.
nano docker-compose.yml

 1---
 2version: "2.1"
 3services:
 4  netbootxyz:
 5    image: lscr.io/linuxserver/netbootxyz:latest
 6    container_name: netboot
 7    environment:
 8      - TZ=Europe/Amsterdam
 9      # - MENU_VERSION=1.9.9 #optional, sets menus version, unset uses latest
10      - PORT_RANGE=30000:30010 #optional
11      - SUBFOLDER=/ #optional
12    volumes:
13      - ./config:/config
14      - ./assets:/assets #optional
15    ports:
16      - 3000:3000
17      - 69:69/udp
18      - 8080:80 #optional
19    restart: unless-stopped

Start je docker container.
na het starten zie je gelijk de logs.
Zijn er geen errors? druk dan ctrl+c om de logs te sluiten.
Zijn poort 3000 of poort 8080 al in gebruik?
Pas dan de linker getallen aan hier boven.
Denk er dan wel om dat je ook in de uileg hier onder de juiste poorten voor jou gebruikt.

1docker compose up -d && docker logs -f netboot

Configuratie

Je kun je boot images op de vulgende url vinden http://ip-van-je-server:3000/

Lokale bibliotheek

Als je wilt aanbieden vanaf je lokale bibliotheek dan moet je het volgende aanpassen, pas the boot.cfg file aan in boot menus.

verander:

set live_endpoint https://github.com/netbootxyz

naar:

set live_endpoint http://ip-van-je-server:8080

Houd er rekening mee dat je nu alleen kan booten van images die je gedownload hebt.

DHCP Configuratie

Hier onder een aantal configuraties voor bekende routers.
Heb je aanvullingen? laat een comment achter.

Pfsense

1Services -> DHCP Server
2
3Set both the option for "TFTP Server" and the options under the Advanced "Network Booting" section.n * check enable * Next server- IP used for TFTP Server * Default BIOS file name- netboot.xyz.kpxe * UEFI 32 bit file name- netboot.xyz.efi * UEFI 64 bit file name- netboot.xyz.efi

Opnsense

1OPNsense¶
2Services -> DHCP Server
3
4Under the Advanced "Network Booting" section. * check enable * Next server- IP of docker host * Default BIOS file name- netboot.xyz.kpxe * UEFI 32 bit file name- netboot.xyz.efi * UEFI 64 bit file name- netboot.xyz.efi

Unifi Security Gateway (with the controller)

1Networks -> LAN (or the network you want to boot from) -> ADVANCED DHCP OPTIONS * tick Enable network boot * Server- YOURSERVERIP * Filename- netboot.xyz.kpxe Advanced full support * For USG variants force provisioning a json containing the same config used for EdgeOS (shown below) will fully support netboot. * For UDM variants, creating a valid dnsmasq config and placing in /run/dnsmasq.conf.d will load the config, but will not survive reboots or firmware updates

Hoe Windows booten vanaf netwerk?

Dit is een stukje ingewikkelder dan Linux.
Maar ik ga het hier onder uit leggen.

Vereisten

  • Windows 10/11 machine
  • Windows ISO
  • Windows ADK for Windows 10/11
  • Windows PE add-on for the Windows ADK
  • Netwerk share voor de windows files (zonder wachtwoord werkt het makkelijkst)

Windows 11 ADK bestanden hier

Installeer Windows ADK for Windows 10/11.

Installeer Windows PE add-on for the Windows ADK.

Winpe maken

Start Deployment and Imaging Tools Environment als administrator via start menu.

Ga naar:

1cd "..\Windows Preinstallation Environment\amd64"

Koppel de Windows PE boot image:

1md C:\WinPE_amd64\mount
2Dism /Mount-Image /ImageFile:"en-us\winpe.wim" /index:1 /MountDir:"C:\WinPE_amd64\mount"

Kopieer de bestanden:

1Xcopy "C:\WinPE_amd64\mount\Windows\Boot\EFI\bootmgr.efi" "Media\bootmgr.efi" /Y
2Xcopy "C:\WinPE_amd64\mount\Windows\Boot\EFI\bootmgfw.efi" "Media\EFI\Boot\bootx64.efi" /Y

Maak bestand om mee te werken:

1copype amd64 C:\WinPE_amd64

Maak opstartbare WinPE iso.

1MakeWinPEMedia /ISO C:\WinPE_amd64 C:\WinPE_amd64\WinPE_amd64.iso

Als je geen iso ziet op deze lokatie: C:\WinPE_amd64
Dan moet je deze C:\WinPE_amd64 map even verwijderen en bovenstaand commando nogmaals uitvoeren.
Dan zul je wel een WinPE iso zien.

Upload WinPE bestanden

Nu moeten we de WinPE bestanden uploaden naar onze pxe server.
Login op je server en zorg dat de volgende mappen bestaan.
Op de lokatie van je docker container.

1/assets/WinPE/x64/

Als je deze mappen hebt koppel dan de WinPE iso op je windows machine.
Kopieer deze bestande naar bovenstaande lokatie.

Maak netwerk share voor het serveren van Windows

Installeer op je server samba (als dit al niet geinstalleerd is)

Maak nu een map waar je windows iso in uitgepakt word.
Geef deze map ook de juiste rechten.

1mkdir /home/je_gebruikersnaam/Windows11
2chmod 777 /home/je_gebruikersnaam/Windows11

Als je die map gemaakt hebt ga dan naar:

1cd /etc/samba

Als je nu ls typt zie je de bestanden.
open smb.conf.

1sudo nano smb.conf

Zet het volgende in de samba configuratie:

1[windows]
2  comment = Windows install
3  path = /home/je_gebruikersnaam/Windows11
4  public = yes
5  writable = yes
6  guest only = yes

Windows iso kopieren

Goed we hebben nu een netwerk share voor de Windows installatie.
Koppel een Windows iso op je Winodows machine.
Kopieer de inhoud van de iso naar je Windows netwerk share.

Wil je meerdere windows versies serveren?
Herhaal dan de stappen.

Configureer netboot voor Windows

Ga naar http://ip-van-je-server:3000/ en open weer boot.cfg
Net als in voorgaande stappen.
Je ziet ergens een regel staan die hier op lijkt: set win_base_url
Verander die naar:

1set win_base_url http://ip-van-je-server:8080/WinPE  

Als het goed is zou je nu via netwerk moeten kunnen booten.
In het boot menu die via je netwerk word geladen zie je een kopje Windows.
Als je daarop klikt laad er een scherm van Wpeinit.

setup starten vanaf netwerk

Koppel je windows share aan.

1net use Z: \\<server-ip-address>\<share-name>

Start setup

1Z:\setup.exe

Je windows installatie zou nu moeten starten.

Aanvullingen of opmerkingen?
Laat een comment achter :)