Schneller Boot: Im Vergleich zu FullPageOS benötigt es nur etwa die Hälfte der Zeit, bis die Website angezeigt wird. Der Raspberry Pi 4 braucht ca. 35 Sekunden.
Kleiner Footprint: Nur ~1 GB installierte Größe. Eine 2 GB SD-Karte reicht aus.
Sicherheit: Kleinere Angriffsfläche durch minimale Installation.
Stabilität: Alpine unterstützt einen Read-Only-Modus, wodurch es robust gegen unsauberes Herunterfahren (z.B. Stromausfall) ist.
Alpine Linux auswählen (zu finden unter “Other General Purpose OS”)
Idealerweise solltest du die 64-bit-Variante auswählen. Allerdings ist diese auf dem Pi 3B relativ instabil. Chromium stürzt beim Aufstarten mehrmals ab, bis es dann endlich läuft. Beim Pi 3B würde ich daher zur 32-bit-Version raten.
Auf SD-Karte schreiben und in den Pi einlegen
Raspberry Pi starten (Tastatur und Bildschirm anschließen)
Standardmäßig partitioniert Alpine die SD-Karte vollständig und erstellt ein Dateisystem in maximaler Größe. Das ist aber nicht optimal für Backups – eine kleinere Partition mit unfragmentiertem Dateisystem ist hier vorteilhafter.
Bevor wir rebooten, verkleinern wir daher das Dateisystem und die Partition.
# Die e2fs Tools werden nur temporär im RAM installiert und sind nach dem Reboot nicht mit im System.apk add e2fsprogs-extra
# Dateisystem Checken (resize2fs verweigert sonst seine Arbeit)e2fsck -f /dev/mmcblk0p2
# Dateisystem auf 1 GB verkleinernresize2fs /dev/mmcblk0p2 1G
# Finde die Blocksize und den Blockcount herausdumpe2fs -h /dev/mmcblk0p2
# Partition mit fdisk anpassenfdisk /dev/mmcblk0
# 1. Partitionen mit p anzeigen# 2. Startsektor der Partition 2 notieren# 3. Partition 2 mit d löschen# 4. Neue primäre Partition 2 mit n erstellen# 5. Startsektor aus Schritt 2 eingeben# 6. Endsektor eingeben## Üblicherweise beträgt die Blockgröße bei ext4 4096 Bytes.# fdisk rechnet jedoch in Sektoren, die jeweils 512 Bytes groß sind.# Für eine 1 GB große Partition ist folgende Rechnung erforderlich:# # Bei 1 GB Dateisystemgröße und Blockgröße von 4096 haben wir einen Block Count: 262144# Pro Block werden 8 Sektoren benötigt (8*512=4096)# Der Endsektor von Partition 2 muss also auf +2097152 gesetzt werden (8 * 262144)# Alternativ könnte auch einfach +1G eingegeben werden, damit fdisk die Berechnung übernimmt.# Nun das System neu startenreboot
######################################### Hardware######################################### Nicht benötigte Hardware deaktivierendtoverlay=disable-wifidtoverlay=disable-btdtparam=audio=off## CPU mit maximaler von der Firmware erlaubter Geschwindigkeit betreibenarm_boost=1########################################## LEDs########################################## LEDs deaktivieren (spart Strom)dtparam=pwr_led_trigger=nonedtparam=pwr_led_activelow=offdtparam=act_led_trigger=nonedtparam=act_led_activelow=off## Deaktivieren der Ethernet-LEDs funktioniert nur auf RPi 4dtparam=eth_led0=14dtparam=eth_led1=14########################################## Video-Treiber#########################################disable_overscan=1disable_splash=1camera_auto_detect=0max_framebuffers=2#disable_fw_kms_setup=1## Tipp: Bei der 32-bit-Variante von Alpine funktioniert vc4-kms-v3d möglicherweise nicht. # Falls nur ein schwarzer Bildschirm angezeigt wird, sollte stattdessen vc4-fkms-v3d verwendet werden.dtoverlay=vc4-kms-v3d
adduser kiosk
# Den Benutzer zur Gruppe video und input hinzufügen# Dadurch erhält er Zugriff auf die Ein- und Ausgabegeräte.addgroup kiosk video
addgroup kiosk input
# Den Benutzer automatisch einloggen lassensed -i 's|^tty1::.*$|tty1::respawn:/bin/login -f kiosk|' /etc/inittab
# Profil einrichten, das für den Kiosk-Benutzer automatisch den X-Server startettee /home/kiosk/.profile << EOF
#!/bin/sh
# start X server
exec startx -- -nocursor
EOFchmod u+x /home/kiosk/.profile
Das Ziel ist es, lediglich Chromium im Kiosk-Modus zu starten. Zusätzlich wird der VNC-Server
im Hintergrund gestartet, um eine spätere Fernsteuerung zu ermöglichen.
tee /usr/local/bin/kiosk-url-monitor << 'EOF'
#!/bin/sh
URL_FILE="/home/kiosk/url"
CHECK_INTERVAL=5
test_url() {
url=$(cat "$URL_FILE" 2>/dev/null)
if [ -z "$url" ]; then
return 1
fi
wget --spider --timeout=5 --tries=1 -q "$url" 2>/dev/null
return $?
}
refresh_browser() {
DISPLAY=:0 xdotool key F5
}
# Track previous state (0=available, 1=unavailable)
prev_state=1
while true; do
if test_url; then
# URL is available
if [ "$prev_state" -eq 1 ]; then
# State changed from unavailable to available
sleep 2 # Brief delay before refresh
refresh_browser
fi
prev_state=0
else
# URL is unavailable
prev_state=1
fi
sleep "$CHECK_INTERVAL"
done
EOFchmod +x /usr/local/bin/kiosk-url-monitor
Für maximale Stabilität und Langlebigkeit der SD-Karte wird ein Read-Only-Overlay-Dateisystem verwendet.
Tip
SD-Karten, die nur gelesen werden, haben eine nahezu unbegrenzte Lebensdauer.
Zusätzlich: Da nie auf den Datenträger geschrieben wird, kann das Dateisystem durch eventuelle Stromausfälle nicht beschädigt werden.
Wir erstellen zwei Skripte, um das System zwischen Read-Only- und beschreibbarem Modus umzuschalten. Beachte, dass dafür immer ein Neustart erforderlich ist.
Mit Alpine Linux als Basis werden folgende Vorteile erreicht:
✅ 35 Sekunden Boot-Zeit - 30 % schneller als mit Raspbian oder FullPageOS ✅ Minimales System - nur ~1 GB auf der SD-Karte ✅ Read-Only-Dateisystem - maximale Stabilität und SD-Karten-Langlebigkeit ✅ VNC-Zugriff - einfaches Remote-Debugging ✅ Auto-Refresh - regelmäßige Aktualisierung der Website im Browser
Die Lösung eignet sich perfekt für HMI-Anwendungen, bei denen schneller Boot, Stabilität und minimaler Wartungsaufwand entscheidend sind.