diff --git a/spike/00-bootstrap-termux.sh b/spike/00-bootstrap-termux.sh index 0a1aba5..9728249 100755 --- a/spike/00-bootstrap-termux.sh +++ b/spike/00-bootstrap-termux.sh @@ -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" diff --git a/spike/lib.sh b/spike/lib.sh index bf6fa67..0462c32 100755 --- a/spike/lib.sh +++ b/spike/lib.sh @@ -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