PXE-boot voor Ubuntu 16.04 op Ubuntu 14.04

Jaren geleden (2014) heb ik een tweede- of derdehands Dell rackmount-server gekocht voor wanneer “dat eens van pas zou komen”. En dat moment is nu gekomen; het wordt een monitoringserver voor de lokale radio, om te kunnen zien of een bepaald cruciaal onderdeel is uitgevallen vooraleer de radio off-air gaat.

Maar dan moet er natuurlijk een OS op. En zo’n server kan enkel PXE-booten, maar dat kan mijn netwerk dan weer niet zomaar. Dus, om een lang verhaal kort te maken, enkele aanpassingen drongen zich op: de thuis-manusje-van-alles-server moet ook nog eens PXE en TFTP ondersteunen, terwijl de router dat moet kunnen delegeren naar de server.

Netwerk

Te beginnen met het netwerk: de router is een Mikrotik met RouterOS v6.41. En die kan dat. Maar niet op de geijkte manier (met DHCP-options 66 en 67), maar wel zo:

/ip dhcp-server network
add address=192.168.0.0/24 boot-file-name=pxelinux.0 comment=dhcp-lan dhcp-option="" dns-server=192.168.0.1 gateway=192.168.0.1 netmask=25 next-server=192.168.0.200 ntp-server=192.168.0.200

(waarbij 192.168.0.200 het adres is van de server met PXE/TFTP)

Server

En dan nu de server. Op het systeem (serapeum) staat Ubuntu 14.04 LTS, maar uiteraard wil ik Ubuntu 16.04 LTS (de volgende LTS) (eigenlijk wou ik CentOS 7, maar dat is een beetje te veel van het goede).

Vooraleer te beginnen, open de firewall op poort 69 voor udp-verkeer en maak een map aan om de installatiebestanden op te slaan (bijvoorbeeld /srv/tftp).

Installeer dan een paar packages:

apt-get install tftpd-hpa inetutils-inetd syslinux

Geen dhcp-server of nfs-server; DHCP is iets voor de router en NFS gebruiken we niet.

Inetd zal gebruikt worden om de tftp-service te starten, dus moeten er aanpassingen gebeuren in /etc/initetd.conf:

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /srv/tftp

Volgende werk is de configuratie van tftp (in dit geval tftpd-hpa) zelf. In /etc/default/tftpd-hpa:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
RUN_DAEMON="yes"
OPTIONS="-l -s /srv/tftp"

/srv/tftp is de map die in het begin is aangemaakt om de installatiebestanden te bevatten. De rest zijn min of meer de standaardwaarden.

Uiteraard moet de service nog ingeschakeld worden en moet ook starten bij het opstarten, voor het gemak.

update-initd --enable BOOT
service tftpd-hpa start

De voorlaatste stap is de configuratie van de bootloader. We (of beter, tftp en PXE) gebruiken hiervoor Syslinux.

Begin met in srv/tftp de map pxelinux.cfg aan te maken, en daarna vesamenu.c32 en pxelinux.0 uit /usr/lib/syslinux naar /srv/tftp te kopiëren. De bestanden uit /usr/lib/syslinux zijn nodig voor de bootloader, terwijl in pxelinux.cfg de configuratie voor de bootloader komt.

Het configuratiebestand van de bootloader heet, zeer creatief, default en bevindt zich in pxelinux.cfg. Het is niet zo ingewikkeld; maar een beetje “klassiek”. Meer informatie is te vinden op de wiki van syslinux, dat dient als bootloader voor PXE.

DEFAULT vesamenu.c32
TIMEOUT 100
PROMPT 0
MENU INCLUDE pxelinux.cfg/PXE.conf
NOESCAPE 1
LABEL Install Ubuntu 16.04 Server
MENU LABEL Install Ubuntu 16.04 Server
kernel Ubuntu/16.04/amd64/linux
append initrd=Ubuntu/16.04/amd64/initrd.gz vga=788
ENDTEXT

Ook ik ben niet zo creatief geweest. Wat tussen LABEL en ENDTEXT staat zijn de menu-entries. Ik heb er maar één, Install Ubuntu 16.04 Server. kernel verwijst naar de Linux-kernel; append voegt parameters toe aan de kernel. initrd verwijst naar de initial ramdisk en vga naar de vga-modus. initrd en kernel zijn bestanden in Ubuntu/16.04/amd64 en zijn gekopieerd van de Ubuntu 16.04 netinstall-images.

Als je meer items in het menu wil kan dat door extra LABELENDTEXT-blokken toe te voegen.

Naast default moet er in pxelinux.cfg ook nog pxe.conf staan, waar we in default ook naar verwijzen (MENU INCLUDE pxelinux.cfg/PXE.conf). Het moge duidelijk zijn dat die entry niet case-sensitive is.

pxe.conf bevat niet veel interessants:

MENU TITLE PXE Server
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
MENU WIDTH 80
MENU ROWS 14
MENU TABMSGROW 24
MENU MARGIN 10
MENU COLOR border 30;44 #ffffffff #00000000 std

Volgende (en laatste) stap is het kopiëren van de kernel en initrd van de minimal-installation-image van Ubuntu 16.04. Download de ISO, mount hem en kopieer linux en initrd.gz vanuit de root van de CD naar de installatiemappen. Zorg ervoor dat de locatie dezelfde is als die in pxelinux.cfg/default, anders verwijst dat bestand naar iets wat niet bestaat. En dan zal het niet werken.

Finale

Dat was het eigenlijk. Als alles goed geïnstalleerd en geconfigureerd is, de firewall open staat en de computer waar je iets op wil installeren PXE-booting ondersteunt, dan zou het moeten werken. Veel plezier!

(Een echte systeembeheerder zou natuurlijk Kickstart en/of preseed configureren naast PXE-boot, maar ik ben niet meteen van plan om een installatiefarm op te zetten.)

mysql op Ubuntu 16.04

Groot was de (mijn) consternatie toen ik probeerde om op een blauwe maandag (het zal eerder een zaterdag geweest zijn, maar goed) een database aan te maken voor één of ander project. Normaal is dat niet zo moeilijk: inloggen als root, database aanmaken et voilà, Bob’s your uncle!

Maar niet dus. Hoewel ik het mij niet kon herinneren, bleek de mysql server al geïnstalleerd te zijn en, nog vreemder, er was een rootwachtwoord ingesteld. Nu ben ik, als goede systeembeheerder, nogal paranoïde, en was het dus niet onmogelijk dat ik in het verleden het wachtwoord toch had ingesteld.

Maar een goede systeembeheerder documenteert, en het ingestelde wachtwoord kwam niet overeen met het door mij gedocumenteerde mysqlwachtwoord (ik gebruik Keepassxc als wachtwoordbeheerder). Allemaal wreed vreemd.

Een mysqlwachtwoord opnieuw instellen is niet zo moeilijk, in principe, maar in dit geval wou het maar niet werken. Na een lange avond zoeken (u wil het echt niet weten), bleek deze lijn in /var/log/syslog (en niet in /var/log/mysql/error.log trouwens) het antwoord te bevatten:

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.

Tussen Ubuntu 14.04 (mijn vorige versie) en Ubuntu 16.04 (de huidige) is de standaardauthenticatieplugin van MariaDB op Ubuntu veranderd naar unix_socket. En daarom lukte het niet om het wachtwoord te wijzigen, of in te loggen met het nieuwe wachtwoord.

Om alsnog toegang te krijgen tot de server, moet u simpelweg als root (de Linuxgebruiker, niet de mysqlgebruiker) mysql -u root uitvoeren:

sudo mysql -u root

Je kan, en ik citeer, niet meer inloggen als een andere gebruiker wanneer die plugin geactiveerd is voor een bepaalde gebruiker; dus enkel root kan inloggen als root.

U moet het maar weten. Of de release notes lezen natuurlijk …

Ubuntu & AMD Radeon RX 580

Ik ben een gamer. Of beter, ik ben iemand met een game-pc. En op gezette tijden moet je die eens een upgrade geven, want anders ben je niet meer “mee” natuurlijk.

Een paar maanden geleden zijn CPU, moederbord en RAM-geheugen vervangen, nu was het de beurt aan de grafische kaart: van een nVidia GeForce 640T naar een AMD Radeon RX 580. Volgens ‘t Internet hoef je daarvoor eigenlijk niet veel te doen: oude kaart eruit, nieuwe kaart erin en klaar.

Gigabyte AMD Radeon RX 580

Was het maar waar. nVidia geeft zich niet zo eenvoudig gewonnen: bij een eerste boot is er uiteraard geen beeld en moet je eerst de nvidia-drivers verwijderen:

apt-get remove nvidia-graphics-drivers-375 && apt-get autoremove

En dan is er wel beeld. Maar toch klopt er iets niet. Een cursory check van de output van lsmod leert dat de amdgpu-driver niet is ingeladen: we gebruiken de i915_bpo-driver, wat de driver is van de embedded graphics chip van de CPU, niettegenstaande de kaart wel herkend wordt en het scherm aangesloten is op de uitgang van de kaart. Ik wist niet dat Ubuntu dat kon.

Na een tweetal avonden zoeken (ik bespaar u de details) naar hoe Ubuntu/X11 kan gedwongen worden om de amdgpu-driver te laden heb ik het helaas opgegeven: in plaats van de Open-Source-driver te gebruiken ben ik naar de site van AMD gegaan en heb daar de proprietary AMDGPU-PRO-driver gedownload en geïnstalleerd. En daarmee werkt het wel, afgezien van een vreemde lichtflits helemaal in het begin van het bootproces. Maar zo’n groot probleem is dat nu ook weer niet.

En wat doet een mens dan? Een ouderwetse game-avond organiseren natuurlijk, maar dan met de graphics maxxed-out. Allez, niet dat het bij Civilization V veel uitmaakt, maar de andere games staan op de Windowspartitie. En daar heb ik de driver nog niet geïnstalleerd …