Bootstrap: proot-distro-Reparatur und Vulkan-Treiber mit Alternativen

Aus dem Gerätelauf: proot-distro trägt die Shebang-Zeile python3.13, und dieser
Interpreter fehlt. proot-distro ist inzwischen ein Python-Programm — der
klassische Termux-Teilupgrade-Fehler, bei dem ein Paket gegen eine Fassung gebaut
wurde und eine andere installiert ist.

Die Reparatur läuft in drei Stufen, von der saubersten zur unsaubersten:
python nachziehen, dann Vollupgrade (die eigentliche Lösung, denn Termux verträgt
keine Teilupgrades), und erst als Notnagel ein Verweis der fehlenden auf eine
vorhandene Python-Fassung. Der Notnagel gilt ausdrücklich nur für Python und nur
weil proot-distro reines Python ohne kompilierte Erweiterungen ist; bei anderen
Interpretern wäre das grob fahrlässig. Bleibt es defekt, nennt das Skript die
Handgriffe einzeln, statt nur aufzugeben.

Ebenfalls aus dem Lauf: mesa-vulkan-icd-wrapper gibt es unter dem Namen nicht
mehr. Die Paketnamen haben in Termux mehrfach gewechselt, deshalb werden jetzt
mehrere Kandidaten der Reihe nach probiert. Greift keiner, wird das klar benannt:
ohne Vulkan-Treiber bleibt Software-Rendering, S1 wird träge, ist aber weiterhin
aussagekräftig.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-10 21:42:52 +02:00
co-authored by Claude Opus 5
parent 3c41623e52
commit 603ad38fc3
+79 -7
View File
@@ -38,11 +38,33 @@ done
# zur Laufzeit; das Ergebnis landet im GPU-Profil.
section "GPU-Pakete"
GPU_PKGS=(virglrenderer-android vulkan-loader-android vulkan-tools angle-android
mesa-vulkan-icd-wrapper mesa-zink virglrenderer-mesa-zink)
mesa-zink virglrenderer-mesa-zink)
for p in "${GPU_PKGS[@]}"; do
if try pkg install -y "$p"; then ok "$p"; else warn "$p nicht verfügbar — kein Beinbruch"; fi
done
# Der Vulkan-Treiber ist der einzige GPU-Teil, der wirklich zählt: ohne ihn bleibt
# nur Software-Rendering. Die Paketnamen haben sich in Termux mehrfach geändert,
# deshalb werden mehrere Kandidaten probiert, bis einer greift.
section "Vulkan-Treiber (Turnip)"
ICD_KANDIDATEN=(mesa-vulkan-icd-freedreno mesa-vulkan-icd-wrapper
mesa-vulkan-icd-wrapper-android mesa-vulkan-icd-swrast)
ICD_GEFUNDEN=""
for p in "${ICD_KANDIDATEN[@]}"; do
if pkg install -y "$p" >>"$LOG" 2>&1; then
ICD_GEFUNDEN="$p"
ok "$p installiert"
break
fi
hint "$p — nicht verfügbar"
done
if [ -z "$ICD_GEFUNDEN" ]; then
warn "Kein Vulkan-Treiber installierbar."
hint "Ohne ihn läuft der Desktop im Software-Rendering — S1 wird träge,"
hint "sagt aber trotzdem etwas über die Machbarkeit aus."
hint "Verfügbare Kandidaten prüfen: pkg search mesa-vulkan"
fi
section "GPU erkennen"
PLATFORM="$(getprop ro.board.platform 2>/dev/null)"
HARDWARE="$(getprop ro.hardware 2>/dev/null)"
@@ -124,16 +146,66 @@ section "Debian-Rootfs"
if ! proot-distro list >/dev/null 2>&1; then
fail "proot-distro ist installiert, lässt sich aber nicht ausführen"
PD="$(command -v proot-distro)"
log " Datei: $PD"
log " Shebang: $(head -1 "$PD" 2>/dev/null)"
hint "Meist fehlt der Interpreter aus der Shebang-Zeile, nicht das Programm."
hint "Reparaturversuch:"
try pkg install -y bash coreutils proot proot-distro
SHEBANG="$(head -1 "$PD" 2>/dev/null)"
INTERPRETER="$(printf '%s' "$SHEBANG" | sed 's|^#!||; s| .*||')"
log " Datei: $PD"
log " Shebang: $SHEBANG"
log " Interpreter: ${INTERPRETER:-keiner}"
if [ -n "$INTERPRETER" ] && [ ! -x "$INTERPRETER" ]; then
fail "Der Interpreter fehlt — nicht proot-distro selbst."
log ""
log " Das ist der klassische Termux-Teilupgrade-Fehler: das Paket wurde gegen"
log " eine Fassung gebaut, installiert ist eine andere. Termux verträgt keine"
log " Teilupgrades — hier hilft nur, alles auf denselben Stand zu bringen."
# Schritt 1: fehlendes Paket nachziehen. Bei python3.x heißt es schlicht python.
case "$(basename "$INTERPRETER")" in
python3*|python) try pkg install -y python ;;
bash) try pkg install -y bash ;;
*) try pkg install -y "$(basename "$INTERPRETER")" ;;
esac
# Schritt 2: Vollupgrade. Das ist die eigentliche Reparatur.
if [ ! -x "$INTERPRETER" ]; then
log ""
warn "Reicht nicht — jetzt das Vollupgrade. Das dauert und lädt einiges."
try pkg update -y
try pkg upgrade -y
try pkg install -y proot proot-distro
fi
# Schritt 3: Notnagel. Nur für Python, und nur weil proot-distro reines
# Python ohne kompilierte Erweiterungen ist — sonst wäre eine Version
# überzustülpen grob fahrlässig.
if [ ! -x "$INTERPRETER" ]; then
case "$(basename "$INTERPRETER")" in
python3.*)
VORHANDEN="$(ls "$PREFIX/bin"/python3.* 2>/dev/null | grep -v config | head -1)"
if [ -n "$VORHANDEN" ]; then
log ""
warn "Notnagel: verweise $(basename "$INTERPRETER") auf $(basename "$VORHANDEN")"
hint "Vertretbar, weil proot-distro reines Python ist."
hint "Sauber wird es erst mit einem vollständigen 'pkg upgrade'."
ln -sf "$VORHANDEN" "$INTERPRETER" && ok "Verweis angelegt"
fi
;;
esac
fi
else
try pkg install -y bash coreutils proot proot-distro
fi
if ! proot-distro list >/dev/null 2>&1; then
fail "Bleibt defekt — ohne proot-distro geht es nicht weiter."
log ""
log " Von Hand versuchen, in dieser Reihenfolge:"
log " pkg update && pkg upgrade -y # Vollupgrade, keine Teilschritte"
log " pkg install -y python proot proot-distro"
log " termux-change-repo # falls der Spiegel unstimmig ist"
exit 1
fi
ok "Nach der Neuinstallation läuft proot-distro"
ok "proot-distro läuft wieder"
fi
if proot-distro list --installed 2>/dev/null | grep -q "^$DISTRO\b" \