From d334219c4fa17d95960b8638257423d17ee1f286 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 9 Aug 2026 17:43:31 +0200 Subject: [PATCH] =?UTF-8?q?Provisioning=20ohne=20Kabel:=20ADB=20=C3=BCber?= =?UTF-8?q?=20WLAN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit provision.sh fragt beim Start nach USB oder WLAN, statt ohne Gerät einfach abzubrechen. Der WLAN-Weg braucht kein Kabel — Android 11 und neuer koppeln per sechsstelligem Code. adb-wireless.sh sucht Kopplungs- und Verbindungsdienst per mDNS, statt die Adressen abtippen zu lassen. Beide Ports vergibt Android bei jedem Einschalten neu, und sie sind verschieden — das ist die häufigste Verwechslung dabei. Fällt auf manuelle Eingabe zurück, wenn das Netz Multicast blockiert. provision.sh kann die Skripte anschließend per adb push aufs Telefon legen. Das erspart es, Zugangsdaten für ein privates Repo auf einer Bildschirmtastatur einzutippen. Mit dem Hinweis, dass /sdcard keine Ausführungsrechte kennt und die Dateien deshalb erst nach ~ kopiert werden müssen. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 3 +- provision/adb-wireless.sh | 151 ++++++++++++++++++++++++++++++++++++++ provision/provision.sh | 106 +++++++++++++++++++++++--- spike/README.md | 8 +- 4 files changed, 257 insertions(+), 11 deletions(-) create mode 100755 provision/adb-wireless.sh diff --git a/README.md b/README.md index ae02cf4..d380ab4 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,8 @@ 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**. ```bash -# 1. Auf dem PC, Telefon per USB, USB-Debugging an: +# 1. Auf dem PC. Verbindet per USB oder WLAN — das Skript fragt danach. +# Ein Kabel wird nicht gebraucht: Android 11+ kann Wireless Debugging. ./provision/provision.sh # 2. Auf dem Telefon in Termux: diff --git a/provision/adb-wireless.sh b/provision/adb-wireless.sh new file mode 100755 index 0000000..165903d --- /dev/null +++ b/provision/adb-wireless.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env bash +# HPOS — ADB über WLAN verbinden, ohne USB-Kabel. +# +# Android 11 und neuer bringen "Wireless Debugging" mit: einmal per sechsstelligem +# Code koppeln, danach verbindet sich adb über das Netz. Ein Kabel wird nie gebraucht. +# +# Die Ports vergibt Android bei jedem Einschalten neu — deshalb werden sie hier per +# mDNS gesucht statt abgetippt. Wichtig: Kopplungs- und Verbindungsport sind zwei +# verschiedene Dinge, das ist die häufigste Verwechslung. +# +# Aufruf: ./provision/adb-wireless.sh +set -uo pipefail + +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"; } + +command -v adb >/dev/null 2>&1 || { fehl "adb nicht gefunden."; exit 1; } + +# Ab Version 30 gibt es 'adb pair'. Ältere Fassungen können Wireless Debugging nicht. +if ! adb pair 2>&1 | grep -q 'usage: adb pair'; then + fehl "Dieses adb kennt 'adb pair' nicht — zu alt für Wireless Debugging." + hinweis "Aktuelle platform-tools von developer.android.com/tools/releases/platform-tools" + exit 1 +fi +adb start-server >/dev/null 2>&1 + +# Sucht einen mDNS-Dienst und gibt HOST:PORT zurück. Der Kopplungsdienst wird nur +# angekündigt, solange der Kopplungsdialog auf dem Telefon offen ist — deshalb wird +# wiederholt gesucht statt einmal. +suche_dienst() { + local typ="$1" versuche="${2:-20}" i zeile + for ((i = 1; i <= versuche; i++)); do + zeile=$(adb mdns services 2>/dev/null | awk -v t="$typ" '$2 == t {print $3; exit}') + if [ -n "$zeile" ]; then printf '%s' "$zeile"; return 0; fi + printf '.' >&2 + sleep 1 + done + return 1 +} + +# ── Schon verbunden? ───────────────────────────────────────────────────────── +kopf "Aktueller Stand" +VERBUNDEN=$(adb devices | grep -w 'device$' | wc -l) +if [ "$VERBUNDEN" -gt 0 ]; then + adb devices | grep -w 'device$' | sed 's/^/ /' + ok "Es ist bereits ein Gerät verbunden." + hinweis "Weiter mit: ./provision/provision.sh" + exit 0 +fi +hinweis "Kein Gerät verbunden — Kopplung wird eingerichtet." + +# ── Anleitung ──────────────────────────────────────────────────────────────── +kopf "Auf dem Telefon" +cat <<'TEXT' + 1. Sicherstellen, dass Telefon und dieser Rechner im SELBEN WLAN sind. + Ein Gäste-WLAN oder eine aktive Client-Isolierung verhindert die Verbindung. + + 2. Einstellungen → System → Entwickleroptionen → "Drahtloses Debugging" EIN + + 3. Dort auf "Gerät mit Kopplungscode koppeln" tippen. + Es erscheint ein sechsstelliger Code und eine Adresse. + Dieses Fenster BITTE OFFEN LASSEN, bis die Kopplung durch ist — + der Kopplungsdienst verschwindet sonst sofort wieder. +TEXT + +printf '\n Wenn das Fenster mit dem Code offen ist, hier Enter drücken > ' +read -r _ ' + read -r PAIR_ZIEL ' +read -r CODE ' + read -r CONNECT_ZIEL /dev/null 2>&1 || { fehl "adb nicht gefunden. Bitte android-tools-adb installieren."; exit 1; } +HIER="$(cd "$(dirname "$0")" && pwd)" + ANZAHL=$(adb devices | grep -cw 'device$' || true) + +# Ohne Gerät nicht einfach abbrechen: der häufigste Fall ist, dass gar kein Kabel +# zur Hand ist. Android 11+ kann Wireless Debugging, das reicht für alles hier. if [ "$ANZAHL" -eq 0 ]; then - fehl "Kein Gerät verbunden oder nicht autorisiert." - hinweis "adb devices prüfen. Steht dort 'unauthorized', den Dialog auf dem Telefon bestätigen." - exit 1 + warn "Kein Gerät verbunden." + if [ ! -t 0 ]; then + hinweis "Keine Eingabe möglich — bitte erst ./provision/adb-wireless.sh ausführen." + exit 1 + fi + cat <<'TEXT' + + Wie soll verbunden werden? + + [u] USB-Kabel + Entwickleroptionen und USB-Debugging aktiv, Dialog "Diesem Computer + vertrauen" auf dem Telefon bestätigt. + + [w] WLAN, ohne Kabel (Android 11 und neuer) + Einmalige Kopplung per sechsstelligem Code. Danach läuft alles + über das Netz — ein Kabel wird nie gebraucht. + + [a] Abbrechen +TEXT + printf '\n Auswahl > ' + read -r WAHL ' + read -r _ /dev/null ) >/dev/null 2>&1 & + wait "$WARTE" 2>/dev/null + ANZAHL=$(adb devices | grep -cw 'device$' || true) + ;; + *) + hinweis "Abgebrochen." + exit 0 + ;; + esac + + if [ "$ANZAHL" -eq 0 ]; then + fehl "Es ist weiterhin kein Gerät verbunden." + adb devices | sed 's/^/ /' + hinweis "Steht dort 'unauthorized', den Dialog auf dem Telefon bestätigen." + exit 1 + fi + ok "Gerät verbunden" elif [ "$ANZAHL" -gt 1 ]; then - fehl "Mehrere Geräte verbunden — bitte nur eines anschließen." + fehl "Mehrere Geräte verbunden — bitte nur eines aktiv lassen." + adb devices | sed 's/^/ /' + hinweis "Überzählige trennen, per WLAN verbundene mit: adb disconnect " exit 1 fi @@ -142,14 +199,45 @@ case "$HERSTELLER" in ;; esac +# ── Repo aufs Telefon ──────────────────────────────────────────────────────── +# adb push funktioniert auch über WLAN. Das erspart es, auf dem Telefon Zugangsdaten +# für ein privates Repo eintippen zu müssen — auf einer Bildschirmtastatur eine Qual. +kopf "Skripte aufs Telefon" +REPO_ROOT="$(cd "$HIER/.." && pwd)" +ZIEL=/sdcard/hpos +if [ "$TROCKEN" = 1 ]; then + warn "Trockenlauf — es wird nichts übertragen." +else + printf ' Die Spike-Skripte jetzt nach %s übertragen? [J/n] > ' "$ZIEL" + read -r UEBERTRAGEN /dev/null 2>&1 + if adb push "$REPO_ROOT" "$ZIEL" >/dev/null 2>&1; then + ok "Übertragen nach $ZIEL" + hinweis "In Termux nach ~ kopieren, damit die Dateien ausführbar sein können:" + hinweis " cp -r /sdcard/hpos ~/hpos && cd ~/hpos" + hinweis "(auf /sdcard gibt es keine Ausführungsrechte — das ist normal)" + else + warn "Übertragung fehlgeschlagen — dann per git clone auf dem Telefon." + fi + ;; + *) hinweis "Übersprungen." ;; + esac +fi + kopf "Fertig" cat < hpos && cd hpos - pkg install -y git - git clone hpos && cd hpos bash spike/00-bootstrap-termux.sh Danach die Beweise der Reihe nach — S1 zuerst, weil er der wackligste ist. Ergebnisse gehören nach docs/spike-protokoll.md. + + Nicht vergessen: die oben genannten Handgriffe von Hand erledigen. + Ohne sie beendet das ROM den Stack über Nacht. TEXT diff --git a/spike/README.md b/spike/README.md index e6a87f6..bdd4d0f 100644 --- a/spike/README.md +++ b/spike/README.md @@ -25,10 +25,16 @@ Scheitert er, ist das ein früher Warnschuss fürs Gesamtkonzept, kein Detail. - Etwa 6 GB freier Speicher (Debian-Rootfs, Plasma Mobile, Firefox) - Geduld beim ersten Lauf: rund 1 GB Pakete +**Ein USB-Kabel wird nicht gebraucht.** Ab Android 11 geht die Ersteinrichtung über +WLAN — `provision.sh` fragt beim Start, ob per Kabel oder per Netz verbunden werden +soll, und übernimmt die Kopplung. Es kann die Skripte anschließend auch gleich aufs +Telefon übertragen, sodass dort keine Zugangsdaten für ein privates Repo auf einer +Bildschirmtastatur eingetippt werden müssen. + ## Ablauf ```bash -# Einmalig, vom PC mit angeschlossenem Telefon +# Einmalig, vom PC. Fragt selbst nach USB oder WLAN. ./provision/provision.sh # Auf dem Telefon in Termux