6021gelesen 0Kommentare
Aktuell befasse ich mich mit Docker-/Kubernetes Cluster. Dazu habe ich ein spannendes Projekt gefunden – Hypriot OS – mit diesem kann ich meine aktuell 4 beschäftigungslosen Raspberry Pi 3B mit Arbeit versorgen und 2 neue Raspberry Pi 4 der Familie hinzufügen. Dazu muss ich ein Image für die Raspberry Pi auf eine SD Karte erstellen. Weil ich kein 64GB Image vorhalten möchte, habe ich eine Möglichkeit gefunden, das Basis-Image auf minimale Größe zu komprimieren und so belegt sie mit 2GB nur einen Bruchteil der Original-Größe.
Für diesen Artikel verwendete Produkte
Für diesen Artikel wurden folgende Produkte verwendet:
- Raspberry Pi 3B / Raspberry Pi 4
- SanDisk Extreme 64GB A2 SD-Karten
- ApplePI Baker ist die Software zum Beschreiben der SD-Karten
Erstellung des Master Images
Für die Erstellung des Master Images wird das Hypriot Image heruntergeladen:
blog.hypriot.com/downloads/
Aktuell ist bei mir die Version 1.10.0.
auf blog.hypriot.com/downloads/ oder github.com/hypriot
Nach dem Herunterladen startest du das vorher installierte ApplePI Baker und kopierst das frische Image auf die SD Karte.
Anschließend kommt die SD Karte in einen Raspberry Pi und dieser wird mit Monitor, Tastatur und Netzwerk gestartet.
- Benutzer: pirate
- Passwort: hypriot
Ich habe das Netzwerk eingerichtet und alle Software-Updates installiert, so dass die Installation auf dem neuesten Stand ist. Außerdem habe ich den Piraten-Benutzer entfernt und einen eigenen neuen Benutzer hinzugefügt.
pirate@hypriot: sudo apt update && sudo apt dist-upgrade -y ... pirate@hypriot: sudo useradd demouser
Achtung: Für den Benutzer müssen Superufer-Rechte eingerichtet werden, bevor der Pirat gelöscht wird. Sonst hast du keine Möglichkeit mehr eine privilegierte Aufgabe auszuführen. Dazu kannst du für den Benutzer eine neue Datei im Verzeichnis /etc/sudoers.d
anlegen. Ich gebe der Datei den gleichen Namen wie dem Benutzer: demouser
und dann bekommt die Datei folgenden Inhalt:
demouser ALL=(ALL) NOPASSWD: ALL
oder mit Passwort-Eingabe als Sicherheitsstufe:
demouser ALL=(ALL:ALL) ALL
Anschließend als demouser
in der Konsole anmelden und testen, ob mittels sudo reboot -n
der Raspberry Pi neu gestartet werden kann.
Ich empfehle dir, sämtliche Caches und temporäre Daten im System zu löschen. Dazu helfen dir Befehle wie:
demouser@hypriot: sudo apt autoclean
Raspberry Pi SD Karte als Master erstellen
Sofern das System jetzt dem entspricht, was du haben wolltest, kannst du den Raspi herunterfahren und die Karte herausnehmen. Das Image, das wir jetzt erstellen, ist erstmal genauso groß, wie die SD Karte. Also in meinem Fall 64 GB. Bitte beachte, dass du für das Erstellen des Images jetzt 64 GB freien Speicher brauchst.
Dabei führst du den gleichen Schritt aus, wie beim Erstellen der SD-Karte, allerdings in gedrehter Reihenfolge.
Nun hast du ein Image, meines heißt: myHypriot.img
Jetzt musst du die Datei öffnen und erstmal den leeren Bereich der Platte mit Nullen überschreiben, dazu führst du folgende Schritte aus:
user@ubuntu: mkdir -p ~/img user@ubuntu: mount -t udf myHypriot.img ~/img -o loop user@ubuntu: lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 88,4M 1 loop /snap/core/7169 loop1 7:1 0 54,4M 1 loop /snap/core/1055 loop2 7:2 0 88,5M 1 loop /snap/core/7270 loop3 7:3 0 97,1M 1 loop /snap/core/2435 loop4 7:4 0 95,3M 1 loop /snap/core/1054 loop5 7:5 0 54,4M 1 loop /snap/core/1049 loop6 7:6 0 59,5G 0 loop ├─loop6p1 259:0 0 64M 0 part └─loop6p2 259:1 0 59,4G 0 part mmcblk0 179:0 0 58,2G 0 disk ├─mmcblk0p1 179:1 0 512M 0 part /boot/efi ├─mmcblk0p2 179:2 0 1G 0 part /boot └─mmcblk0p3 179:3 0 56,8G 0 part ├─ubuntu--vg-ubuntu--lv 253:0 0 54,8G 0 lvm / └─ubuntu--vg-swap0 253:1 0 2G 0 lvm [SWAP]
In meinem Fall ist das Image unter loop6
gemountet. Heißt, ich führe jetzt einen Füllprozess aus, der den leeren Image-Platz mit dem Füllen einer Datei beschreibt. Anschließend wir diese Datei gelöscht. So habe ich einen komplett leeren Platz in dieser Datei. Die erscheinenden Fehler einfach ignorieren.
user@ubuntu: for part in /dev/loop6p*; do mount $part /mnt; dd if=/dev/zero of=/mnt/filler conv=fsync bs=1M; rm /mnt/filler; umount /mnt; done dd: error writing '/mnt/filler': No space left on device 25+0 records in 24+0 records out 25853952 bytes (26 MB, 25 MiB) copied, 0,16626 s, 156 MB/s rm: remove regular file '/mnt/filler'? yes dd: Fehler beim Schreiben von '/mnt/filler': Auf dem Gerät ist kein Speicherplatz mehr verfügbar 56069+0 Datensätze ein 56068+0 Datensätze aus 58791837696 Bytes (59 GB, 55 GiB) kopiert, 1526,08 s, 38,5 MB/s rm: Normale Datei '/mnt/filler' entfernen? yes
So, wir sind leider noch nicht fertig, allerdings haben wir jetzt in der Datei myHypriot.img
den leeren Bereich aus dem Festplatten-Image in den nicht allokierten Bereich geschoben. Mittels dem Tool gparted
können wir diesen Bereich aus der Datei entfernen und haben so den leeren Speicherbereich aus der Datei entfernt.
Mit dem Klick auf den nicht allokierten Bereich kannst du diesen Bereich löschen. Anschließend klickst du auf übernehmen um die Änderungen zu schreiben.
Die Datei wird jetzt entsprechend der Änderung angepasst und hat nach dem Anpassen die Größe, die mit Daten belegt sind. Diese Datei hat bei mir knapp 3 GB und ist schneller auf eine neue SD Karte kopiert.
Übrigens: Beim Starten vergrößert das System automatisch seinen Speicher auf die Größe der SD Karte. Allerdings kannst du dieses Image jetzt auch auf kleinere Karten (> 4GB) kopieren und laufen lassen. Cool oder?