postmarketOS auf SHIFT6mq Smartphone installieren

Dies ist Artikel 1 zur Einrichtung eines SHIFT6mq mit postmarketOS. Weitere Artikel der Serie sind in den Fußnoten verlinkt.2 3

Das SHIFT6mq ist zum Zeitpunkt des Verfassens dieser Anleitung eines der leistungsfähigsten für postmarketOS geeigneten Mobiltelefone.

Zwar fehlt einerseits noch die Unterstützung6 für diverse Hardwarekomponenten wie Kamera oder GPS, andererseits schafft man sich mit einem echten Linux-Telefon maximale Flexibilität – die Grundlage für hocheffiziente Abläufe.

Ziele: Privatsphäre und Multi-Boot

Bei dieser Anleitung ist darauf geachtet, dass das Telefon niemals mit dem Internet zu verbinden, bevor es von potentiell verräterischer Software befreit ist.

Damit soll vermieden werden, dass etwaige Gegenstellen das Telefon mit dem initialen Standort und somit einem bestimmten Personenkreis verknüpfen (beispielsweise durch Verknüpfen der IMEI7 mit der IP).

Installiert wird in eine der beiden “Superpartitionen”, sodass in der anderen ein anderes Betriebssystem wie zum Beispiel ein AOSP-Android8 den benötigten Platz finden kann.

Warnung: Das bestehende System wird restlos entfernt und die Benutzerdaten gehen verloren.

Warnung: Android OTA-Updates benötigen einen ungenutzten Slot zur Installation neuer Versionen.9 Da postmarketOS diesen belegen wird, können Updates dann nur noch manuell (per PC/USB) durchgeführt werden. Details werden in einem Folgeartikel erläutert.4

Voraussetzungen

  • Ausgegangen wird von einem SHIFT6mq in Werkszustand, mit vorinstalliertem und funktionstüchtigem Android (“ShiftOS”).
  • Das Telefon muss per USB mit dem Linux-PC verbunden sein.
  • Am PC müssen pmbootstrap, fastboot sowie 7zip vorhanden sein. Unter Void Linux werden sie beispielsweise via xbps-install -Su pmbootstrap android-tools 7zip installiert.

Wo relevant ist am Beginn jedes Abschnitts erwähnt in welchem Modus sich das Telefon befinden muss. Dies dient lediglich der Orientierung, da es bei Befolgen der Anweisungen ohnehin zu jedem Zeitpunkt im jeweils korrekten Zustand ist.


postmarketOS für SHIFT6mq konfigurieren

(PC)

Zuerst erstellt man am Linux-Rechner ein postmarketOS Installationsabbild:

Umgebung aktualisieren

Dieser Schritt stellt sicher, dass man mit einer aktuellen Umgebung arbeitet.

pmbootstrap pull
pmbootstrap status

Konfiguration des Abbilds definieren

Im diesem Schritt muss als Vendor shift und ls Device codename axolotl eingestellt werden.

pmbootstrap init

Hackern sei sxmo-de-sway als User interface empfohlen. Diese, sowie die übrigen Optionen können den eigenen Bedürfnissen angepasst oder auf den vorgegebenen Einstellungen belassen werden.

Um Probleme beim Erstellen des Abbildes zu vermeiden, sei von der Angabe von Extra packages abgeraten. Zusätzliche Pakete sollten besser später im laufenden System hinzugefügt werden.

Abbild für verschlüsseltes System generieren

Jedes System sollte grundsätzlich verschlüsselt erstellt werden. Damit erspart man sich spätestens bei Weitergabe des Geräts Kopfzerbrechen über etwaige verbliebene Daten.

pmbootstrap install --fde
pmbootstrap shutdown

Per shutdown löst man vorübergehende Mounts der pmbootstrap-Umgebung.


Bootloader entsperren

(Modus: Android)

Im vorinstallierten Android System “ShiftOS” erlaubt man das Entsperren des Bootloaders:

  1. Entwicker-Modus aktivieren
    Einstellungen > Über das Telefon > “Build-Nummer” sieben mal berühren
  2. Erlaubnis zum Entsperren des Bootloaders erteilen
    Einstellungen > System > Erweitert > Entwickleroptionen > “Erweiterter Neustart” sowie “OEM-Entsperrung” aktivieren
  3. Bootloader starten
    Den Ausschaltknopf lange drücken und “Neu starten” > Bootloader wählen
  4. Entsperrung durchführen
    Vom PC aus den Unlock-Befehl an das Telefon senden:
    fastboot flashing unlock

postmarketOS aufspielen

Ist aus dem vorigen Schritt noch der Bootloader-Modus aktiv, wechselt man nun in den Fastboot-Modus:

  • Es sollte ausreichen, am PC den Befehl fastboot reboot fastboot zu geben.
  • Alternativ hält man beim Einschalten des Telefons (via Power) gleichzeitig “Lauter” (also VolUp) gedrückt.
  • Bei neueren Bootloader-Versionen kann man den entsprechenden Menüpunkt zum direkten Wechsel zu Fastboot nutzen.

Installationsslot auswählen

(Modus: Fastboot)

Es stehen zwei Slots zur Verfügung. PostmarketOS wird in Slot A installiert. Ein neues Android kann später in Slot B geladen werden. Wie eingangs erwähnt, geht das bestehende Android-System im nächsten Schritt allerdings verloren!

fastboot --set-active=a
fastboot reboot fastboot
fastboot getvar current-slot 2>&1 | \
        grep 'current-slot: a$' || \
        echo 'Fehler: Falscher Slot aktiv!' >&2

Boot- und System-Partition des Telefons bespielen

(Modus: Fastboot)

# Vorgang dauert rund 76 Sekunden
pmbootstrap flasher flash_rootfs --partition system_a
# Vorgang dauert rund 31 Sekunden
pmbootstrap flasher flash_kernel --partition boot_a
fastboot reboot bootloader
# Vorgang dauert rund 26 Sekunden
fastboot erase dtbo_a
fastboot reboot fastboot

Laut Wiki1 “steht die dtbo-Partition mit dem Mainline-Kernel in Konflikt” und wird daher hier gelöscht.


Gesamten Slot A für postmarketOS nutzbar machen

(Modus: Fastboot)

Einige Partitionen innerhalb eines Slots werden lediglich von Android-Systemen genutzt und sind für Linux-Systeme irrelevant.

Indem man sie löscht, kann der dadurch freigegebene Speicherplatz für die postmarketOS root-Partition von zirka 2 GiB (2128609280 bytes) auf rund 4.5 GiB (4813467648 bytes) erweitern.

Die folgenden Befehle könnten auf einem technisch abweichenden System unerwartete Auswirkungen haben und sollten daher erst ausgeführt werden, wenn man die einzelnen Schritte versteht. Da diese Änderungen von anderen unabhängig sind, können sie auch jederzeit nachträglich vorgenommen werden.

# Zurück in den Fastboot-Modus wechseln
fastboot reboot fastboot

# Gesamt-verfügbare Größe ermitteln
slot='a'
filter=":product_$slot:|:system_$slot:|:vendor_$slot:|:system_ext_$slot:"
matches=`fastboot getvar all 2>&1 | grep -E "$filter"`
sizes_hex=`echo "$matches" | sed -n '/partition-size/ s#.*partition-size.*:0x##p' | tr '\n' '+'`
sum_decimal=`echo "ibase=16; ${sizes_hex} 0" | bc`

printf 'Relevante Partitionen:\n\n%s\n\n' "$matches"
printf 'Die Root-Partiton wird auf %s Bytes erweitert.\n' "$sum_decimal"

# Unnötige Partitionen löschen
for p in product vendor system_ext ; do fastboot delete-logical-partition "${p}_${slot}" ; done
fastboot resize-logical-partition system_${slot} $sum_decimal

# Neue Größe ausgeben und postmarketOS starten
fastboot getvar all 2>&1 | grep " partition-size:system_${slot}:"
fastboot reboot

Dateisystem auf neue Größe ausweiten

(Modus: postmarketOS)

Abschließend muss per SSH oder in einem Terminalfenster direkt in postmarketOS das Dateisystem auf die Nutzung der neuen Partitionsgröße eingestellt werden:

df -h /dev/mapper/root
doas resize2fs /dev/mapper/root
df -h /dev/mapper/root

Gratulation! An dieser Stelle hat man ein funktionstüchtiges Linux-Telefon das man nach Belieben weiter gestalten kann.

Ausblick

Weitere Artikel zum Thema werden unter Anderem erläutern, wie man über die Benutzer-Partition noch mehr Platz für postmarketOS bereit stellt4, ein freies Android parallel zu postmarketOS installiert (“Dualboot”) oder Android-Applikationen direkt in postmarketOS ausführt.

Smartphones können Zeitfresser sein. Eine Hoffnung die ich in postmarketOS setze ist, dass es langfristig auch im mobilen Bereich eine minimalistische Nutzung ermöglicht und somit dazu beiträgt Smartphones in den Hintergrund zu bringen. Menschen sind wichtiger als Maschinen.

An dieser Stelle vielen Dank an Alex von Shift für die klaren Hinweise, welche die optimale Konfiguration des SHIFT6mq für diesen Artikel deutlich vereinfacht haben!


1 Artikel 1 (dieser)

2 Artikel 2 der Serie: Platz aus Android-Benutzerpartition für postmarketOS freigeben

3 Artikel 3 der Serie: Bootloader-Firmware des SHIFT6mq Smartphones aktualisieren

4 Artikel 4 der Serie: Android auf SHIFT6mq parallel zu postmarketOS installieren

6 SHIFT6mq im postmarketOS-Wiki

7 RFC-7254: IMEI

8 Android Open Source Project

9 AOSP: A/B (seamless) system updates