Alpine Linux für Raspberry Pi aufsetzen

Diese Anleitung basiert auf dem Artikel im offiziellen Alpine Linux Wiki1. Sie beschreibt die Einrichtung eines “diskless” Setup und wurde mit einem Raspberry Pi 2 Model B Rev 1.1 getestet.

Alpine Linux für Raspberry Pi herunterladen

Auf einem bereits mit Linux laufenden Raspberry Pi kann man mittels grep -i model /proc/cpuinfo | uniq feststellen, welches Modell man besitzt.

Dementsprechend wählt man im Alpine Linux Downloadbereich das zur Architektur passende Archiv.

SD-Karte vorbereiten

Für den Betrieb ist lediglich eine bootbare VFAT Partition notwendig. In diesem Beispiel wird diese relativ klein gehalten um den restlichen Platz für eine weitere Partition vom Typ F2FS zu nutzen.

SD-Karte partitionieren

Achtung: Ab hier werden die bisherigen Inhalte des angegebenen Geräts zerstört.

# Diese beiden Konstanten anpassen
SD_CARD=/dev/mmcblk0
PARTITION1_MB=500

start=2048
sector_size=512
part1_sectors=$(($PARTITION1_MB *1024*1024/ $sector_size))

echo "label: dos
sector-size: $sector_size
start=$start, size=$part1_sectors, type=c, bootable
start=$(($start + $part1_sectors)), type=83
" | sfdisk $SD_CARD

Partitionen formatieren

# Diese Konstante anpassen
BLOCK_PREFIX=/dev/mmcblk0p

mkfs.vfat ${BLOCK_PREFIX}1
mkfs.f2fs ${BLOCK_PREFIX}2

Alpine Linux aufspielen

# Diese beiden Konstanten anpassen
BLOCK_PREFIX=/dev/mmcblk0p
ALPINE_ARCHIVE=alpine-rpi-3.17.2-armv7.tar.gz

MNT=$(mktemp --directory)

mount ${BLOCK_PREFIX}1 $MNT
tar xzvf $ALPINE_ARCHIVE -C $MNT

# Optional: Audio via Klinkenstecker aktivieren
#echo dtparam=audio=on >> $MNT/usercfg.txt 

# Optional: Overscan deaktivieren
#           siehe https://askubuntu.com/a/1229856
#echo disable_overscan=1 >> $MNT/usercfg.txt 


umount ${BLOCK_PREFIX}1 && rmdir $MNT

Alpine Linux System konfigurieren

Mit eingesetzter SD-Karte kann der Raspberry Pi nun gestartet werden.

Die Konfiguration des Systems erfolgt entsprechend den Anforderungen des Benutzers. Um eine reibungslose Grundeinrichtung zu gewährleisten, sollten allerdings folgende Antworten wie hier gezeigt übernommen werden:

setup-alpine

No disks available. Try boot media /media/mmcblk0p1? (y/n) => n
Enter where to store configs => mmcblk0p1
Enter apk cache directory => /media/mmcblk0p1/cache

Optimierungen ergänzen

# Ältere Paketversionen erhalten
sed -i 's|# BACKUP_LIMIT=3|BACKUP_LIMIT=3|g' /etc/lbu/lbu.conf

# Zusätzliche Paketquellen aktivieren
sed -i 's|#http://\(.*\)/community|http://\1/community|g' /etc/apk/repositories
#sed -i 's|#http://\(.*\)/testing|http://\1/testing|g' /etc/apk/repositories

# Zweite Partition bei Systemstart einhängen
PART2='mmcblk0p2'
mkdir /media/${PART2}
echo "/dev/${PART2} /media/${PART2} f2fs noatime,ro 0 0" >> /etc/fstab

# Public Key SSH-Rootzugang vorbereiten
mkdir /root/.ssh && touch /root/.ssh/authorized_keys && chmod -R go-rwx /root/.ssh
lbu include /root/.ssh/authorized_keys

Vorhandene Pakete aktualisieren und optional zusätzliche installieren

apk update && apk upgrade
#apk add rsync

Änderungen dauerhaft übernehmen

lbu commit -d

lbu commit muss immer ausgeführt werden, wenn Änderungen dauerhaft übernommen werden sollen. Es schreibt Konfigurationsanpassungen in /media/mmcblk0p1/$HOST.apkovl.tar.gz.

Von dieser Datei werden sie dann beim nächsten Systemstart wiederhergestellt. Das Grundsystem bleibt unverändert.

System neu starten

Abschließend sollte die Funktionstüchtigkeit des Systems nach einem Neustart verifiziert werden:

reboot

Hinweis: Headless-Installation

Sollte kein Bildschirm oder keine Tastatur verfügbar sein, kann – entsprechendes Verständins vorausgesetzt – eine passende Overlay-Datei genutzt werden um bereits beim ersten Start Zugang über das Netzwerk (SSH) zu ermöglichen.


1 https://wiki.alpinelinux.org/wiki/Raspberry_Pi