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:
@@ -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" \
|
||||
|
||||
Reference in New Issue
Block a user