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.
|
# zur Laufzeit; das Ergebnis landet im GPU-Profil.
|
||||||
section "GPU-Pakete"
|
section "GPU-Pakete"
|
||||||
GPU_PKGS=(virglrenderer-android vulkan-loader-android vulkan-tools angle-android
|
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
|
for p in "${GPU_PKGS[@]}"; do
|
||||||
if try pkg install -y "$p"; then ok "$p"; else warn "$p nicht verfügbar — kein Beinbruch"; fi
|
if try pkg install -y "$p"; then ok "$p"; else warn "$p nicht verfügbar — kein Beinbruch"; fi
|
||||||
done
|
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"
|
section "GPU erkennen"
|
||||||
PLATFORM="$(getprop ro.board.platform 2>/dev/null)"
|
PLATFORM="$(getprop ro.board.platform 2>/dev/null)"
|
||||||
HARDWARE="$(getprop ro.hardware 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
|
if ! proot-distro list >/dev/null 2>&1; then
|
||||||
fail "proot-distro ist installiert, lässt sich aber nicht ausführen"
|
fail "proot-distro ist installiert, lässt sich aber nicht ausführen"
|
||||||
PD="$(command -v proot-distro)"
|
PD="$(command -v proot-distro)"
|
||||||
log " Datei: $PD"
|
SHEBANG="$(head -1 "$PD" 2>/dev/null)"
|
||||||
log " Shebang: $(head -1 "$PD" 2>/dev/null)"
|
INTERPRETER="$(printf '%s' "$SHEBANG" | sed 's|^#!||; s| .*||')"
|
||||||
hint "Meist fehlt der Interpreter aus der Shebang-Zeile, nicht das Programm."
|
log " Datei: $PD"
|
||||||
hint "Reparaturversuch:"
|
log " Shebang: $SHEBANG"
|
||||||
try pkg install -y bash coreutils proot proot-distro
|
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
|
if ! proot-distro list >/dev/null 2>&1; then
|
||||||
fail "Bleibt defekt — ohne proot-distro geht es nicht weiter."
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
ok "Nach der Neuinstallation läuft proot-distro"
|
ok "proot-distro läuft wieder"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if proot-distro list --installed 2>/dev/null | grep -q "^$DISTRO\b" \
|
if proot-distro list --installed 2>/dev/null | grep -q "^$DISTRO\b" \
|
||||||
|
|||||||
Reference in New Issue
Block a user