Dienstag, 30. Oktober 2012

pxe-boot auf NSA325

Ich brauchte mal einen PXE Installationsserver auf dem Zyxel NSA325 und habe dazu ein wenig installiert.

Dazu gibt es (natürlich wie immer) mehrere Wege. Ich habe den Weg mittels "dnsmasq" gewählt, weil dieses Paket einen dns, dhcp und tftpboot Server bereitstellt.

Als Voraussetzung dazu ist die Installation vom FFP 0.7 auf einem USB-Stick. Das erkläre ich hier nicht, denn dazu gibt es diese Webseite.

Zu erst werden die benötigten Verzeichnisse und Dateien auf dem NAS erstellt. Ich habe dazu unterhalb von /i-data/973e0988 das Verzeichnis tftpboot erstellt. Hier liegen nachher alle relevanten Dateien zum PXE-Boot und zur Installation von Betriebssystemen.

In "tftpboot" kommt zuerst ein aktuelles "pxelinux.0" aus dem Paket syslinux-4.06.tar.gz von kernel.org. Ebenso wird aus dem Paket die Datei "vesamenu.32" hinkopiert. Damit wird ein grafisches Auswahlmenü erzeugt.  Dann wird das Verzeichnis pxelinux.cfg erstellt und darin später die Menüdatei "default" angelegt.

dnsmasq muss nun aber erst einmal den Weg in das System finden.  Mittels "slacker -Ui " wird das Paket "dnsmasq-2.62" aus dem Repo vom Uli installiert. Dann unter /ffp/etc/ die Datei "dnsmasq.conf" anlegen. Den habe ich in zwei Bereiche aufgeteilt:

  • tftpboot
  • dhcp
Der Erste Teil für tftpboot sieht folgendermassen aus:

### tftp-part
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/i-data/973e0988/tftpboot

und ist relativ selbsterklärend. Das war im Bereich tftpboot auch schon alles. Etwas trickreicher ist da schon die Einrichtung des dhcp-Servers, der im unteren Teil der "dnsmasq.conf" kommt:

### dhcp-part
domain-needed
bogus-priv
no-resolv
no-poll
server=8.8.8.8
local=/fritz.box/
address=/fritz.box/127.0.0.1
no-hosts
addn-hosts=/etc/hosts
expand-hosts
dhcp-range=192.168.x.200,192.168.x.220,1h
dhcp-option=option:router,192.168.x.1              
dhcp-option=19,0

Wenn der Service beim starten des NAS zur Verfügung stehen soll, wird das Startscript "dnsmasq.sh" im Verzeichnis /ffp/start mittels "chmod a+x" aktiviert. 

Das Startskript selbst sieht so aus:
----
#!/ffp/bin/sh
# PROVIDE: dnsmasq
# REQUIRE: LOGIN
. /ffp/etc/ffp.subr
name="dnsmasq"
command="/ffp/sbin/$name"
dnsmasq_flags="-C /ffp/etc/dnsmasq.conf --log-facility=/ffp/var/log/dnsmasq.log"
run_rc_command "$1"
----
und wurde um die Einträge zum laden der Konfigdatei "-C /ffp/etc/dnsmasq.conf"  sowie dem Logging "--log-facility=/ffp/var/log/dnsmasq.log" erweitert.

Nun folgt ein erster Test, in dem der dnsmasq gestartet wird:

/ffp/start/dnsmasq.sh start


Dieser sollte dann einen Logeintrag in der Art und Weise wie
----

Oct 30 10:16:00 dnsmasq[32272]: started, version 2.62 cachesize 150
Oct 30 10:16:00 dnsmasq[32272]: compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack
Oct 30 10:16:00 dnsmasq-dhcp[32272]: DHCP, IP range 192.168.x.200 -- 192.168.x.220, lease time 1h
Oct 30 10:16:00 dnsmasq-tftp[32272]: TFTP root is /i-data/973e0988/tftpboot 
Oct 30 10:16:00 dnsmasq[32272]: using local addresses only for domain fritz.box
Oct 30 10:16:00 dnsmasq[32272]: using nameserver 8.8.8.8#53
Oct 30 10:16:00 dnsmasq[32272]: read /etc/hosts - 2 addresses
----
erzeugen.

Nun muss noch ein boot-Menü erzeugt werden. Dazu wird im Verzeichnis pxelinux.cfg die Datei "default" erstellt und das Menü eingerichtet. Als erstes möchte ich gern ein Ubuntu aus dem Netz zur Verfügung stellen. Die Einträge dazu sehen wie folgt aus:
----

UI vesamenu.c32
prompt 10
menu title  Meine Installationsauswahl
timeout 6000

label lokal
        menu label  Booten von lokaler Festplatte
        LOCALBOOT 0


LABEL ubuntu11
        MENU LABEL Ubuntu 11.4 NetInstall
        kernel ubuntu-installer/i386/boot-screens/vesamenu.c32
        append ubuntu-installer/i386/boot-screens/menu.cfg


----
Die entsprechenden Unterverzeichnisse wurden unterhalb von tftpboot angelegt sowie die benötigten Dateien von der Ubuntu-Net-Installtion dort hineinkopiert.

Nun kann erstmals eine VM mittels PXE gebootet werden. Bei erfolgreicher Verbindung zum NSA wird dann pxelinux.0 geladen und die Installation beginnt.

Hilfreiche Hinweise zur dnsmasq-Konfiguration habe ich von hier erhalten und umgesetzt.