Vorabprüfung: proot-distro und Rootfs vor jedem Beweis
Aus dem Gerätelauf: S2 lief bis Stufe 1 durch und scheiterte dann an 'proot-distro: cannot execute: required file not found'. Danach meldete die Auswertung folgerichtig 'S2 gescheitert' — was den Beweis inhaltlich belastet, obwohl nur die Grundlage fehlte. Genau diese Verwechslung soll der Spike nicht produzieren. Alle Beweise prüfen jetzt vorab, ob proot-distro ausführbar ist und das Rootfs steht, und brechen sonst mit klarer Ansage ab statt mitten im Test aufzulaufen. Die Meldung selbst ist irreführend: 'required file not found' heißt nicht, dass proot-distro fehlt — bash hat es gefunden und nennt den vollen Pfad. Es fehlt der Interpreter aus dessen Shebang-Zeile. Die Prüfung sagt das ausdrücklich und nennt Datei und Shebang, statt den Suchenden an der falschen Stelle graben zu lassen. 00-bootstrap versucht in dem Fall selbsttätig eine Neuinstallation. Dazu die Berechtigungsprüfung entschärft: dumpsys verlangt die DUMP-Berechtigung, die eine gewöhnliche App nicht hat. Das Fehlschlagen ist erwartbar und kein Warnsignal; die Meldung nennt jetzt den Weg über adb statt Ratlosigkeit zu säen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -118,6 +118,24 @@ try termux-wake-lock && ok "Wake-Lock aktiv" || warn "Wake-Lock nicht gesetzt"
|
|||||||
|
|
||||||
# ── Debian-Rootfs ────────────────────────────────────────────────────────────
|
# ── Debian-Rootfs ────────────────────────────────────────────────────────────
|
||||||
section "Debian-Rootfs"
|
section "Debian-Rootfs"
|
||||||
|
# Erst prüfen, ob proot-distro überhaupt LÄUFT. Ein installiertes Paket, dessen
|
||||||
|
# Shebang-Interpreter fehlt, meldet sich mit "cannot execute: required file not
|
||||||
|
# found" — eine Meldung, die aussieht als fehle das Programm, obwohl es da ist.
|
||||||
|
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
|
||||||
|
if ! proot-distro list >/dev/null 2>&1; then
|
||||||
|
fail "Bleibt defekt — ohne proot-distro geht es nicht weiter."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
ok "Nach der Neuinstallation läuft proot-distro"
|
||||||
|
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" \
|
||||||
|| [ -d "$PREFIX/var/lib/proot-distro/installed-rootfs/$DISTRO" ]; then
|
|| [ -d "$PREFIX/var/lib/proot-distro/installed-rootfs/$DISTRO" ]; then
|
||||||
ok "$DISTRO bereits installiert"
|
ok "$DISTRO bereits installiert"
|
||||||
|
|||||||
@@ -27,6 +27,12 @@ log "HPOS Phase 0 · S1 — Plasma Mobile in proot"
|
|||||||
log "Auflösung: ${BREITE}x${HOEHE} GPU-Profil: $GPU_PROFIL"
|
log "Auflösung: ${BREITE}x${HOEHE} GPU-Profil: $GPU_PROFIL"
|
||||||
log "Protokoll: $LOG"
|
log "Protokoll: $LOG"
|
||||||
|
|
||||||
|
voraussetzungen_pruefen "$DISTRO" || {
|
||||||
|
log ""
|
||||||
|
fail "Abbruch: die Grundlage steht nicht. S1 wäre nicht aussagekräftig."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
# ── Alte Reste einsammeln ────────────────────────────────────────────────────
|
# ── Alte Reste einsammeln ────────────────────────────────────────────────────
|
||||||
section "Aufräumen"
|
section "Aufräumen"
|
||||||
pkill -f termux-x11 2>/dev/null && ok "alten X-Server beendet" || hint "kein alter X-Server"
|
pkill -f termux-x11 2>/dev/null && ok "alten X-Server beendet" || hint "kein alter X-Server"
|
||||||
|
|||||||
+14
-2
@@ -24,20 +24,32 @@ WAV="$OUT_DIR/$WAV_NAME"
|
|||||||
log "HPOS Phase 0 · S2 — Mikrofon im Linux"
|
log "HPOS Phase 0 · S2 — Mikrofon im Linux"
|
||||||
log "Protokoll: $LOG"
|
log "Protokoll: $LOG"
|
||||||
|
|
||||||
|
voraussetzungen_pruefen "$DISTRO" || {
|
||||||
|
log ""
|
||||||
|
fail "Abbruch: die Grundlage steht nicht. S2 wäre nicht aussagekräftig."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
# ── Berechtigung ─────────────────────────────────────────────────────────────
|
# ── Berechtigung ─────────────────────────────────────────────────────────────
|
||||||
# Der häufigste Grund für eine formal korrekte, aber stumme Aufnahme: PulseAudio
|
# Der häufigste Grund für eine formal korrekte, aber stumme Aufnahme: PulseAudio
|
||||||
# läuft IM Termux-Prozess und öffnet das Mikrofon über OpenSL ES von dort aus.
|
# läuft IM Termux-Prozess und öffnet das Mikrofon über OpenSL ES von dort aus.
|
||||||
# Eine Berechtigung, die nur Termux:API hat, nützt ihm deshalb nichts.
|
# Eine Berechtigung, die nur Termux:API hat, nützt ihm deshalb nichts.
|
||||||
section "Mikrofonberechtigung von Termux"
|
section "Mikrofonberechtigung von Termux"
|
||||||
BERECHTIGT="unbekannt"
|
BERECHTIGT="unbekannt"
|
||||||
if RECHTE=$(dumpsys package com.termux 2>/dev/null | grep -i 'RECORD_AUDIO'); then
|
RECHTE=$(dumpsys package com.termux 2>/dev/null | grep -i 'RECORD_AUDIO' || true)
|
||||||
|
if [ -n "$RECHTE" ]; then
|
||||||
log "$(printf '%s' "$RECHTE" | sed 's/^/ /')"
|
log "$(printf '%s' "$RECHTE" | sed 's/^/ /')"
|
||||||
case "$RECHTE" in
|
case "$RECHTE" in
|
||||||
*granted=true*) BERECHTIGT=ja; ok "com.termux darf aufnehmen" ;;
|
*granted=true*) BERECHTIGT=ja; ok "com.termux darf aufnehmen" ;;
|
||||||
*granted=false*) BERECHTIGT=nein; fail "com.termux darf NICHT aufnehmen" ;;
|
*granted=false*) BERECHTIGT=nein; fail "com.termux darf NICHT aufnehmen" ;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
warn "Konnte den Berechtigungsstatus nicht auslesen"
|
# Erwartbar: dumpsys verlangt die DUMP-Berechtigung, die eine gewöhnliche App
|
||||||
|
# nicht hat. Kein Grund zur Sorge, aber der Status bleibt hier eben offen.
|
||||||
|
warn "Status von hier aus nicht auslesbar (dumpsys ist Apps verwehrt)"
|
||||||
|
hint "Vom PC prüfen: adb shell dumpsys package com.termux | grep RECORD_AUDIO"
|
||||||
|
hint "Setzen: adb shell pm grant com.termux android.permission.RECORD_AUDIO"
|
||||||
|
hint "Oder am Gerät: Einstellungen → Apps → Termux → Berechtigungen → Mikrofon"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$BERECHTIGT" = nein ]; then
|
if [ "$BERECHTIGT" = nein ]; then
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ DISTRO=debian
|
|||||||
|
|
||||||
log "HPOS Phase 0 · S3 — Virtuelle PipeWire-Kamera"
|
log "HPOS Phase 0 · S3 — Virtuelle PipeWire-Kamera"
|
||||||
log "Protokoll: $LOG"
|
log "Protokoll: $LOG"
|
||||||
|
|
||||||
|
voraussetzungen_pruefen "$DISTRO" || {
|
||||||
|
log ""
|
||||||
|
fail "Abbruch: die Grundlage steht nicht. S3 wäre nicht aussagekräftig."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
log ""
|
log ""
|
||||||
log "Voraussetzung: ein laufender X-Server aus S1."
|
log "Voraussetzung: ein laufender X-Server aus S1."
|
||||||
log "Falls nicht, in einer zweiten Sitzung: termux-x11 :0 &"
|
log "Falls nicht, in einer zweiten Sitzung: termux-x11 :0 &"
|
||||||
|
|||||||
@@ -65,6 +65,53 @@ require_termux() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Prüft, ob die Grundlage steht, BEVOR ein Beweis losläuft. Ohne das scheitert ein
|
||||||
|
# Test mitten im Ablauf und sieht aus wie ein inhaltlicher Fehlschlag, obwohl nur
|
||||||
|
# die Vorbereitung fehlt — die irreführendste Sorte Fehler.
|
||||||
|
voraussetzungen_pruefen() {
|
||||||
|
local distro="${1:-debian}" fehlt=0
|
||||||
|
|
||||||
|
section "Voraussetzungen"
|
||||||
|
|
||||||
|
if ! have proot-distro; then
|
||||||
|
fail "proot-distro ist nicht installiert"
|
||||||
|
hint "Nachholen mit: bash spike/00-bootstrap-termux.sh"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 'cannot execute: required file not found' heißt NICHT, dass das Skript fehlt.
|
||||||
|
# Es heißt, dass der Interpreter aus seiner Shebang-Zeile fehlt. Der Unterschied
|
||||||
|
# kostet sonst eine halbe Stunde Suche an der falschen Stelle.
|
||||||
|
local pfad interpreter
|
||||||
|
pfad="$(command -v proot-distro)"
|
||||||
|
if ! proot-distro list >/dev/null 2>&1; then
|
||||||
|
fail "proot-distro lässt sich nicht ausführen"
|
||||||
|
interpreter="$(head -1 "$pfad" 2>/dev/null | sed 's|^#!||; s| .*||')"
|
||||||
|
log " Datei: $pfad"
|
||||||
|
log " Shebang: ${interpreter:-(keine)}"
|
||||||
|
if [ -n "$interpreter" ] && [ ! -x "$interpreter" ]; then
|
||||||
|
fail "Der Interpreter $interpreter fehlt oder ist nicht ausführbar."
|
||||||
|
hint "Das ist die Ursache, nicht proot-distro selbst."
|
||||||
|
hint "Reparieren mit: pkg install -y bash coreutils proot proot-distro"
|
||||||
|
else
|
||||||
|
hint "Reparieren mit: pkg reinstall -y proot-distro"
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
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"
|
||||||
|
else
|
||||||
|
fail "$distro-Rootfs fehlt"
|
||||||
|
hint "Nachholen mit: bash spike/00-bootstrap-termux.sh"
|
||||||
|
fehlt=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $fehlt
|
||||||
|
}
|
||||||
|
|
||||||
# Fragt am Ende jedes Beweises nach dem, was nur ein Mensch beurteilen kann:
|
# Fragt am Ende jedes Beweises nach dem, was nur ein Mensch beurteilen kann:
|
||||||
# ob es tatsächlich funktioniert hat. Das Ergebnis geht ins Protokoll.
|
# ob es tatsächlich funktioniert hat. Das Ergebnis geht ins Protokoll.
|
||||||
verdict() {
|
verdict() {
|
||||||
|
|||||||
Reference in New Issue
Block a user