OPNsense als TFTP-server met netboot.xyz

Dat ging snel opeens!

Lang geleden draaide er thuis een TFTP-server (oa voor de VoIP-telefoontoestellen, toen dat nog een ding was) op een Linksys NSLU, maar met een hardwarewissel is die verdwenen en niet meer teruggekomen.

Zo nu en dan zou het wel van pas komen; een apparaat dat alleen via TFTP geflashed wil worden, alsnog een VoIP-toestel, en met enige regelmaat als alternatief voor het flashen van een USB-stick met installtiebestanden.

Een tijdje geleden vond ik netboot.xyz, en voor ik me er in kon verdiepen, werd het me aangeraden als optie om een gehuurde server van een OS te voorzien. Onlangs zat er thuis een server verlegen om een operating system en zou netboot.xyz een mooie optie zijn geweest.

Zodoende kort gekeken wat er aan opties op *BSD is voor TFTP. Wat blijkt? OPNsense heeft een TFTP-plugin, en er is iemand zo vriendelijk geweest de (weinige) stappen op een blogpost te zetten:

  • Installeer de community-plugin os-tftp
  • Download de netboot.xyz-bestanden naar /usr/local/tftp :
    • fetch https://boot.netboot.xyz/ipxe/netboot.xyz.efi
    • sha256sum netboot.xyz.efi
  • In het OPNsense-menu, onder services:
    • TFTP kan nu geactiveerd worden:
      • Het listen address zet ik op de het adres van de router in het netwerk waarin het gros van de machines draait
    • Onder de DHCP-server (hij draait op IPv4 bij mij, dus inrichten onder de DHCPv4 server)
      • het item “Network booting” opzoeken en openklappen
      • als “next-server IP” het IP invullen wat eerder onder TFTP ingevuld is
      • de naam van het bootbestand invullen (voorlopig enkel netboot.xyz.efi onder x64 UEFI/EBC firmware)
    • Opslaan en DHCP herstarten
  • Klaar!

Getest met m’n laptop: het werkt meteen! Althans…

Brakke netwerkdrivers (aka Realtek)

Realtek kaarten zijn geen garantie op slechte ondersteuning, maar vaak wel een indicatie van een grote kans op slechte ondersteuning. Zo ook de driverondersteuning door Lenovo in de firmware van m’n Thinkpad met Realtek netwerk: het werkt niet.

De eerste feedback is veelbelovend:

  • TFTP-server adres wordt correct getoond
  • netboot.xyz.efi wordt gevonden en gedownload
  • iPXE wordt geinitialiseerd, features worden getoond
  • maar dan als net0/net1 geconfigureerd wordt:
    • no configuration methods succeeded
    • net0 using rtl8168 [closed] wordt getoond
    • net1 using MNP [closed]op dezelfde manier
    • TX loopt op, maar RX blijft op 0: er wordt wel wat verstuurd, maar niets ontvangen

Een poging met de undionly-versie (waarbij de basic EFI-netwerkdriver gebruikt wordt in plaats van een driver specifiek voor deze Realtek kaart) geeft ook geen resultaat.

Wat wel werkt (aka Intel)

Een paar willekeurige machines op het netwerk, toevallig allemaal met Intel NIC’s : die booten zonder problemen bij een eerste poging. Leuk hoor!

Print this entry

ASUS P9D-I

Voor een upgrade van de Proxmox-infrastructuur heb ik een nieuw tweedehands moederbordje: Asus P9D-I. Het is een mini-ITX bordje voor een oudere generatie Xeon processoren.

Bij aanvang deed het bordje niets: ledjes gingen aan, de CPU-fan draaide, maar er was geen beeld op de onboard DVI-aansluiting. Ook een externe grafische kaart boodt geen soelaas.

Met wat meer onderzoek realiseerde ik me dat er via ASMB7-iKVM remote access ingebouwd zat, en na inloggen gaf dat een mogelijke oorzaak: de CPU-temperatuur schoot meteen na het aanzetten naar 127 graden Celsius. Hoewel het koelblok niet gigantisch heet voelde, was de warmte van de CPU wel aan de onderzijde van de serverbehuizing voelbaar.

In de hoop dat het systeem nog te redden viel, heb ik alles uit elkaar gehaald, goed ontstoft, fans schoongemaakt en CPU van nieuwe koelpasta voorzien.

Na alles inbouwen was er alsnog geen beeld, maar wel het idee dat 127 graden erg lijkt op het uiteinde van een signed 8-bit schaal, van -128 via 0 tot 127.

Stom genoeg had ik geen reset gedaan van BIOS of ME. Alleen verzetten van de CLRTC1-jumper leek geen effect te hebben. Na loskoppelen van de batterij en terugzetten van de jumper, heb ik het systeem aan laten staan terwijl ik verdere documentatie probeerde te vinden.

Tot mijn verbazing begon het systeem na een paar minuten uit zichzelf te piepen. Lang-kort-kort, lang-kort-kort: geen RAM aanwezig. Dat klopt: alles lag er nog uit.

Snel alles ingebouwd, en ja hoor: boot en beeld op de interne DVI.

CPU-upgrade

Het bordje werd geleverd met een Xeon E3-1220v3: 4 cores op 3,5 GHz met 8 MB cache bij een TDP van 80 W.

Ik heb er een iets nieuwere CPU bij kunnen vinden in de E3-1275v3. Die heeft met 3,9 GHz een hogere topfrequentie, met 2,7 GHz een lagere basisfrequentie en daarbij een ingebouwde GPU; dat alles bij een TDP van 45 W.

Ik vermoed dat het verschil in idle-verbruik nihil is, omdat beide CPU’s zullen terugschalen als er geen belasting is, maar voor een router VM met OPNSense komt de hogere topfrequentie van pas terwijl de GPU mogelijk kan ondersteunen bij het genereren van JPG of transcoden van mediabestanden op Nextcloud.

Na een paar keer alles uit- en inbouwen was verwisselen van de CPU een fluitje van een cent. Het systeem bootte zonder verdere problemen.

SSD-upgrade

De mini-ITX behuizing (Chenbro SR3019) biedt ruimte aan 4×3,5″ en 2×2,5″ opslagmedia. Het moederbord heeft echter slechts 4x SATA. Het PCIe 16x uitbreidingsslot gebruik ik voor een U.2 adapter voor een 1,92 TB NVMe SSD.

De SSD dient als caching voor een RAID10-configuratie van harde schijven, voor het installeren van het OS en voor zaken als databases in de VM’s.

Installatie van Debian 12, om daarna Proxmox te installeren, verloopt ‘uneventful’,

Starten van de nieuwe installatie echter niet. Geen besturingssysteem gevonden!

In het BIOS is de SSD niet terug te vinden. Tijd voor een BIOS-upgrade.

BIOS-upgrade

Het moederbord werd geleverd met een BIOS uit 2016; de meest recente BIOS die Asus aanbiedt is van 2018. Het zal echter blijken dat Asus ook daarin geen ondersteuning van NVMe biedt.

Voor de upgrade biedt Asus een DOS-utility. Booten van Freedos zou makkelijk via iKVM moeten kunnen door via de virtuele bootmedia de ISO te koppelen, maar ik kan nergens in de interface de benodigde functionaliteit vinden (zit niet in de webinterface, zo blijkt, maar in de java viewer. Zie onder Java webview). Daarom de ISO naar een USB-stick schrijven (dd if=FD14FULL.img of=/dev/sdf bs=32M status=progress) en booten van USB.

Eenmaal in DOS beland, is het voldoende om BUPDATER.EXE /iP9DI2101.CAP te draaien vanaf de betreffende directory.

Zoals al aangekondigd, ondersteuind de nieuwste officiele BIOS helaas geen NVMEe. Oplossing? Een aangepaste BIOS.

Ik ben blijkbaar niet de eerste die tegen het probleem aan loopt. Niet alleen is er de afgelopen tien jaar een berg aan informatie over het aanpassen van UEFI firmwares gepost, er is ook al iemand geweest die de moeite heeft genomen dat voor de P9D-I te doen en het resultaat te posten.

Om te verifieren dat er inderdaad een NVMe-module beschikbaar is in de gedownloade firmware, is er UEFITool (sudo apt install efitools pesign sbsigntool uefitool uefitool-cli)

Het vervelende is alleen dat in de loop van de tijd de firmwares verpakt zijn in een formaat (.cap) met checksum. De Asus-flasher geeft een foutmelding bij het laden voor het flashen van de firmware.

De alternatieve weg, via Ami’s firmware update utility, leunt op een vervallen optie (/GAN), waarmee de checksum genegeerd werd.

Bij gebrek aan die mogelijkheid via Ami’s utility, zijn er nog drie opties:

  • Misschien is het nog wel mogelijk een dergelijke firmware via de UEFI-console te flashen;
  • Een oudere versie van de DOS-versie van die utility;
  • Flashen van de BIOS chip met een externe hardware-flasher (CH341A), nog aan te schaffen

Met het constant toevoegen van bestandjes aan de USB stick wordt het wat irritant telkens de boel in- en uit te pluggen.

Java webview

Het zou fijn zijn als iKVM naar behoren werkte, maar met de java-viewer (.jnlp) die draait via javaws mag dat niet, omdat javaws al jaren geen unsigned bestanden meer wil lezen.

Na een tijd prutsen met de beveiligingsinstellingen van Java en alternatieve manieren om de viewer te starten, ben ik uiteindelijk gestuit op OpenWebStart van Karakun. Na een eenvoudige sudo dpkg -i OpenWebStart_linux_1_12_0.deb, werkte het meteen!

In de JViewer app is een menu-optie “Media” om virtuele media te koppelen. De ISO’s die ik geprobeerd heb aan de viewer te voeren slikte hij echter niet.

Terug bij af…

Het systeem wil niet meer starten. Mogelijk is het de eerste ‘cold boot’ sinds de BIOS update. Het viel me op nadat ik het systeem van uit, inschakelde met een UEFI-bootable USB-stick: geen beeld.

De symptomen zijn gelijk aan de oorspronkelijke situatie, met het verschil dat de stappen van toen nu geen verbetering bieden.

Wat wel werkt:

  • ME: via IPMI kan ik het systeem starten; de temperatuur gaat daarmee van 0 graden Celsius naar 127 graden Celcius
  • Hetzelfde is te bereiken met de aan-/uit-knop
  • Piiip-pip-pip bij geen RAM geinstalleerd, maar ook slechts na een vrij lange periode, ca 30 seconden.

Wat niet werkt:

  • Beeld
  • USB power – geen toetsenbord-activiteit

Zodra ik een enkel reepje RAM installeer, volgt er geen pieptoon. Het maakt daarbij niet uit in welk van de twee sloten het reepje geinstalleerd wordt. Via IPMI is te zien dat een van de twee bankjes bezet is.

… of toch niet

Het project heeft een tijdje stilgelegen voordat deze pagina gepubliceerd werd. Nu ik (via IPMI/iKVM) opnieuw door het BIOS loop, probeer ik de verschillende boot-configuraties die mogelijk zijn. Het idee was om de verschillende CSM opties in ‘legacy’ en ‘UEFI’ modus te proberen, en volledig zonder CSM actief. Dat laatste deed ik als eerste en dat was meteen raak. De mogelijk betrokken opties:

  • PCI subsystem settings
    • Above 4G decoding : enable ipv disable
    • ASPM : disabled (default)
  • Boot
    • Boot option 1 : PATA (ja, inderdaad, PATA. Het is het label waaronder PCIe-boot beschikbaar is)
    • CSM : disabled

Met ipmitool -I lanplus -C 3 -H 172.26.90.171 -U admin power on en ipmitool -I lanplus -C 3 -H 172.26.90.171 -U admin sol activate is te zien hoe, tot mijn verbazing en blijdschap, bij de eerste poging GRUB gevonden werd:


AMIBIOS(C)2013 American Megatrends, Inc.

ASUS P9D-I Series ACPI BIOS Revision 2101
Press DEL to run Setup. Press F12 to run Net Boot.
Press ALT + F2 to run EzFlash.
Press F8 for BBS POPUP.
CPU: Intel(R) Xeon(R) CPU E3-1275L v3 @ 2.70GHz
Total Memory: 16384MB (DDR3 1600)

USB Devices total: 2 Drives, 3 Keyboards, 2 Mice, 3 Hubs
USB Drive #0: AMI Virtual CDROM0 1.00
USB Drive #1: AMI Virtual Floppy0 1.00

Detected ATA/ATAPI Devices...
BMC is Ready

Welcome to GRUB!

Print this entry

UEFI BIOS boot en GRUB

Voor de zoveelste keer tijdens een installatie: wat zijn ook alweer de benodigde partities sinds UEFI?

In ieder geval /boot , groot genoeg voor een stuk of drie Linux-images; met 50-70 MB per stuk is 200 MB ruim voldoende.

Dan is er de BIOS-boot-partitie, waar de UEFI-bestanden terechtkomen. Volgens specificaties tot zo’n 500 MB, maar mag ook minder zijn. Gok ook op 200 MB.

Uiteindelijk: een kleine partitie (1-2 MB is meer dan genoeg) voor de het deel van de bootloader wat voorheen in de loze ruimte in de partitietabel weggeschreven werd. In tegenstelling tot een DOS-partitieschema, heeft GPT geen loze ruimte.

Het is wel nodig om GRUB over te halen gebruik te maken van die loze ruimte, anders meldt grub-install dat use of blocklists ‘discouraged’ is:

# grub-install /dev/sda1 --force

… vooropgesteld natuurlijk dat de mini-partitie te vinden is op /dev/sda1.

Print this entry