Compare commits
2
Commits
a58754dbfc
...
1cea1df9e7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1cea1df9e7 | ||
|
|
c7221e18ad |
@@ -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>
|
||||
@@ -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 (S1–S4 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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user