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.

Dienstag, 1. Mai 2012

GT210 und S/PDIF-Ausgabe

Die Soundausgabe vom VDR soll über den internen S/PDIF-Ausgang ausgegeben werden. Dazu muss erst einmal die Soundkarte im BIOS aktiviert werden.

Im Linux System wird dann mittels "aplay -l" die gefundene Hardware gezeigt:


**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: ALC887-VD Analog [ALC887-VD Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: SB [HDA ATI SB], device 1: ALC887-VD Digital [ALC887-VD Digital]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Hier kann man erkennen, dass der digitale Ausgang vom Mainboard mit den Daten "card0, device 1" angegeben wird.

In der

         /root/.xine/config_xineliboutput

sind die oben gefundenen Parameter anzupassen:

audio.device.alsa_default_device:hw:0,1
audio.device.alsa_front_device:hw:0,1
audio.device.alsa_passthrough_device:hw:0,1
audio.device.alsa_surround40_device:hw:0,1
audio.device.alsa_surround51_device:hw:0,1

Die /etc/asound.conf muss ebenfalls angepasst werden:

pcm.!default {
        type hw
        card 0
        device 1
}

Ein anschliessender Neustart des Systems liefert den Sound nun über den optischen Ausgang.

Wenn der Ton über HDMI (z.B. wenn das Kabel an den Fernseher geht) ausgegeben werden soll, müssen die oben genannten Parameter gegen hw:0,7 ersetzt werden.




Sonntag, 29. April 2012

PXE-Boot von Diskstation

Auf meiner Diskstation ist ein PXE-Boot Environment eingerichtet. Dieses habe ich nach dieser Anleitung eingerichtet. Der TFTP-Server im Netz wird mittels inetd gestartet und wird wird in der /etc/inetd.conf eingetragen:

tftp    dgram   udp     wait    root    /opt/sbin/in.tftpd      /opt/sbin/in.tftpd -s /volume1/tftpboot -m /opt/etc/tftp_remap.conf

Der Betrieb vom xinetd-Service wird mittels

/usr/syno/etc/rc.d/S03inetd.sh {stop | start | restart }

gesteuert.

Der DHCP-Server wird mittels

/opt/etc/init.d/S56dhcp {stop | start | restart }

gesteuert, so dass neue Clients eine IP aus dem konfiguriertem Netzsegment bekommen.
Die Konfig des dhcp-Servers befindet sich unter

/opt/etc/dhcpd.conf

und hat bei mir folgenden Inhalt:

# dhcpd.conf
################ added ###################
ddns-update-style none;
ddns-updates off;

allow booting;
allow bootp;

#  Adresse des Routers
option domain-name-servers 192.168.x.1;

# Subnetz und Maske
subnet 192.168.x.0 netmask 255.255.255.0 {

   option subnet-mask 255.255.255.0;
   option routers 192.168.x.1;
   option domain-name "fritzi";
   option perform-mask-discovery false;
   option router-discovery false;
                 
  # IP-Bereich der für den DHCP-Server verwendet wird:
   range dynamic-bootp 192.168.x.100 192.168.x.110;
   default-lease-time 21600;
   max-lease-time 43200;

   # IP der Diskstation
   next-server 192.168.x.7;
   # Dateiname des Programmes für das Bootmenü
  filename "/pxelinux.0";
}

Nun kann ein Client mittels PXE-Boot im Netz installiert werden.