Compare commits

...
2 Commits
Author SHA1 Message Date
StefanandClaude Opus 5 1cea1df9e7 init-phone: Benutzername aus der Klon-Adresse entfernen
Das Repo ist anonym lesbar; Zugangsdaten braucht nur der Push, und der findet auf
dem PC statt. Stand der Benutzername trotzdem in der URL, fragte git auf dem
Telefon nach einem Passwort — auf einer Bildschirmtastatur eine unnötige Quälerei
für einen Zugriff, der gar keine Anmeldung erfordert.

provision.sh entfernt ihn beim Einsetzen der Adresse, init-phone.sh zusätzlich
beim Ausführen — so ist auch eine von Hand übergebene Adresse abgedeckt. Die
Ersetzung greift nur bei http(s); SSH-Adressen bleiben unberührt, dort ist git@
zwingend.

Damit entfällt auch das Angebot, Zugangsdaten auf dem Telefon zu speichern. Der
credential.helper wird dort stattdessen ausdrücklich geleert: das Telefon liest
nur und soll nie versehentlich zurückschreiben wollen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 17:04:38 +02:00
StefanandClaude Opus 5 c7221e18ad README auf den tatsächlichen Ablauf gebracht
Der beschriebene Weg stimmte nicht mehr mit den Skripten überein: die
Termux-Installation per adb fehlte, und das Repo kommt inzwischen nicht mehr per
push aufs Telefon, sondern über init-phone.sh und git clone. Dazu der
Aktualisierungsweg, der ohne PC auskommt.

Zwei Korrekturen an Aussagen, die schlicht falsch geworden waren:

Die Lizenzangabe behauptete, das Projekt verteile Termux mit und erfülle darüber
die Quellen-Angebotspflicht. Seit install-termux.sh werden die APKs zur Laufzeit
von den offiziellen Releases geladen — mitverteilt wird nichts, die Pflicht
entsteht so nicht. Für den Fall, dass die Installer-APK in Phase 2 Termux als
Asset mitbringt, ist der Hinweis stehen geblieben.

Der Link auf die Geräte-Meldung zeigte ins Leere. Die Vorlage gibt es jetzt, mit
Feldern für den Hintergrundbetrieb — der entscheidet über die Alltagstauglichkeit
und fehlt in solchen Meldungen sonst regelmäßig.

Dazu ein englischer Schnellstart, damit die Einstiegshürde nicht an der Sprache
hängt, solange die übrige Dokumentation deutsch ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 16:56:14 +02:00
4 changed files with 154 additions and 32 deletions
+61
View File
@@ -0,0 +1,61 @@
---
name: Gerät melden
about: Ergebnis der Phase-0-Beweise auf deinem Telefon — Erfolg wie Fehlschlag
title: "[Gerät] Hersteller Modell (Android X)"
labels: geraet
---
**Ein Fehlschlag ist genauso wertvoll wie ein Erfolg.** Sauber dokumentiert zeigt er,
wo die Grenze verläuft — und das ist für andere oft nützlicher als eine weitere
Erfolgsmeldung. Bitte nichts beschönigen und nichts weglassen.
## Gerät
| | |
|---|---|
| Hersteller und Modell | |
| Codename (`getprop ro.product.device`) | |
| SoC / GPU | |
| Android-Version und ROM | |
| RAM / freier Speicher | |
## Ergebnisse
| Beweis | Ergebnis | Anmerkung |
|---|---|---|
| **S1** Plasma Mobile in proot | ⬜ bestanden / ⬜ gescheitert / ⬜ teilweise | |
| **S2** Mikrofon im Linux | ⬜ bestanden / ⬜ gescheitert / ⬜ teilweise | |
| **S3** Virtuelle PipeWire-Kamera | ⬜ bestanden / ⬜ gescheitert / ⬜ teilweise | |
| **S4** Intent-Handoff | ⬜ bestanden / ⬜ gescheitert / ⬜ teilweise | |
| **Übernacht-Test** | ⬜ bestanden / ⬜ gescheitert | |
## Leistung
| | |
|---|---|
| GPU-Pfad (Turnip / Zink / virgl / Software) | |
| `glmark2` | |
| Virtuelle Auflösung | |
| Akkuverbrauch im Leerlauf mit laufendem Stack | |
## Hintergrundbetrieb
Manche ROMs beenden Hintergrundprozesse deutlich aggressiver als andere. Das entscheidet
über die Alltagstauglichkeit, deshalb bitte ausfüllen:
- Welche Handgriffe waren nötig, damit der Stack eine Nacht überlebt?
- Was hat das ROM trotzdem beendet?
## Was schiefging
Bitte die Protokolle aus `spike/out/*.log` anhängen oder die entscheidenden Zeilen
einfügen. Interessant ist vor allem, **woran** etwas gescheitert ist — nicht nur, dass.
<details>
<summary>Protokoll</summary>
```
hier einfügen
```
</details>
+69 -11
View File
@@ -41,24 +41,59 @@ Ergebnisse landen in [`docs/spike-protokoll.md`](docs/spike-protokoll.md).
Getestet wird auf einem **OnePlus 7 Pro (Snapdragon 855, Adreno 640) mit Stock OxygenOS 12**.
Voraussetzung ist nur, dass die Entwickleroptionen aktiv sind. **Ein USB-Kabel wird
nicht gebraucht** — ab Android 11 läuft die Ersteinrichtung über WLAN.
### Auf dem PC
```bash
# 1. Auf dem PC. Verbindet per USB oder WLAN — das Skript fragt danach.
# Ein Kabel wird nicht gebraucht: Android 11+ kann Wireless Debugging.
# Fehlt Termux, bietet es an, alle vier Apps herunterzuladen und
# fernzuinstallieren (oder direkt: ./provision/install-termux.sh).
./provision/provision.sh
./provision/adb-wireless.sh # Verbindung per WLAN (oder Kabel anstecken)
./provision/install-termux.sh # lädt Termux + 3 Zusatz-Apps, installiert sie,
# erteilt die nötigen Berechtigungen
./provision/provision.sh # Akku- und Hintergrundeinstellungen,
# legt das Startskript aufs Telefon
```
`provision.sh` allein genügt auch — es ruft die anderen bei Bedarf selbst auf.
### Auf dem Telefon, in Termux
```bash
bash /sdcard/hpos-init.sh # installiert git, klont das Repo nach ~/hpos
cd ~/hpos
# 2. Auf dem Telefon in Termux:
bash spike/00-bootstrap-termux.sh
# 3. Beweise der Reihe nach:
bash spike/01-s1-plasma-mobile.sh
bash spike/01-s1-plasma-mobile.sh # S1 zuerst — der wackligste Beweis
bash spike/02-s2-mikrofon.sh
bash spike/03-s3-pipewire-kamera.sh
bash spike/04-s4-intent-handoff.sh
```
Details und Voraussetzungen: [`spike/README.md`](spike/README.md).
### Aktualisieren
Per adb kommt bewusst **nur das Startskript** aufs Telefon, nicht das Repo selbst.
Dadurch liegt dort eine echte Arbeitskopie — spätere Änderungen brauchen keinen PC:
```bash
cd ~/hpos && git pull
```
Details, Stellschrauben und was bei Fehlschlägen zu tun ist:
[`spike/README.md`](spike/README.md).
### Warum Termux nicht aus dem Play Store
Termux und seine Plugins teilen sich eine Android-UID. Android verlangt für Apps mit
gemeinsamer UID **denselben Signaturschlüssel** — mischt man F-Droid und GitHub,
scheitert die Installation mit `INSTALL_FAILED_SHARED_USER_INCOMPATIBLE`, ohne dass
die Meldung den Grund nennt. `install-termux.sh` nimmt deshalb durchgängig GitHub und
räumt vorhandene Installationen aus fremder Quelle auf Nachfrage weg.
Nebeneffekt der Entscheidung: Termux:X11 gibt es dort in einer sharedUid-Variante, die
in Termux' Prozessgruppe läuft und dessen Akku-Ausnahmen erbt. Bei ROMs, die
Hintergrund-Apps aggressiv beenden, ist das der Unterschied zwischen „läuft über Nacht"
und „war morgens weg".
## Dokumentation
@@ -78,8 +113,12 @@ Läuft es bei dir? [Geräte-Meldung eröffnen](.github/ISSUE_TEMPLATE/geraet-mel
## Lizenz
GPLv3 — siehe [LICENSE](LICENSE). Das Projekt verteilt Termux (GPLv3) mit;
die einheitliche Lizenz erfüllt die Quellen-Angebotspflicht.
GPLv3 — siehe [LICENSE](LICENSE).
Termux wird **nicht mitverteilt**: `install-termux.sh` lädt die APKs zur Laufzeit von
den offiziellen GitHub-Releases. Eine Quellen-Angebotspflicht entsteht dadurch nicht.
Sollte die Installer-APK in Phase 2 Termux als Asset mitbringen, ändert sich das —
die einheitliche GPLv3 deckt es dann ab.
---
@@ -95,4 +134,23 @@ Currently in **Phase 0** — proving four load-bearing assumptions (S1S4 abov
any infrastructure gets built. See [`spike/`](spike/) and
[`docs/spike-protokoll.md`](docs/spike-protokoll.md).
## Quick start
No USB cable needed — Android 11+ pairs over WLAN.
```bash
# On the PC
./provision/adb-wireless.sh # pair and connect over WLAN
./provision/install-termux.sh # download and remote-install Termux + addons
./provision/provision.sh # battery/background settings, push init script
# On the phone, in Termux
bash /sdcard/hpos-init.sh # installs git, clones this repo to ~/hpos
cd ~/hpos && bash spike/00-bootstrap-termux.sh
```
Updating later needs no PC: `cd ~/hpos && git pull`.
Documentation is currently German-first; English will follow once Phase 0 concludes.
Device reports are welcome in either language — a well-documented failure is as
valuable as a success.
+15 -21
View File
@@ -35,8 +35,16 @@ case "$REPO" in
exit 1 ;;
esac
# Benutzernamen aus der Adresse entfernen. Lesen geht anonym; steht ein Name in
# der URL, fragt git trotzdem nach einem Passwort — auf einer Bildschirmtastatur
# eine unnötige Quälerei. Zum Schreiben braucht man ihn ohnehin nur auf dem PC.
REPO_ROH="$REPO"
REPO=$(printf '%s' "$REPO" | sed -E 's#^(https?://)[^/@]+@#\1#')
[ "$REPO" != "$REPO_ROH" ] && ANONYM=1 || ANONYM=0
kopf "HPOS — Ersteinrichtung auf dem Telefon"
hinweis "Repo: $REPO"
[ "$ANONYM" = 1 ] && hinweis "(Benutzername entfernt — gelesen wird anonym)"
# ── git ──────────────────────────────────────────────────────────────────────
kopf "git"
@@ -48,26 +56,9 @@ else
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
# Das Telefon liest nur. Es soll nie versehentlich versuchen zurückzuschreiben —
# ein Push von hier wäre weder gewollt noch möglich.
git config --global credential.helper "" 2>/dev/null || true
# ── Holen oder aktualisieren ─────────────────────────────────────────────────
kopf "Repo"
@@ -81,12 +72,15 @@ if [ -d "$ZIEL/.git" ]; then
exit 1
fi
else
# --depth reicht nicht: für 'git pull' später brauchen wir eine vollwertige
# Arbeitskopie, kein abgeschnittenes Archiv.
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"
hinweis "Ist das Repo öffentlich lesbar? Ohne das braucht es Zugangsdaten,"
hinweis "und die gehören nicht aufs Telefon."
exit 1
fi
fi
+9
View File
@@ -282,6 +282,15 @@ if [ -z "$REPO_URL" ]; then
read -r REPO_URL </dev/tty || REPO_URL=""
fi
# Benutzernamen entfernen: das Telefon liest nur, und Lesen geht anonym. Bliebe
# der Name in der Adresse, fragte git dort nach einem Passwort — auf einer
# Bildschirmtastatur eine unnötige Quälerei.
if [ -n "$REPO_URL" ]; then
REPO_URL_ROH="$REPO_URL"
REPO_URL=$(printf '%s' "$REPO_URL" | sed -E 's#^(https?://)[^/@]+@#\1#')
[ "$REPO_URL" != "$REPO_URL_ROH" ] && hinweis "Benutzername für das Telefon entfernt (Lesen geht anonym)"
fi
if [ "$TROCKEN" = 1 ]; then
warn "Trockenlauf — es wird nichts übertragen."
elif [ -z "$REPO_URL" ]; then