Erstellen eines vorbereiteten SD-Kartenabbilds

19

Für ein Projekt, an dem ich arbeite, möchte ich ein "Stock" -Image auf Basis von Raspbian erstellen, das ich auf vielen Pis installieren kann.

Idealerweise möchte ich in der Lage sein, (auf meinem Computer) das Raspbian-Image zu erstellen, einige Pakete zu erhalten, einige Konfigurationen zu bearbeiten und dann ein SD-Karten-Image daraus zu erstellen, um es auf mein Pis zu setzen.

Gibt es eine einfache oder empfohlene Möglichkeit, dies zu tun? Irgendwelche Fallstricke, denen ich begegnen könnte?

Ich möchte es vermeiden, manuell an einem Pi zu basteln und dieses Bild dann zu klonen. Vermutlich ist Raspbian in irgendeiner Weise gemacht, dass nicht jemand manuell auf Schaltflächen auf einem Pi klickt. Ich würde es gerne so machen, wenn ich kann.

Idealerweise möchte ich etwas erstellen, das automatisch auf einem Continuous Integration Server erstellt werden kann. Ich möchte keinen Build-Prozess, bei dem eine SD-Karte geschrieben und in einen Pi eingefügt wird, da ich Bilder ohne diese erstellen möchte physischer Zugang zu einem Raspberry Pi.

Andy Smith
quelle
3
Kann sich als nützlich erweisen: Wie kann ich ein Raspberry Pi Linux-Distro-Image mounten? - Beachten Sie die hervorgehobene Zeile in der akzeptierten Antwort "Wenn Sie etwas ändern, werden diese Änderungen in die IMG-Datei aufgenommen." Leider bietet dies nicht die Möglichkeit, sich zu bewerben apt-get. Der einfachste Weg, dies zu tun, ist die Verwendung einer VM rsyncmit einem bereitgestellten Image, das mit dem zum Starten der VM verwendeten Image identisch ist (da VM-Images selbst dafür nicht geeignet sind). Ich denke jedoch, dass die einzige VM-Option hier QEMU ist AFAICT ist eine PITA.
Goldlöckchen
Ein anderer Ansatz wäre das Netzbooten.
Lexu
Der Win32DiskImager hat eine Lesefunktion, haben Sie das versucht?
Kong Chun Ho

Antworten:

6

Die Raspberry Pi Foundation verwendet eine Reihe von Bash-Skripten, die QEMU automatisieren, um ihre Bilder zu generieren. Sie sollten sich immer noch mit den "Industriestandards" Buildroot und Yocto befassen.

https://github.com/RPi-Distro/pi-gen

http://cellux.github.io/articles/diy-linux-with-buildroot-part-1/

Flakeshake
quelle
Wenn das OP ein Release-Image nach Industriestandard erstellen möchte, dann ist das der richtige Weg, aber es ist eine enorme Lernkurve, und ich wünsche keinem Hobbyisten, der diesen Weg einschlägt.
Piotr Kula
1
Das hört sich so an, wie ich es suche! Gibt es Anleitungen zur Verwendung? build.sh scheint davon auszugehen, dass eine Reihe von Umgebungsvariablen gesetzt sind.
Andy Smith
Wahrscheinlich von # 4 unter TODO abgedeckt ;) Wurde seit einigen Monaten nicht mehr angerührt, sodass entweder die beteiligten Personen mit anderen Dingen beschäftigt sind oder das Interesse daran verloren haben.
Goldlöckchen
@goldilocks Das ist also nicht der Ursprung des Basis-Rasbian-Bildes?
Andy Smith
3
Ich bin ehrlich und sage, dass mein Eindruck ist, dass Sie die Y - Seite eines XY - Problems mit zu viel Elan verfolgen - es ist impliziert, dass Sie die einfachere Methode denken (richten Sie einfach ein Bild auf einem Pi ein, was von einem aus gemacht werden kann) Computer per Fernzugriff anmelden und das Image selbst durch Mounten optimieren, was auf einem PC durchgeführt werden kann (und all dies kann mit Skripten automatisiert werden), ist zu mühsam, und Sie haben Ihre Hoffnungen auf eine Methode gesetzt, die eigentlich viel ist mehr Ärger .
Goldlöckchen
5

Mein Projekt Nard SDK bietet viele der gewünschten Funktionen. Es ist kein Raspbian, aber es hat eine binäre Raspbian-Emulation und ist daher sehr nah. Mit Nard bauen Sie alles auf einem PC und der Prozess ist sehr schnell und reproduzierbar. Alles ist skriptfähig und kann zB durch eine nächtliche kontinuierliche Integration erfolgen.
http://www.arbetsmyra.dyndns.org/nard/

Ronny Nilsson
quelle
0

Meiner Meinung nach sind die von Ihnen vorgeschlagenen Vorgehensweisen (Mounten, Problemumgehungen für das Aktualisieren und Konfigurieren usw.) anspruchsvoller als die tatsächlichen Lösungen . Sicher, es mag Spaß machen, wenn Sie interessiert sind, aber der beste und einfachste Weg ist der, den Sie meiden.

Ich empfehle Ihnen, sich einen Pi zu besorgen und das zu tun, was Sie tun müssen, und dann ein Abbild der SD-Karte zu erstellen. Verwenden Sie dann dieses Bild auf Ihrem anderen Pis, da dieses Bild bereits konfiguriert ist.

Hinweis: Ich gehe davon aus, dass Sie Raspbian verwenden. Ich gehe auch davon aus, dass Sie nur eine durchschnittliche Person sind und keine Person, die häufig Bilder erstellt (z. B. Raspberry Pi Foundation).


Schritte , wenn Sie tun , basteln mit Ihrem Pi:

  1. Laden Sie ein neues Betriebssystem-Image Ihrer Wahl herunter und installieren Sie es
  2. Stecken Sie das Ethernet-Kabel ein / stellen Sie eine Verbindung zu WiFi her
    • Führen Sie möglicherweise einen LAN-Scan durch, wenn Sie die IP-Adressen Ihrer Pi nicht kennen
  3. Mach Sachen über SSH
    • apt-get update -y && apt-get upgrade Pakete aktualisieren
    • Ihre persönlichen Konfigurationsanforderungen
  4. Mache ein Bild und verwende es dann für andere Pis.

Schritte, wenn Sie nicht mit Ihrem Pi basteln (siehe Hinweis oben):

  1. Laden Sie ein neues Betriebssystem-Image herunter
  2. Berg Bild mit Anweisungen von /raspberrypi//a/13138/24224 (Sie müssen auch überlegen , was OS / Bild , das Sie haben , da einige unterschiedliche FS Layouts)
    • Halten Sie einen Taschenrechner bereit.
  3. Suchen Sie die debDatei für jedes Paket, das Sie aktualisieren möchten, sowie deren Abhängigkeiten sowie die Abhängigkeiten dieser Abhängigkeiten und die Abhängigkeiten dieser Abhängigkeiten . apt-offlineist ein Ärger. Siehe diesen Link
    • Dann finden Sie eine Möglichkeit, alle diese Pakete zu installieren, ohne mit Ihrem Pi / basteln zu müssen. apt-getfunktioniert nicht offline. deb Datei Details hier . Viel Glück.
  4. Aktualisieren Sie die Pi-Kernel und Low-Level- Inhalte mit Hexxehs Tool
  5. Konfigurieren Sie nach Ihren Wünschen
  6. Schreibe ein modifiziertes Bild auf die SD-Karten deines Pis.

Ich sehe keinen Vorteil darin, nicht an deinem Pi herumzubasteln.

Schneiden Sie sich etwas Spielraum und basteln Sie an Ihrem Pi. Sie müssen es nur einmal tun.

PNDA
quelle
Es ist fast unmöglich, Programme manuell abzurufen, indem man Abhängigkeiten und Abhängigkeiten und Abhängigkeiten usw. abruft. Wenn Sie jedoch apt-get verwenden und sagen, Sie möchten VLC, dann sollten Sie apt-get install vlc --yes --print- uris. Das wird eine Liste von Links geben; Sobald sie heruntergeladen sind, legen Sie sie in / var / cache / apt / archives / partial und führen Sie dpkg -i partial / *. deb aus, um sie zu installieren. Wenn Sie Synaptics erhalten, besteht die Möglichkeit, ein Skript zum Herunterladen von Paketen zu generieren. Führen Sie dieses Skript auf einem Linux-Computer aus und Sie haben Ihre Pakete erhalten. Dann können Sie sie mit Synaptics erneut installieren.
NULL
@ NULLThen find a way to install all of those packages without using/tinkering with your Pi.
PNDA
@NULL Soweit ich weiß, können Sie nur dpkgauf dem System selbst verwenden, nicht auf einem bereitgestellten Image. Außerdem plant OP, seinen / ihren PC zu verwenden, sodass die *.debDateien, die Sie haben, in erster Linie für eine falsche Architektur sind (PC ist x86 / x64, Pi ist ARMv6 / v7)
PNDA
Wie ich in meiner Frage angegeben habe, möchte ich nicht 1. Wie für 2, das klingt verrückt :). Warum denkst du, dass @flakeshakes Vorschlag ab 2 schwieriger ist?
Andy Smith
@AndySmith Ich zitiere Goldilocks Kommentar:I'll be honest and say that my impression is you are pursuing the Y side of an XY problem with too much vigour -- it's implied you think the simpler method (just set up an image on a pi, which can be done from a computer via remote login, and the image itself tweaked by mounting, which can be done on a PC, and all of this can be automated with scripting) is too much hassle, and so you have put your hopes in a method that is actually much more hassle.
PNDA
0

Ich denke, was Sie suchen, ist eine Art von (software) configuration management. Mit dieser Option können Sie ein Raspbian-Image starten und dann Ihre eigene Konfiguration (einschließlich neuer Pakete und dergleichen) übertragen. Es gibt viele SCM-Systeme. Der Nachteil ist, dass die meisten dieser Systeme auf die Unterstützung von Netzwerken in großem Maßstab ausgerichtet sind und daher für Ihren Zweck möglicherweise etwas übertrieben sind. Sie benötigen auch eine Art Bereitstellungsserver. Die beliebtesten SCMs scheinen Puppet , Chef , Ansible zu sein . Artikel zum Einstieg:

Dies ist eine allgemeine Antwort, aber SCM ist ein weites Feld. Vielleicht lohnt es sich, sich damit zu beschäftigen, je nachdem, was Sie vorhaben.

duenni
quelle
Ansible scheint vielversprechend zu sein, da es ohne Agenten auskommt und Sie keinen vollwertigen Server benötigen, um es auszuführen.
Duenni
1
Eigentlich nicht, ich möchte, dass das Image bereits erstellt wird, und nicht, dass ich Dinge anhefte. Dieser Vorschlag funktioniert nicht, wenn mein Pi keine Netzwerkverbindung hat.
Andy Smith