Press "Enter" to skip to content

Raspberry Pi: Eigene Raspbian Images bauen mit pi-gen

Mit dem Raspberry Pi 4 hat die Raspberry Foundation einen leistungsstarken Computer auf den Markt gebracht. Wer sich mit seinem Raspberry Pi beschäftigt, wird mit hoher Wahrscheinlichkeit die von der Raspberry Foundation bereitgestellte Linux Distribution Raspbian bereits einmal installiert haben.

Hier gab es über die Jahre immer wieder verschiedene Versionen im zugrundeliegendem Debian-System. Daher trägt das Raspbian-System je nach Versionsstand die Bezeichnungen Jessie, Stretch und zum heutigen Zeitpunkt die aktuellste Version Buster.

Das Raspbian Image wird in mindestens zwei Ausbaustufen angeboten. Es gibt eine Lite-Version und eine Dektop-Version. Die Desktop-Version beinhaltet eine Bedienoberfläche und vorinstallierte Tools wie einen Browser. Die Lite-Version dagegen enthält, wie der Name schon sagt, nicht viel zusätzlichen Schnick-Schnack. Wird der Raspberry an einen Bildschirm angeschlossen, so hat man hier nur einen Terminal. Ähnlich, als würde man sich mit einer SSH verbinden.

Für den Raspberry gibt es viele nützliche Projekte. Ich nutze in meinem Heimnetzwerk beispielsweise den Pi-hole. Damit betreibe ich meinen eigenen DNS Server im Heimnetzwerk. Dieser enthält Filterlisten mit bekannten Adservern, Telemetrieservern und Malwareservern. Somit sind alle Geräte in unserem Heimnetzwerk werbefrei. Sehr nützlich!

Beim Einrichten solcher Projekte geht man meist so vor, dass man sich ein frisches Raspbian Lite-System auf eine Speicherkarte schreibt. Anschließend tippt man noch die jeweiligen Befehle zur Installation ein und installiert sich so das Pi-hole System. Ist dies einmal getan, dann muss man an den Raspberry auch nicht mehr so schnell dran.

wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh

Es gibt auch Raspberry Pi-Projekte, die bereits fertige Images zum Download anbieten. So auch bei einem eigenen Raspberry Pi Projekt, dem HoneyPi. HoneyPi ist ein Do-It-Yourself Bienenstand-Monitoring-Projekt, welches es Imkern ermöglicht ihren Bienenstand mit Sensoren auszustatten und die Bienenvölker zu überwachen. Neben HoneyPi gibt es auch Projekte, wie die Anonymebox (ein Tor WiFi-Client), auch dort gibt es fertige Images zum Download.

Die Bereitstellung solcher Images kann aufwendig sein: Nachdem das System eingerichtet ist, erstellt man sich mit einem Tool, wie ApplePi-Baker, ein Backup. Anschließend verkleinert man das recht große Backup mit einem Skript, wie PiShrink. Das verkleinerte Image bietet man nun zum Download an. HALT STOP! Das ist unschön! Denn das nun hochgeladene Image enthält eine Bash-History, sowie die öffentlichen SSH Keys der verbundenen Geräte usw.

Daher bin ich für die Bereitstellung fertiger Raspbian Images dazu übergegangen, auf dem selben Wege, wie auch die Raspberry Foundation ihre Releases baut, die Images zu generieren.

Dafür verwendet Raspberry den pi-gen. Der pi-gen ist ein Tool um mit Hilfe von debootstrap die Raspbian Images zu bauen. Noch nicht allzu lange wurde der pi-gen um eine Config erweitert, mit der nützliche Konfigurationen bereits vor dem ersten Start aktiviert sind. So kann vor dem allerersten Start beispielsweise der Hostname gesetzt, die SSH Erreichbarkeit aktiviert oder gar ein erstes WLAN-Netzwerk hinterlegt werden.

Die Stages unserer neuen pi-gen Config für den HoneyPi

Wie ich einleitend beschrieben habe, gibt es mehrere Ausbaustufen des Raspbian-Systems. Für die Ausbaustufe Lite läuft der pi-gen von Stage 0 bis Stage 2. Bei allen Stufen über 2 erhält man den Ausbau für einen Desktop-Einsatz.

Das Ziel ist es jetzt – das was der Nutzer sonst als installer.sh ausgeführt hat, wie am pi-hole oben gezeigt, und – die Pakete, die sonst zu installieren gewesen wären, in einen custom-stage zu legen und diesen Stage beim Bauen mit auszuführen. Wer bereits einen Installer hat, für den ist es einfach, diesen als einen eigenen Stage umzuschreiben.

install.sh vorher (hier der vollständige Installer):

echo '>>> Create www-data user'
usermod -G www-data -a pi

cp overlays/wvdial.conf /etc/wvdial.conf

if grep -q 'net.ifnames=0' /boot/cmdline.txt; then
    echo '6 - Seems net.ifnames=0 parameter already set, skip this step.'
else
    sed -i '1s/$/ net.ifnames=0/' /boot/cmdline.txt
fi

So sehen diese Codezeilen nach der Anpassung aus (hier das vollständige Skript):

on_chroot << EOF
echo '>>> Create www-data user'
usermod -G www-data -a pi
EOF

install -m 755 files/wvdial.conf "${ROOTFS_DIR}/etc/wvdial.conf"

if grep -q '^net.ifnames=0' ${ROOTFS_DIR}/boot/cmdline.txt; then
  echo '6 - Seems net.ifnames=0 parameter already set, skip this step.'
else
  echo 'net.ifnames=0' >> ${ROOTFS_DIR}/boot/cmdline.txt
fi

In der config kann auch direkt die Reihenfolge, in welcher die Stages ausgeführt werden sollen, eingegeben werden. Wichtig ist, dass der eigene Stage (hier stage-honeypi) zusammen mit der config im pi-gen Verzeichnis liegt.

IMG_NAME='HoneyPi'
STAGE_LIST='stage0 stage1 stage2 stage-honeypi'
ENABLE_SSH=1
DEPLOY_ZIP=1
TARGET_HOSTNAME='HoneyPi' 
FIRST_USER_NAME='pi'
FIRST_USER_PASS='hivescale'
WPA_ESSID='fremdesWLAN'
WPA_PASSWORD='password'
WPA_COUNTRY='DE'

In diesem Repository befindet sich die Datei build-honeypi.sh, welches diese Schritte ausführt.

Erfolgreich ein 500MB großes Raspbian Image mit eigener Ausbaustufe generiert.

Wenn die build-honeypi.sh erfolgreich durchgelaufen ist, erhält man nun sein erstes eigenes Raspbian-System!

Leave a Reply

Your email address will not be published. Required fields are marked *