Rootfs am Anmeldeversuch erkennen, nicht an Pfaden

Der zweite Bootstrap-Lauf brach ab, obwohl beim ersten alles stand: proot-distro
hat sein Ablageformat gewechselt — sichtbar an 'Migrating legacy container' —
und danach lag das Rootfs nicht mehr dort, wo meine Prüfung nachsah. Sie meldete
'nicht installiert', die folgende Installation scheiterte an 'already installed',
und der Lauf brach ab. Ein Fehler in der Erkennung, nicht auf dem Gerät.

Geprüft wird jetzt mit 'proot-distro login <distro> -- true'. Das fragt nicht, wo
etwas liegt oder wie eine Ausgabe formatiert ist, sondern ob es funktioniert —
und überlebt damit auch den nächsten Formatwechsel.

Zusätzlich gilt 'already installed' nicht mehr als Fehler: entscheidend ist
allein, ob die Anmeldung danach klappt. Tut sie es nicht, nennt das Skript die
Handgriffe zum Neuaufsetzen, statt nur abzubrechen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-10 22:03:26 +02:00
co-authored by Claude Opus 5
parent 10851df46a
commit f20ad44e25
2 changed files with 38 additions and 9 deletions
+32 -5
View File
@@ -260,13 +260,40 @@ if ! proot-distro list >/dev/null 2>&1; then
ok "proot-distro läuft wieder"
fi
if proot-distro list --installed 2>/dev/null | grep -q "^$DISTRO\b" \
|| [ -d "$PREFIX/var/lib/proot-distro/installed-rootfs/$DISTRO" ]; then
ok "$DISTRO bereits installiert"
# Ob ein Rootfs da ist, wird nicht mehr an Pfaden oder Ausgabeformaten festgemacht:
# proot-distro hat sein Ablageformat gewechselt (erkennbar an der Meldung
# "Migrating legacy container"), und danach lag das Rootfs woanders als erwartet.
# Ein Anmeldeversuch ist die einzige Prüfung, die das nicht betrifft — sie fragt
# nicht, wo etwas liegt, sondern ob es funktioniert.
rootfs_laeuft() { proot-distro login "$DISTRO" -- true >/dev/null 2>&1; }
if rootfs_laeuft; then
ok "$DISTRO bereits installiert und lauffähig"
else
log " Installiere $DISTRO — das dauert einige Minuten."
need proot-distro install "$DISTRO"
ok "$DISTRO installiert"
if proot-distro install "$DISTRO" >>"$LOG" 2>&1; then
ok "$DISTRO installiert"
else
# 'already installed' ist kein Fehler, sondern ein Wettlauf zwischen
# meiner Prüfung und der Wirklichkeit. Entscheidend ist allein, ob sich
# danach anmelden lässt.
if grep -qi 'already installed' "$LOG"; then
warn "proot-distro meldet: bereits installiert"
else
warn "Installation meldete einen Fehler:"
tail -n 12 "$LOG" | sed 's/^/ /'
fi
if rootfs_laeuft; then
ok "Anmeldung funktioniert trotzdem — weiter."
else
fail "Kein lauffähiges $DISTRO-Rootfs."
log ""
log " Von Hand versuchen:"
log " proot-distro list --installed"
log " proot-distro remove $DISTRO && proot-distro install $DISTRO"
exit 1
fi
fi
fi
section "Debian-Grundausstattung"
+6 -4
View File
@@ -100,11 +100,13 @@ voraussetzungen_pruefen() {
fi
ok "proot-distro ausführbar"
if proot-distro list --installed 2>/dev/null | grep -q "^$distro\b" \
|| [ -d "$PREFIX/var/lib/proot-distro/installed-rootfs/$distro" ]; then
ok "$distro-Rootfs vorhanden"
# Anmeldeversuch statt Pfad- oder Ausgabeprüfung: proot-distro hat sein
# Ablageformat gewechselt, und danach lag das Rootfs woanders als erwartet.
# Diese Prüfung fragt nicht, wo etwas liegt, sondern ob es funktioniert.
if proot-distro login "$distro" -- true >/dev/null 2>&1; then
ok "$distro-Rootfs lauffähig"
else
fail "$distro-Rootfs fehlt"
fail "$distro-Rootfs fehlt oder startet nicht"
hint "Nachholen mit: bash spike/00-bootstrap-termux.sh"
fehlt=1
fi