[HOWTO] VDR Client via Netz per NFS booten (Neu: mit debootstrap Installation)

  • Da ich meinen VDR gerade auf diskless umgestellt habe (das vdr System bootet jetzt
    komplett per Netzwerkkarte via TFTP und NFS vom Fileserver - Root over NFS), hier mal
    ein kleines HOWTO, wie ich vorgegangen bin.


    Update 2007-01-27: Anmerkungen -> c. Client per debootstrap installieren


    Dazu passend:


    [HOWTO] Debian Etch mit VDR von e-tobi installieren (Schritt für Schritt)


    [HOWTO] VDR NFS Client auf Debian 5.0 lenny mit debootstrap Installation


    Update 2006-10-22: Anmerkungen -> b. Wake on Lan (WoL) mit reboot OBSOLET!


    Update 2006-02-22: Anmerkungen -> b. Wake on Lan (WoL) mit reboot - nvram-wakeup


    Update 2006-01-30: Anmerkungen -> a. Kernel-Update


    Ich habe:

    ¹ User mit älterer Hardware, bei denen das PXE booten Probleme macht, werfen bitte
    auch einen Blick in dieses Posting ff.


    Die folgenden Befehle sind grundsätzlich als User root auszuführen.



    CLIENT


    Im Kernel (ich nutze linux-2.6.20) des vdr Systems müssen folgende Optionen aktiviert sein:


    Netzwerkkartentreiber an die eigene Karte anpassen!
    Zusätzlich baue ich z.B. auch ext2(3) fest in den Kernel ein, da ich initrd nicht mag. ;)
    Das System muß mit dem neuen Kernel wie gewohnt laufen, bevor man fortfährt.



    SERVER


    Auf dem Server (Debian sarge) sind folgende Dienste zu installieren (von mir genutze Version):

    • NFS-Kernel-Server (1.0.6-3.1)
    • DHCP-Server (V3.0.1)
    • TFTP-Server (tftpd-hpa 0.40)
    • Datei pxelinux.0 (z.B. aus dem syslinux Paket)


    Aktuelle Linux-Distributionen sollten alles als fertige Pakete liefern. Derzeit nutze ich:

    Code
    1. server:/# cat /etc/debian_version
    2. 3.1


    Auf dem Fileserver (hier 172.17.42.4) erstellt man ein Verzeichnis für das vdr System:

    Code
    1. server:/# mkdir -p /netboot/nfsroot/client

    Statt client kann man einen beliebigen anderen Namen für das Verzeichnis festlegen.
    Dies muß aber bei den anderen Konfigurationsdateien berücksichtigt werden.


    Ein weiterer Vorteil ist, daß man nun relativ einfach ein komplettes Backup des vdr
    Systems erstellen kann, indem man (z.B. mit tar, cp, ...) Das Verzeichnis
    /netboot/nfsroot/client auf dem Server sichert.


    Jetzt erfolgt die Freigabe des Verzeichnisses /netboot/nfsroot/client für den vdr Client
    (hier 172.17.42.3) per NFS:

    Code
    1. server:/# cat /etc/exports
    2. #
    3. /netboot/nfsroot/client 172.17.42.3/255.255.255.0(rw,no_root_squash,no_all_squash,sync)

    nfsd HUPen oder restarten:

    Code
    1. server:# /etc/init.d/nfs-kernel-server reload


    Der tftpd wird per inetd gestartet:

    Code
    1. server:/# grep ^tftp /etc/inetd.conf
    2. tftp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.tftpd -v -v -s /var/lib/tftpboot/


    CLIENT


    Um die Daten vom Client zum Server zu kopieren, mountet man das freigegebene
    Verzeichnis auf dem Client:

    Code
    1. client:/# mkdir /mnt/server
    2. client:/# mount 172.17.42.4:/netboot/nfsroot/client /mnt/server


    Jetzt werden folgende Verzeichnisse (nach Bedarf) generiert:

    • initrd
    • media
    • mnt
    • proc
    • sys


    Code
    1. client:/# cd /mnt/server
    2. client:/# mkdir initrd media mnt proc sys


    Für das Kopieren der restlichen Verzeichnisse nutzt man z.B. mc oder einfach cp (-a):

    Code
    1. client:/# cp -a /bin /boot /dev /etc /home /lib /opt /root /sbin /srv /tmp /usr /var /mnt/server

    Wer den Kopiervorgang verfolgen möchte, tippt cp -av ...


    Jetzt muß noch die fstab den neuen Gegebenheiten angepaßt werden:

    Code
    1. client:/# cat /mnt/server/etc/fstab
    2. # /etc/fstab: static file system information.
    3. #
    4. /dev/loop/0 none swap sw,noauto 0 0
    5. server:/netboot/nfsroot/client / nfs defaults,hard,intr,rsize=65536,wsize=65536 0 0
    6. server:/video /video nfs auto,rw,nosuid,hard,intr,rsize=65536,wsize=65536 0 0

    Vorgehenswesie zur swap Einrichtung siehe weiter unten.



    SERVER


    Auszug aus der /etc/dhcp3/dhcpd.conf des Servers:


    dhcpd HUPen oder restarten:

    Code
    1. server:/# /etc/init.d/dhcp3-server restart


    In das root Verzeichnis des tftpd gehören folgende Dateien:


    vmlinuz-2.6.15-client ist eine Kopie von /netboot/nfsroot/client/boot/vmlinuz-2.6.15


    AC112A03 ist die hexadezimale Schreibweise für 172.17.42.3 (s. a. dhcpd.conf):

    Code
    1. server:/# cat /var/lib/tftpboot/pxelinux.cfg/AC112A03
    2. # client 172.17.42.3
    3. LABEL linux
    4. KERNEL vmlinuz-2.6.15-client
    5. APPEND root=/dev/nfs nfsroot=172.17.42.4:/netboot/nfsroot/client
    6. IPAPPEND 1

    Alternativ kann man statt der IP auch die MAC-Adresse in der Form
    "01-00-0e-xx-xx-xx-xx" (wichtig ist das anfängliche 01-) als Dateinamen angeben.


    In dem Thread Langsames NFS bei Diskless-Client gibt stl den Tip, darauf zu achten,
    daß der Client explizit mit NFSv3 und nicht v2 arbeitet. Dieses läßt sich dadurch erreichen,
    daß dem obigen Parameter nfsroot die Option v3 mitgegeben wird (s.a. /usr/src/linux/Documentation/nfsroot.txt).

    Code
    1. APPEND root=/dev/nfs nfsroot=172.17.42.4:/netboot/nfsroot/client,v3
    2. # ggf.
    3. # APPEND root=/dev/nfs nfsroot=172.17.42.4:/netboot/nfsroot/client,v3,rsize=32768,wsize=32768

    Überprüfen kann man die NFS Version mit dem Befehl "nfsstat -m".
    Der Performancegewinn ist erheblich:


    Jetzt den vdr Rechner herunterfahren und die Festplatte abklemmen. Dann booten und
    Daumen drücken. ;)



    CLIENT


    Ich nutze auch Swap über NFS:

    Code
    1. client:/# dd if=/dev/zero of=/var/swap bs=1k count=128K

    erstellt die Datei /var/swap mit 128MB Größe.


    Swapbereich initialisieren:

    Code
    1. client:/# mkswap /var/swap

    Ein Loopdevice generieren

    Code
    1. client:/# losetup /dev/loop/0 /var/swap

    und in die fstab eintragen:

    Code
    1. client:/# grep swap /etc/fstab
    2. /dev/loop/0 none swap sw,noauto 0 0

    Swap aktivieren:

    Code
    1. client:/# swapon -a


    Swap wird im normalen Betrieb per /etc/rc.local aktiviert:

    Code
    1. chmod 755 /etc/rc.local
    2. vi /etc/rc.local
    3. # folgendes vor exit 0 einfügen
    4. losetup /dev/loop/0 /var/swap
    5. swapon /dev/loop/0


    Mein vdr speichert die Aufnahmen im Verzeichnis /video, welches ebenfalls vom Server,
    dort läuft dafür ein aus vier HDs bestehendes Software-RAID5, exportiert wird.


    Anmerkungen


    a. Kernel-Update



    CLIENT


    Einen neuen Kernel für den diskless vdr kompiliert man wie gewohnt. Mit "make
    oldconfig" wird die alte Konfiguration auf den neuen Kernel übertragen.

    Code
    1. client:/# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2
    2. client:/# tar xjvf linux-2.6.16.tar.bz2 -C /usr/src
    3. client:/# cd /usr/src
    4. client:/usr/src# rm linux
    5. client:/usr/src# ln -s linux-2.6.16 linux
    6. client:/usr/src# cd linux
    7. client:/usr/src/linux# make oldconfig
    8. client:/usr/src/linux# make
    9. client:/usr/src/linux# make modules_install install

    Ggf. müssen bei einem Kernelwechsel auch die DVB Treiber und lirc (jeweils mit
    make distclean) neu übersetzt werden.


    SERVER


    Nach dem "make install" des Kernels auf dem Client, muß man auf dem Server noch den
    neuen Kernel in's tftpboot Verzeichnis kopieren:

    Code
    1. server:/# cp /netboot/nfsroot/client/boot/vmlinuz-2.6.16 /var/lib/tftpboot/vmlinuz-2.6.16-client

    und in die pxelinux.cfg Datei eintragen:

    Code
    1. server:/# cat /var/lib/tftpboot/pxelinux.cfg/AC112A03
    2. # client 172.17.42.3
    3. LABEL linux
    4. KERNEL vmlinuz-2.6.16-client
    5. APPEND root=/dev/nfs nfsroot=172.17.42.4:/netboot/nfsroot/client,v3
    6. IPAPPEND 1


    b. Wake on Lan (WoL) mit reboot - nvram-wakeup



    CLIENT


    Das Motherboard PC-Chips M811 schaltet sich mit meiner Intel Netzwerkkarte nach einem
    "shutdown -h now" derart ab, daß der Rechner nicht mehr per "Wake on Lan" (WoL)
    aktiviert werden kann.


    Dieses Manko existiert ab Kernel 2.6.18 nicht mehr (eventuell auch früher). Der Rechner
    läßt sich nach einem "shutdown -h now" problemlos per WoL wecken. Der hier geschilderte
    Workaround ist somit obsolet.


    Mit ethtool ließ sich das Problem leider nicht beheben.
    Durch einen Workaround läßt sich WoL aber trotzdem realisieren. Mittels des DOS
    Programmes atxoff.com schaltet sich der Rechner jetzt so aus, daß er per WoL wieder
    geweckt werden kann. Das Problem bei einem diskless System ist, daß sich diesem das
    Programm nicht per Bootloader (lilo, grub,...) unterschieben läßt. Vielmehr muß dem
    Server des diskless Rechners mitgeteilt werden, daß beim nächsten Booten atxoff.com
    gestartet werden soll. Dieses wird nun dadurch realisiert, daß der Client per SSH ein Skript
    auf dem Server startet, welches temporär die zu bootende Datei ändert.


    Als User root wird ein SSH Schlüsselpaar mit leerer Passphrase generiert.
    Anschließend kopiert man den öffentlichen Schlüssel auf den Server und fügt diesen der
    Datei ".ssh/authorized_keys" des Nutzers user zu hinzu. Nun kann sich root vom Client auf
    dem Server mittels SSH ohne Passwort einloggen. Im lokalen Netz ist diese
    "Sicherheitslücke" vertretbar.

    Code
    1. root@client:~$ ssh-keygen -t dsaroot@client:~$ scp .ssh/id_dsa.pub user@server:.root@client:~$ ssh user@server "[ ! -d .ssh ] && mkdir .ssh; cat id_dsa.pub >> .ssh/authorized_keys; chmod 600 .ssh/authorized_keys; rm id_dsa.pub"


    SERVER


    Auf dem Server wird der User, der vom Client per SSH genutzt wird, in die Gruppe "adm"
    eingetragen. Ich nutze dies, damit ich auch als normaler User z.B. Logs lesen kann:

    Code
    1. server:/# vigrserver:/# grep ^adm: /etc/groupadm:x:4:userserver:/# chgrp adm /var/lib/tftpboot/pxelinux.cfgserver:/# chmod 775 /var/lib/tftpboot/pxelinux.cfg

    Nun wird die zuvor geladene Datei atxoff.com nach /var/lib/tftpboot/ kopiert:

    Code
    1. server:/# cd /var/lib/tftpboot/server:/# ls -la atxoff.com-rw-r--r-- 1 root root 57 Feb 9 12:24 atxoff.com

    Als nächstes erstellen wir zwei Konfigurationsdateien für das PXE booten:

    Code
    1. server:/# cd /var/lib/tftpboot/pxelinux.cfg/server:/# ls -la-rw-rw-r-- 1 root adm 305 Feb 10 20:50 01-00-0e-xx-xx-xx-xx-rw-rw-r-- 1 root adm 212 Feb 9 12:27 01-00-0e-xx-xx-xx-xx.atxoff-rw-rw-r-- 1 root adm 305 Feb 10 20:49 01-00-0e-xx-xx-xx-xx.kernel

    Die Zeichenfolge "00-0e-xx-xx-xx-xx" entspricht der MAC der Netzwerkkarte des diskless
    Rechners. Die Dateien haben folgende Inhalte:

    Code
    1. server:/# cat 01-00-0e-xx-xx-xx-xx# client 172.17.42.3LABEL linux KERNEL vmlinuz-2.6.15.5-client APPEND root=/dev/nfs nfsroot=172.17.42.4:/netboot/nfsroot/client IPAPPEND 1server:/# cat 01-00-0e-xx-xx-xx-xx.atxoff# client 172.17.42.3LABEL linux KERNEL atxoff.comserver:/# cat 01-00-0e-xx-xx-xx-xx.kernel# client 172.17.42.3LABEL linux KERNEL vmlinuz-2.6.15.5-client APPEND root=/dev/nfs nfsroot=172.17.42.4:/netboot/nfsroot/client IPAPPEND 1

    "01-00-0e-xx-xx-xx-xx.kernel" ist die normale Bootconfiguration, die den Kernel lädt.
    "01-00-0e-xx-xx-xx-xx.atxoff" veranlaßt die Netzwerkkarte atxoff.com zu booten und
    auszuführen. Dies bewirkt das sofortige Abschalten des diskless Rechners. Dieser ist
    dann problemlos per WoL aufweckbar. "01-00-0e-xx-xx-xx-xx" ist die jeweils aktuelle
    Config-Datei und wird durch das gleich vorgestelle Skript eingestellt.


    Jetzt wird die Datei " vdr_atxoff_workaround.sh" generiert, welche die Umschaltung
    der PXE Configdateien vornimmt. Sie hat folgende Rechte und Inhalt:

    Code
    1. server:/# ls -la /usr/local/sbin/vdr_atxoff_workaround.sh-rwxr-x--- 1 root adm 247 Feb 9 12:40 /usr/local/sbin/vdr_atxoff_workaround.shserver:/# cat /usr/local/sbin/vdr_atxoff_workaround.sh#!/bin/shcp /var/lib/tftpboot/pxelinux.cfg/01-00-0e-xx-xx-xx-xx.atxoff /var/lib/tftpboot/pxelinux.cfg/01-00-0e-xx-xx-xx-xxchmod 644 /var/lib/tftpboot/pxelinux.cfg/01-00-0e-xx-xx-xx-xxsleep 60cp /var/lib/tftpboot/pxelinux.cfg/01-00-0e-xx-xx-xx-xx.kernel /var/lib/tftpboot/pxelinux.cfg/01-00-0e-xx-xx-xx-xxchmod 644 /var/lib/tftpboot/pxelinux.cfg/01-00-0e-xx-xx-xx-xx


    CLIENT
    Jetzt kann der Client heruntergefahren werden, bootet automatisch atxoff.com und ist
    per WoL aufweckbar:

    Code
    1. client:/# ssh user@server -f "/usr/local/sbin/vdr_atxoff_workaround.sh &"client:/# reboot


    nvram-wakeup mit reboot ist nach obiger Einrichtung nun problemlos möglich. Beispiel:

    Code
    1. client:/# nvram-wakeup --directisa --configfile /etc/nvram-wakeup.conf --settime $((`date +%s` + 601))client:/# ssh user@server -f "/usr/local/sbin/vdr_atxoff_workaround.sh &"client:/# reboot

    Zeile 1 setzt die Weckzeit des Motherboards 601 Sekunden in die Zukunft. Zeile 2 startet
    auf dem Server das Skript vdr_atxoff_workaround.sh, welches nach dem reboot aus Zeile 3
    den Client mittels atxoff.com abschaltet. Neustart erfolgt nun durch das nvram oder WoL.


    Das oben erwähnte M811 von PC-Chips benötigt für nvram-wakeup keinen Reboot.
    Siehe auch hier.


    c. Client per debootstrap installieren



    SERVER


    Alternativ zur Installation des Clients auf eine Festplatte und das daran anschließende Umkopieren
    auf den Server, kann man den Client mit debootstrap auch direkt auf dem Server installieren. Auf
    dem (Debian) Server wird dazu das Paket debootstrap aufgespielt.

    Jetzt noch auf dem Server tftp passend konfigurieren (s.o.) und das neue System kann
    vom diskless Client gebootet werden.



    Hilfreiche Quellen:
    http://syslinux.zytor.com/pxe.php
    http://www.linuxdevices.com/articles/AT5834950453.html
    http://www.faqs.org/docs/Linux…root-NFS-other-HOWTO.html
    Optimizing NFS Performance


    Tips von MAK:
    Plattenloses Linux
    HOWTO set up a Network with Diskless Workstations using Debian GNU/Linux
    Dateien vorbereiten für TFTP-Netzwerk-Boot
    Booten und Konfiguration im Netz
    LTSP - Linux Terminal Server Project - v3.0


    Links zu nvram-wakeup:
    http://www.linux-magazin.de/Ar…004/08/wakeup/wakeup.html
    http://www.vdr-wiki.de/wiki/index.php/NVRAM_WakeUp
    http://www.hubertus-sandmann.h…-online.de/vdr_wakeup.htm

  • Super HowTo! Genau das was ich gesucht habe :)


    Eins versteh ich aber nicht ganz:


    Zitat

    Zusätzlich baue ich z.B. auch ext2(3) fest in den Kernel ein, da ich initrd nicht mag. Augenzwinkern


    Kannst du das etwas genauer erklären?


    Danke dir!


    Gruß,


    Flasher

  • Zitat

    Original von Flasher_84


    Kannst du das etwas genauer erklären?


    Zum einen vergesse ich normalerweise, initrd.img zu bauen ;)
    Und zum anderen konfiguriere ich die Kernel, wenn ich sie schon selbst baue, gewohnheitsmäßig so, daß alles wichtige zum Hochfahren und was sich eh nicht ändert schon enthalten ist.

  • Hallo kilroy


    Vielen Dank für deine ausführliche Anleitung.
    Ich spiele gerade mit dem Gedanken einen Thin-Client zu bauen, da kommt deine Anleitung wie gerufen.


    Gruss
    Accom

    P5E-V HDMI, 4GB Ram, 60GB SSD & 500 GB HDD, DVD-Brenner, Salteco, Asus Bravo 220
    Debian Squeeze, VDR e-Tobi

  • Hallo,
    danke für dies HowTo. Da ich mir auch einen Diskless-Clienten basteln möchte, lese ich mich gerade in diese Thematik ein.
    Hier meine momentane Liste mit paar vielleicht nützlichen Links:
    Plattenloses Linux
    HOWTO set up a Network with Diskless Workstations using Debian GNU/Linux
    Dateien vorbereiten für TFTP-Netzwerk-Boot
    Booten und Konfiguration im Netz
    LTSP - Linux Terminal Server Project - v3.0
    Wer weiter nützliche Links hat, bitte posten.
    Gruß MAK


    Thomas

    Zitat

    Macht es aus Eurer Sicht sinn, dieses HOWTO sticky zu machen?

    Nur mal für Dummies, was heißt "sticky zu machen"? :versteck


    VDR - VDR mit XBMC - MythTV

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von MAK ()

  • Zitat

    Original von MAK
    Hier meine momentane Liste mit paar vielleicht nützlichen Links:
    ...


    Wenn Du nichts dagegen hast, übernehme ich die Links in das Howto.

  • Zitat

    Original von MAK
    unter welcher Distri hast du den Server laufen?
    Welchen DHCP-Server hast du installiert? dhcp3?
    Kannst du mal die ganze dhcpd.conf posten?


    Distribution:

    Code
    1. cat /etc/mandrake-release
    2. Mandrakelinux release 10.1 (Official) for i586

    Ich wechsle aber demnächst zu Debian, da mir Mandrakes (bzw. Mandrivas)
    "Update-Politik" nicht gefällt. Für ältere Systeme werden sehr schnell keine
    Sicherheits-Updates mehr zur Verfügung gestellt und ich habe keine Lust, alle halbe Jahr den
    Server neu aufzusetzen. Mandriva ist halt eher 'was für den Desktop; aber da hat bei mir
    jetzt Ubuntu Einzug gehalten. ;)


    dhcp-server Version:

    Code
    1. rpm -qi dhcp-server
    2. Name : dhcp-server Relocations: (not relocatable)
    3. Version : 3.0.1 Vendor: Mandrakesoft


    dhcpd.conf:

  • Danke für das Howto!


    Um meinen NIC zum laufen zu bewegen, musste ich noch hier


    die IP Adresse des Servers mitgeben, um bei deinem Beispiel zu bleiben also:


    next-server 172.17.42.4


    Gruß

  • Zitat

    Original von diedl2003
    next-server 172.17.42.4


    Aufpassen!
    Manche (ältere) Implementierungen akzeptieren diesen Parameter auf Clientseite nicht und versuchen, die Dateien vom dem gleichen Server zu holen, von dem sie ihre IP-Adresse bekommen haben. Je nach Umgebung sollte man also DHCP und TFTP-Server auf einem Server zusammenfassen.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Zitat

    Aufpassen!

    ...das ist immer gut ;)


    Mein Problem war, dass pxelinux.0 gefunden wurde jedoch anschliessend nicht das config file in pxelinux.cfg, obwohl dhcpd und tftpd auf dem gleichen Server laufen. Ethereal und ein Blick in /usr/share/doc/syslinux/pxelinux.doc brachte mir diese Erkenntnis...

  • bei wem die NIC kein PXE unterstützt, kann auch einfach von http://rom-o-matic.net/ ein entsprechendes Etherboot Image für Grub/Lilo ziehen. Das dann einfach wie einen normalen Linux-Kernel einbinden und schon klappt es. ^^
    Kann man halt auf eine Diskette oder HD (die man danach in Standby schickt) packen.

  • Zitat

    Original von LinTV-Fan
    Kriegt das man auch mit einem Windows Server hin ??


    Wenn Du Deinem Server die folgenden Sachen beibringst, ist das kein Thema:


    -DHCP-Server
    -TFTP-Server
    -NFS-Server


    :D


    "Das, was man bei Windows als vollständiges Betriebssystem bezeichnet, entspricht einer Linux-Rescuedisk." ;D

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Hierüber bin ich mal gestolpert:

    Code
    1. http://tftpd32.jounin.net: Tftpd32 includes DHCP, TFTP, SNTP and Syslog servers as well as
    2. a TFTP client. The TFTP client and server are fully compatible with TFTP option support
    3. (tsize, blocksize and timeout), which allow the maximum performance when transferring
    4. the data.
    5. ...

    NFS Server gibt's auch für Windows. Meist kosten die aber etwas...

  • Zitat

    Original von kilroy
    ...NFS Server gibt's auch für Windows. Meist kosten die aber etwas...


    Auch, wenn Du es zuerst nicht glaubst. Es gibt einen, der ist so richtig kostenlos. Und der ist sogar von Microsoft. Original ;D


    Gibt's also bei Microsoft Deutschland


    Das Teil funktioniert sogar recht gut.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von knebb ()