Beiträge von kasimodo

    Dann kann ich das Zertifikat dort exportieren und in das QNAP importieren und fertig.


    Toll wäre es wenn man dies dann auch noch mit einem Script machen könnte. (vom NAS aus)


    Grüße

    Kasimodo


    ps: bei meiner alten Fritte kann ich über ein Script vom NAS aus Ports öffnen und schließen. Leider habe ich dies für die neuere Firmware nicht hin bekommen.

    Raspberry Pi - PXE Boot von Qnap NAS


    Vorbereitungen SD-Karte und Raspberry Pi


    Übertragt wie gewöhnlich das aktuelle Rasbian lite Image(oder ein anderes) auf eine SD-Karte.

    Tipp: Noch eine leere Datei "ssh" in der ersten Partition anlegen! -> aktiviert den Zugriff über ssh (Putty/Winscp)

    Bootet nun euren Pi und führt eine Grundkonfiguration mit raspi-config durch.


    Danach wechselt ihr auf das next-Release:


    Code
    sudo apt-get update; sudo apt-get install rpi-update
    sudo BRANCH=next rpi-update


    - ermitteln der Seriennummer und macadresse eures Pi:


    sudo cat /proc/cpuinfo|grep Serial

    Code
    pi@raspberrypi:~ $ sudo cat /proc/cpuinfo|grep Serial
    Serial          : 00000000ccfc0bd9


    sudo cat /sys/class/net/eth0/address

    Code
    pi@raspberrypi:~ $ sudo cat /sys/class/net/eth0/address
    b8:27:eb:fc:0b:d9


    Beide Werte notieren!

    Sie werden zum einen in der dhcpd.conf und zum anderen in der Verzeichnisstruktur gebraucht!


    Für Raspberry Typ 3 :


    Anschließend fügt ihr mit dem nachfolgenden Befehl am Ende der Datei "/boot/config.txt" noch eine Zeile hinzu (program_usb_boot_mode=1) :


    echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt


    und startet danach den Pi neu!


    Nach erfolgtem Neustart könnt ihr die Zeile wieder aus der Datei entfernen. Führt nun zur Sicherheit folgenden Befehl aus:


    vcgencmd otp_dump | grep 17:


    Code
    pi@raspberrypi:~ $ vcgencmd otp_dump | grep 17:
    17:3020000a


    Die Ausgabe sollte „17:3020000a“ entsprechen. Somit hat alles geklappt. Euer RasPi-Typ 3 ist nun auf dem next-Release und grundsätzlich Netzwerk Boot-fähig.


    Für alle andern Raspberry (außer Typ 3) :

    Diese benötigen für den PXE Boot eine mit FAT32 formatierte SD Karte auf der als einzige Datei die (aktuelle) bootcode.bin ist!


    Vorbereitung auf dem Qnap NAS


    Für mein Setup hatte ich mir folgende Bedingungen gesetzt:

    - keine zusätzlichen Pakete bzw. Apps / alles soll nur mit in der Firmware bereits vorhandenen Programme laufen

    - alle benötigten Konfigurationen und Dateien in einem Freigabeordner (auch NFS)

    - Möglichkeit der Aktualisierung der Raspi Software incl.Firmware (boot)



    1. Im Webinterface / ControlPanel

    Anlegen eines Freigabeordners (pxeroot) im Webinterface (Systemsteuerung/Rechte/Freigabeordner)

    Berechtigung für Freigabeordner bearbeiten / NFS-Hostzugriff /Zugriffrecht - Keine Beschränkung

    Wichtig! - Den DHCP Server und den TFTP Server NICHT im Webinterface aktiv setzen!!


    2. Verzeichnisstruktur in /share/pxeroot anlegen und Dateien erstellen bzw. kopieren


    Datei "bootcode.bin" wird von der SD Karte nach "pxeroot" kopiert.


    Verzeichnis "conf" enthält alle Konfigurationsdateinen und das Startscript (pxe.sh)


    pxe.sh

    Wichtig! - wenn ihr eine andere Verzeichnisstruktur wählt, dann die Variable "PXECONF" anpassen!

    Datei auf "ausführbar" setzen!


    dhcpd.conf (muss natürlich auf eure Umgebung angepasst werden)


    opentftpd.ini

    Wichtig! - wenn ihr eine andere Verzeichnisstruktur wählt, dann die Variable [HOME] anpassen!


    Jetzt kann DHCP und TFTP mit dem Script "pxe.sh" gestartet werden.


    /share/pxeroot/conf/pxe.sh start


    Der vollständige Path muss nur beim erstmaligen Start angegeben werden.

    Später reicht der Aufruf pxe.sh restart da ein Symlink "/bin/pxe.sh" angelegt wird.


    ob der DHCP Dienst läuft - ps -e|grep dhcpd

    ob der TFTPDienst läuft - ps -e|grep tftp



    Test TFTPDienst

    unter Linux auf dem NAS -  tftp -g -r bootcode.bin 127.0.0.1

    Code
    [~] # tftp -g -r bootcode.bin 127.0.0.1
    [~] # ls bootcode.bin
    bootcode.bin


    auf einem Windows Client - tftp 10.128.5.184 get bootcode.bin

    Code
    C:\Users\Administrator>tftp 10.128.5.184 get bootcode.bin
    Übertragung erfolgreich: 52116 Bytes in 1 Sekunde(n), 52116 Bytes/s


    Auch im TFTP Logfile unter "pxeroot/conf" sieht man ob ein Get File erfolgreich war!


    Zum jetzigen Zeitpunkt kann man schon mal seinen Pi über PXE starten.

    Wenn DHCP und TFTP fehlerfrei laufen, dann kann man die Seriennummer vom Pi in der "opentftpd.log" finden. Damit hat man dann gleich den richtigen Name für den Symlink aus Seriennummer!


    aus meinem Logfile die wichtige Zeile mit der Seriennummer(hier ^^^^) :

    Code
    Client 10.128.5.190:49153 /share/pxeroot/0e81e887/start.elf, No Such File/No Access
    .                                        ^^^^^^^^


    Wenn beide Dienst fehlerfrei laufen dann realisiert man den Autostart der Dienste durch folgenden Eintrag am Ende der "/etc/config/qpkg.conf"


    PI Software kopieren und anpassen


    Das Verzeichnis "pxeroot/raspi" enthält für jeden Raspi bzw. Pi-Betriebssystem ein eigenes Unterverzeichnis. Dies ist gleichzeitig das NFS Root Verzeichnis

    Welches Verzeichnis zum Booten benutzt, dies wird über den jeweiligen Symlink (Seriennummer vom Raspi) in "pxeroot" bestimmt. Der Symlink "Seriennummer" in "pxeroot" verweist immer auf das Verzeichnis "boot" in dem Raspi Software Root Verzeichnis. ( siehe Verzeichnisstruktur oben im Beitrag)


    Das Linux Root Verzeichnis von der zweiten Partition auf der SD Karte wir in dieses Verzeichnis kopiert.

    Das Kernel Verzeichnis von der ersten Partition (Fat32) auf der SD Karte wird dann in das Unterverzeichnis "boot" kopiert!

    Achtung! - wer DietPi benutzt, der muss noch alle Dateien unter "boot/dietpi" auf "ausführbar" setzen!


    Jetzt sollte eure Verzeichnisstruktur so ähnlich aussehen:


    tree.jpg



    Anpassen der Datei "boot/cmdline.txt" :

    in dieser Datei root=/dev/mmcblk0p2 rootfstype=ext4 ersetzen durch

    nfsroot=10.128.5.184:/pxeroot/raspi/PiJuergen,tcp,v3 vers=3 rw ip=dhcp 

    (natürlich euren Verzeichnispath benutzen)


    Anpassen des Filesystem Table (etc/fstab)

    Da im Standard die Konfiguration der Datei fstab auf die SD-Karte für die root bzw. boot-Partition verweist, muss das natürlich auch noch geändert werden:

    Wichtig ist vor allem, dass ihr die Verweise auf die SD-Karte auskommentiert.


    Hier Beispiel Inhalt einer fstab (Auszug):

    Code
    proc            /proc           proc    defaults          0       0
    #/dev/mmcblk0p1  /boot           vfat    defaults          0       2
    #/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1


    So, nun sollte euer Raspi über PXE starten und auch sein Filesystem finden!

    Vergesst nicht die SD Karte mit der "bootcode.bin" bei allen Raspi außer Version 3!



    Quelle u.a. : http://www.do-it-neat.com/open…berry-pi-pxe-boot-teil-1/


    Diskussion und Fragen hier:

    PXE für Raspberry

    Eine andere Möglichkeit die Seriennummer und damit den richtigen Verzeichnisname zu finden:


    ist Tftp Start mit logging (eine zeile)


    opentftpd -i /share/CACHEDEV1_DATA/.qpkg/pxe/opentftpd.ini -l  /share/CACHEDEV1_DATA/.qpkg/pxe/opentftpd.log


    aus meinem Logfile die wichtige Zeile mit der Seriennummer(hier ^^^^) :

    Code
    Client 10.128.5.190:49153 /opt/tftpraspi/0e81e887/start.elf, No Such File/No Access
                                             ^^^^^^^^

    Laurenzis


    Zum Thema - jeder Raspi sein eigenes System über PXE Boot


    ermitteln zunächst die Seriennummer aller deiner Raspi

    Code
    pi@raspberrypi:~ $ cat /proc/cpuinfo|grep Serial
    Serial          : 000000002b77834d



    Die Datei bootcode.bin legst du direkt in TFTP Root, alle anderen Dateien aus dem Boot Verzeichnis des jeweiligen Raspi kommen in das Unterverzeichnis, dessen Namen sich aus der Seriennummer des Client-Pi ableitet,

    in diesem Fall in das Unterverzeichnis "2b77834d".


    nun kann man für jeden Raspi noch die cmdline.txt anpassen und somit unterschiedliche Systeme booten


    Code
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=<NFS-SERVER>:/<NFS-FREIGABE>,tcp,v3 vers=3 rw ip=dhcp rootwait elevator=deadline fsck.repair=yes splash

    bb & Grüße

    Kasimodo

    Hallo Lauri,


    leider konnte ich erst heute deinen Beitrag und von deine Bemühungen lesen.

    Ich hatte schon meine dhcpd.conf in der Zwischenablage um sie hier einzustellen und habe dann erst deine letzten Zeilen gelesen.


    Top und Anerkennung - du hast den entscheidenden Punkt selbst gefunden und hier gut dokumentiert!


    Dafür DANKE!


    Grüße Kasimodo


    Ps: kannst du deine dhcpd.conf noch mal vollständig posten

    Den DHCP Server und den TFTP Server NICHT im Webinterface aktiv setzen!!


    Verzeichnis erstellen z.B. "/share/CACHEDEV1_DATA/.qpkg/pxe"

    In dieses Verzeichnis kommen die Konfigurationsdateinen und spätere auch das Startscript!

    Konfiguration anlegen und durch manuellen Start von opentftpd und dhcpd testen ob alles funzt.

    (siehe Aufruf im Script Beispiel)


    Bash
    #!/bin/sh
    #Startscript tftp/dhcpd fuer PXE
    
    opentftpd -i /share/CACHEDEV1_DATA/.qpkg/pxe/opentftpd.ini
    dhcpd -cf /share/CACHEDEV1_DATA/.qpkg/pxe/dhcpd.conf -lf /share/CACHEDEV1_DATA/.qpkg/pxe/dhcpd.leases



    Wenn alle Test erfolgreich dann am Ende in "/etc/config/qpkg.conf" einfügen





    Dann NAS neu starten!


    Mit dieser Methode benötigst du keinerlei zusätzliche Software auf deinem NAS.

    Das Wissen um die Einrichtung von TFTP und DHCP habe ich als gegeben angenommen.


    Das Script ist nur ein Beispiel! Man kann es auch "schöner" machen.

    Hallo,


    du meinst bei einem Anschluss einer USB HD?


    Wenn dem so ist, dann sind die Stichworte "udev rules usb hdd"


    Damit findest du Beispiele für das Anlegen eigener UdevRules. mit diesen kannst du dann alles starten was du möchtest.


    z.B. deine HDD wird als "sdu" angesprochen (siehst du bei Eingabe von "mount" auf der Konsole


    so findest du relevanten Infos zum Ansprechen:

    Code
    [~] # udevadm info --query all --path /sys/block/sdu --attribute-walk |grep model
    ATTRS{model}=="HM160HC         "
    [~] # udevadm info --query all --path /sys/block/sdu --attribute-walk |grep serial
    ATTRS{serial}=="DEF10B8C2B8F"
    [~] # udevadm info --query all --path /sys/block/sdu --attribute-walk |grep vendor
    ATTRS{vendor}=="SAMSUNG "



    Hier Beispiele für die Einträge in den Rules:


    Code
    KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="HM160HC", SYMLINK+="usbhd%n"
    
    KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{serial}=="DEF10B8C2B8F" , ACTION=="add", RUN+="/pfad/Script-start"
    KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{serial}=="DEF10B8C2B8F" , ACTION=="remove", RUN+="/pfad/scrip-stop"


    mfg kasimodo

    So kann ich den DHCP immer Starten


    dhcpd -cf /share/CACHEDEV1_DATA/.qpkg/DHCP/dhcpd.conf -lf /share/CACHEDEV1_DATA/.qpkg/DHCP/dhcpd.leases

    Und warum trägst du diese Zeile nicht in das Script ein?????


    Ich hatte dir doch geschrieben das du im Beispielskript die Verzeichnisse entsprechend deiner Situation anpassen musst! :handbuch:



    Und hier in deiner Konsolenausgabe steht doch eindeutig in Zeile 6 warum es nicht funktioniert! :handbuch:


    Auch wenn ich ab und an nicht mit der Firmware von QNAP zufrieden bin, so hat das nicht funktionieren meiner dir vorgeschlagenen Lösung hier nichts mit QNAP zu tun! :qnap: