Raspberry Pi 3 per Netzwerk flashen

  • Hallo zusammen,
    kurz zum Hintergrund, es sollen 20 Raspberry Pi3 in unterschiedlichen Übungen eingesetzt werden. Um möglichst komfortabel das System der Pis zwischen den Übungen anpassen zu können, wird eine Lösung gesucht, per Netzwerk ein definiertes Image auf die SD-Karte zu schreiben.


    Hat jemand da schon mal etwas gesehen? Google spuckt mir nur allgemeines zum Netzwerkboot für Pis raus.


    Die Grundidee ist jetzt, den Pi per Netzwerk mit einem Minimalsystem (z.B. tinycore http://distro.ibiblio.org/tinycorelinux/ports.html) zu booten, und dann darüber ein ebenfalls im Netzwerk liegendes Image auf die SD-Karte zu schreiben.
    Die entsprechende Software (isc-dhcp-server, und atfpd (ein TFpt-Server)) ist bereits für andere Aufgaben im Netzwerk auf einem Server vorhanden.


    Dazu jetzt folgende zwei Fragen:
    Kennt jemand eine ähnliche/fertige Lösung dafür?
    Kann man beim Pi die Bootreihenfolge ändern? (Ich hatte mal gelesen, dass der default mäßig erst die SD-Karte betrachtet, dann USB und dann Netzwerk; Quelle gerade leider nicht mehr gefunden)


    Viele Grüße
    ChrisvA



    PS: Immer per Netzwerkboot zu starten geht nicht, da die Ethernetschnittstelle in den Übungen anderweitig verwendet wird.
    PS2: Falls der Bereich nicht passt bitte verschieben, Netzwerk schien mir am nächsten am Problem.

    Edited once, last by ChrisvA ().

  • Hi dreamshader,
    ja das wäre der Plan, Pi ausschalten, Netzwerkkabel auf das Netboot-Netzwerk umstecken und dann aus den Netzwerk starten und SD flashen.
    Wo siehst du das Problem? Die Bootreihenfolge?
    Gruß
    ChrisvA

  • Da der Pi kein BIOS hat, braucht man für ein Netboot aber wieder eine SD Karte mit einer Bootpartition fürs Netboot.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Naja ... irgendwo muss das OS ja gespeichert sein.
    Ok, das passt bestimmt ins RAM ... aber wie soll es dahin kommen? Ich hab' da meine Zweifel dass es funktioniert das OS in eine RAM-Disk zu schreiben und von da aus zu starten ...


    Ausserdem habe ich irgendwas im Hinterkopf, dass man den USB-/Netzwerk-Boot-Modus nicht wieder rückgängig machen kann ... aber das könnte egal sein ... :s


    hm, klappt das denn mit der RAM-Disk?


    cu,
    -ds-

  • Danke für die Antworten, seit dem Pi 3 kann man ohne SD-Karte per Netzwerk booten (https://www.raspberrypi.org/do…bootmodes/net_tutorial.md hier wird der Vorgang zum boot eines kompletten Raspbian Lite beschrieben, statt SD-Karte wird ein nfs (Network File System) verwendet). Das "BIOS" ist also da, nur zur Einstellung der Bootreihenfolge habe ich bisher nichts gefunden.


    meigrafd Danke für den Begriff school-Lösung, das ist zumindest mal nen neuer Ausgangspunkt für die suche


    Viele Grüße
    Christian


    Edit:

    Quote from "dreamshader" pid='300714' dateline='1506015344'


    Ausserdem habe ich irgendwas im Hinterkopf, dass man den USB-/Netzwerk-Boot-Modus nicht wieder rückgängig machen kann ... aber das könnte egal sein ... :s


    Aktuell habe ich das Bit gesetzt und er bootet trotzdem weiterhin von der SD-Karte (hab auch noch keine DHCP-Konfiguration eingestellt), der "Normalbetrieb" ist also weiterhin möglich.


    Edit2: Hab gerade die Quelle für die Bootreihenfolge wiedergefunden: https://www.golem.de/news/rasp…ethernet-1608-122546.html

    Edited once, last by ChrisvA ().

  • Quote from "RTFM" pid='300713' dateline='1506014992'


    Da der Pi kein BIOS hat, braucht man für ein Netboot aber wieder eine SD Karte mit einer Bootpartition fürs Netboot.


    Seit der Entwicklung des Pi3 wurde der ROM verändert und PXE eingebaut. ROM = eingebrannte Firmware in der GPU die den Bootvorgang regelt.


    Quote from "dreamshader" pid='300714' dateline='1506015344'


    Ich hab' da meine Zweifel dass es funktioniert das OS in eine RAM-Disk zu schreiben und von da aus zu starten ...


    Gibts doch schon: piCore basiert auf TinyCore => http://www.forum-raspberrypi.de/Thread-picore

  • Quote from "meigrafd" pid='300717' dateline='1506015471'


    Na dann ...


    //EDIT: allerdings würde ich kein USB-Karten-Lese-/Schreib-Gerät verwenden sondern den internen Slot. Ich kann mir gut vorstellen, dass das sonst gähnend langsam wird ...


    Viel Erfolg,
    -ds-

  • Eine Idee wäre es, auf die SD (dann vielleicht besser USB-Stick) nicht eine, sondern zwei Partitionen mit einem System zu bringen.
    Und man schreibt auf die aktuell "unbenutzte" das neue System. Anschließend wird in der Datei /boot/cmdline.txt die Root-Partition umgeschrieben.
    Bein folgenden Start nutzt der PI eben die andere Partition.


    Ein anderer Vorschlag wäre es, das / mit einem Union-FS zu übermouten.
    Wenn nicht zu viel geschrieben wird, sollte der Speicher ausreichen.
    Notfalls kann man das union-fs auf einen zweiten Datenträger packen.


    Wenn der PI bootet, kann man entweder das vorhandene union-fs wegschmeißen, oder für eine definierte Anzahl/Zeitraum von Boot-Vorgängen behalten.

    Selber denken,
    wie kann man nur?

  • Rasp-Berlin eine ähnliche Idee kam mir auch schon, wäre aber nur 2. Wahl, da im Falle einer "kaputt gespielten" SD-Karte (Übungsteilnehmer brauchen Root-Rechte für die Übungen) doch wieder manuell das Grundsystem geflashed werden muss.
    Meine Idee war, mit u boot einen Netzwerkboot zu versuchen, falls der klappte darüber ein Image auf eine 2. Partition der SD-Karte zu kopieren, falls es nicht klappt (kein geeignetes Netzwerk verfügbar), wird nach X Sekunden von der 2. Partition gebootet. Damit wäre das Problem mit der Bootreihenfolge gelöst.
    Für das Flashen per Netboot sollte es ja eine Lösung geben, ich stelle mir das etwa so vor:
    1. Netzwerkboot mit minimal-Linux (z.B. tinycore)
    2. Netzwerklaufwerk mit image mounten
    3. Image per dd auf die 2. Partition der SD-Karte übertragen
    4. poweroff


    Werde dann mal morgen mein Glück versuchen...
    Danke für alle Antworten, wem noch eine Idee kommt, immer her damit :)


    Gruß
    ChrisvA

    Edited once, last by ChrisvA ().

  • und einen PI3 von USB booten lassen und einen zero als USB Stick fungieren zu lassen wäre zwar irgendwie "verrückt" aber ein fernsteuerbares Bootdev. austauschbar.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ich hab das mal versucht umzusetzen...


    Pi#1 = Server = Pi0W
    Pi#2 = Client = Pi3B


    Von folgender Seite (die ChrisvA nannte) nur den oberen "Client" Teil durchführen (natürlich auf Pi#2) => https://www.raspberrypi.org/do…bootmodes/net_tutorial.md


    Pi#1 hab ich wie folgt installiert:


    Vor dem Reboot hab ich dem Pi#1 eine statische IP verpasst. Der Reboot ist nicht zwangsläufig nötig...


    Als Hauptverzeichnis für PXE hab ich folgendes gewählt: /srv/tftp/


    ..Weiter auf Pi#1:


    Praktisch: Man kann einzelnen Pi's ein anderes System zuweisen, indem man ein Verzeichnis mit der "Serial" des jeweiligen Pi's erstellt und darin die Bootdateien ablegt. Siehe dazu:
    https://www.raspberrypi.org/do…pberrypi/bootmodes/net.md


    Man kann übrigens auch über GPIO steuern welcher Bootmode verwendet werden soll:
    https://www.raspberrypi.org/do…ypi/bootmodes/bootflow.md
    https://www.raspberrypi.org/do…re/raspberrypi/bootmodes/





    PS: Wie vorher schon erwähnt funktioniert PXE nur mit BCM2837, alle anderen benötigen weiterhin eine SD Karte.