Files
linux-on-android-without-root/provision/init-phone.sh
T
StefanandClaude Opus 5 a58754dbfc Nur ein Startskript per adb, Rest über git; Berechtigungen beim Installieren
Bisher schob provision.sh das ganze Repo nach /sdcard. Auf dem Telefon lag damit
eine Kopie, und jede Änderung hätte wieder den PC gebraucht. Jetzt kommt per adb
nur init-phone.sh: es installiert git und klont die Quellen nach ~/hpos. Danach
ist das eine echte Arbeitskopie und Aktualisieren heißt

    cd ~/hpos && git pull

Die Repo-Adresse liest provision.sh aus dem origin-Remote und schreibt sie fest
ins übertragene Skript, damit auf einer Bildschirmtastatur nichts abgetippt
werden muss. Bei privaten Repos bietet init-phone.sh an, das Passwort zu
speichern — mit dem ausdrücklichen Hinweis, dass das im Klartext geschieht.

Die Berechtigungen wandern von provision.sh nach install-termux.sh, direkt hinter
die Installation. Eine frisch installierte App ohne Berechtigungen ist eine Falle,
die erst Stunden später zuschnappt: im ersten Gerätelauf als stumme Tonaufnahme
in Beweis S2. RECORD_AUDIO für com.termux wird danach ausdrücklich nachgeprüft,
weil genau daran der Beweis hängt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 16:52:50 +02:00

116 lines
4.4 KiB
Bash
Executable File

#!/data/data/com.termux/files/usr/bin/bash
# HPOS — Startpunkt auf dem Telefon.
#
# Dieses Skript ist absichtlich das EINZIGE, was per adb aufs Telefon kommt.
# Alles Weitere holt es sich per git. Der Grund: danach ist das Repo auf dem
# Telefon eine Arbeitskopie, keine Kopie. Aktualisieren heißt dann schlicht
#
# cd ~/hpos && git pull
#
# statt jedes Mal wieder den PC anzuwerfen und Dateien zu schieben.
#
# Aufruf in Termux:
# bash /sdcard/hpos-init.sh
# bash /sdcard/hpos-init.sh https://beispiel/anderes-repo.git
set -uo pipefail
REPO="${1:-${HPOS_REPO:-@@REPO_URL@@}}"
ZIEL="$HOME/hpos"
if [ -t 1 ]; then
C_OK=$'\033[32m'; C_WARN=$'\033[33m'; C_ERR=$'\033[31m'
C_HEAD=$'\033[1;36m'; C_DIM=$'\033[2m'; C_OFF=$'\033[0m'
else
C_OK=""; C_WARN=""; C_ERR=""; C_HEAD=""; C_DIM=""; C_OFF=""
fi
kopf() { printf '\n%s══ %s ══%s\n' "$C_HEAD" "$*" "$C_OFF"; }
ok() { printf '%s ✓%s %s\n' "$C_OK" "$C_OFF" "$*"; }
warn() { printf '%s !%s %s\n' "$C_WARN" "$C_OFF" "$*"; }
fehl() { printf '%s ✗%s %s\n' "$C_ERR" "$C_OFF" "$*"; }
hinweis() { printf '%s %s%s\n' "$C_DIM" "$*" "$C_OFF"; }
case "$REPO" in
@@*) fehl "Keine Repo-Adresse hinterlegt."
hinweis "Aufruf mit Adresse: bash /sdcard/hpos-init.sh <url>"
exit 1 ;;
esac
kopf "HPOS — Ersteinrichtung auf dem Telefon"
hinweis "Repo: $REPO"
# ── git ──────────────────────────────────────────────────────────────────────
kopf "git"
if command -v git >/dev/null 2>&1; then
ok "bereits vorhanden ($(git --version))"
else
pkg update -y >/dev/null 2>&1
if pkg install -y git; then ok "installiert"
else fehl "Installation von git fehlgeschlagen"; exit 1; fi
fi
# ── Zugangsdaten ─────────────────────────────────────────────────────────────
# Bei einem privaten Repo fragt git bei jedem Zugriff nach dem Passwort. Auf einer
# Bildschirmtastatur ist das eine Zumutung, deshalb wird der Speicher angeboten.
# Er legt die Zugangsdaten im Klartext unter ~/.git-credentials ab — das gehört
# gesagt, damit die Entscheidung bewusst fällt.
case "$REPO" in
https://*@*)
if [ ! -f "$HOME/.git-credentials" ]; then
kopf "Zugangsdaten"
hinweis "Das Repo verlangt vermutlich ein Passwort."
printf ' Nach der Eingabe dauerhaft merken? (Klartext in ~/.git-credentials) [j/N] > '
read -r MERKEN
case "${MERKEN:-n}" in
j|J) git config --global credential.helper store
ok "Passwort wird nach der ersten Eingabe gespeichert" ;;
*) hinweis "Dann fragt git bei jedem Zugriff erneut." ;;
esac
fi
;;
esac
# ── Holen oder aktualisieren ─────────────────────────────────────────────────
kopf "Repo"
if [ -d "$ZIEL/.git" ]; then
ok "Arbeitskopie vorhanden — aktualisiere"
if git -C "$ZIEL" pull --ff-only; then
ok "aktuell"
else
warn "git pull fehlgeschlagen."
hinweis "Lokale Änderungen? Dann: cd ~/hpos && git stash && git pull"
exit 1
fi
else
if git clone "$REPO" "$ZIEL"; then
ok "geklont nach $ZIEL"
else
fehl "git clone fehlgeschlagen."
hinweis "Bei privaten Repos: Benutzername und Passwort prüfen."
hinweis "Adresse war: $REPO"
exit 1
fi
fi
chmod +x "$ZIEL"/spike/*.sh "$ZIEL"/spike/inner/*.sh 2>/dev/null || true
# ── Weiter ───────────────────────────────────────────────────────────────────
kopf "Fertig"
cat <<TEXT
Das Repo liegt jetzt unter ~/hpos und ist eine Arbeitskopie.
Aktualisieren später:
cd ~/hpos && git pull
Nächster Schritt:
cd ~/hpos
bash spike/00-bootstrap-termux.sh
Danach die Beweise der Reihe nach — S1 zuerst, weil er der wackligste ist:
bash spike/01-s1-plasma-mobile.sh
bash spike/02-s2-mikrofon.sh
bash spike/03-s3-pipewire-kamera.sh
bash spike/04-s4-intent-handoff.sh
TEXT