diff --git a/provision/init-phone.sh b/provision/init-phone.sh index 8dd1fc4..fc3cd74 100755 --- a/provision/init-phone.sh +++ b/provision/init-phone.sh @@ -61,14 +61,34 @@ else hinweis "Das dauert und lädt einiges. Es erspart aber genau die Fehler," hinweis "die sonst erst Stunden später als kaputtes proot-distro auffallen." export DEBIAN_FRONTEND=noninteractive - # --force-confold: vorhandene Konfigurationsdateien behalten, statt mitten im - # Lauf eine Rückfrage zu stellen, die niemand beantwortet. - if pkg update -y && pkg upgrade -y -o Dpkg::Options::=--force-confold; then + + # Beim Wechsel der Python-Version wirft dpkg dutzende Zeilen + # "unable to delete old directory ... Directory not empty". Das sind + # Warnungen, keine Fehler: in site-packages liegen noch .pyc-Dateien oder + # selbst installierte Module. Sie herauszufiltern ist kein Verstecken — + # sie verdecken sonst die eine Zeile, auf die es ankommt. + rauschfilter() { grep -viE 'unable to delete old directory|^(Unpacking|Preparing|Selecting) '; } + + # --force-confold: vorhandene Konfiguration behalten, statt mitten im Lauf + # eine Rückfrage zu stellen, die niemand beantwortet. + pkg update -y 2>&1 | rauschfilter + if pkg upgrade -y -o Dpkg::Options::=--force-confold 2>&1 | rauschfilter; then ok "Termux ist aktuell" else - warn "Das Upgrade lief nicht sauber durch." - hinweis "Weiter geht es trotzdem — aber merken, falls später etwas klemmt." - hinweis "Von Hand nachziehen: pkg update && pkg upgrade -y" + warn "Das Upgrade brach ab. Versuche zu reparieren …" + # Die übliche Ursache ist ein einzelnes Paket, das sich nicht auspacken + # ließ. Danach steckt dpkg halb fertig fest und blockiert alles Weitere. + dpkg --configure -a 2>&1 | rauschfilter + apt-get -f install -y 2>&1 | rauschfilter + if pkg upgrade -y -o Dpkg::Options::=--force-confold 2>&1 | rauschfilter; then + ok "Nach der Reparatur durchgelaufen" + else + warn "Bleibt unvollständig." + hinweis "Speicherplatz prüfen: df -h \$PREFIX" + hinweis "Fehler ohne Rauschen ansehen:" + hinweis " pkg upgrade -y 2>&1 | grep -viE 'unable to delete' | tail -20" + hinweis "Weiter geht es trotzdem — aber hier ansetzen, falls später etwas klemmt." + fi fi fi diff --git a/spike/00-bootstrap-termux.sh b/spike/00-bootstrap-termux.sh index 3cd50d1..51239f7 100755 --- a/spike/00-bootstrap-termux.sh +++ b/spike/00-bootstrap-termux.sh @@ -37,7 +37,28 @@ else if try pkg upgrade -y -o Dpkg::Options::=--force-confold; then ok "Termux ist aktuell" else - warn "Upgrade lief nicht sauber durch — bei späteren Fehlern hier ansetzen." + warn "Upgrade brach ab — versuche zu reparieren." + # Meist scheitert ein einzelnes Paket beim Auspacken, danach steckt dpkg + # halb fertig fest und blockiert jede weitere Installation. + try dpkg --configure -a + try apt-get -f install -y + if try pkg upgrade -y -o Dpkg::Options::=--force-confold; then + ok "Nach der Reparatur durchgelaufen" + else + warn "Bleibt unvollständig." + hint "Speicherplatz: df -h \$PREFIX" + hint "Freier Platz unter etwa 1 GB ist die häufigste Ursache." + hint "Fehler ohne Rauschen: pkg upgrade -y 2>&1 | grep -viE 'unable to delete' | tail -20" + hint "Die vielen 'unable to delete old directory' sind Warnungen, keine Fehler." + fi + fi + # Platz prüfen, solange es noch nicht weh tut: das Debian-Rootfs samt Plasma + # Mobile braucht mehrere GB, und ein Abbruch mitten im Entpacken ist ärgerlicher + # als eine Warnung vorher. + FREI_KB=$(df -Pk "$PREFIX" 2>/dev/null | awk 'NR==2 {print $4}') + if [ -n "$FREI_KB" ]; then + log " Freier Speicher: $((FREI_KB / 1024)) MB" + [ "$FREI_KB" -lt 2000000 ] && warn "Unter 2 GB frei — für Debian plus Plasma Mobile knapp." fi fi