Add Object B and self-growth canons with Cursor ledger rules; refresh connectivity and VPN runbooks.
Track day metrics/anamnesis HARD rules under .cursor/rules and personal docs so each screening updates days/{KIN}, dynamics, and big-data ledger.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,23 +1,18 @@
|
||||
# Joplin (локальный синк Mac ↔ телефон)
|
||||
|
||||
WebDAV через rclone на Mac, Android-хотспот.
|
||||
WebDAV (rclone) на Mac. Без облака Joplin и без VPN.
|
||||
|
||||
| Документ | Назначение |
|
||||
|----------|------------|
|
||||
| **[STABLE_SETUP.md](./STABLE_SETUP.md)** | Рабочая схема: alias `*.100` |
|
||||
| **[RUNBOOK.md](./RUNBOOK.md)** | Синк сломался |
|
||||
| [docs/apps/joplin/scripts/](../../../apps/joplin/scripts/) | Скрипты |
|
||||
| [STABLE_SETUP.md](./STABLE_SETUP.md) | **Основная схема** — primary `*.100`, хотспот |
|
||||
| [RUNBOOK.md](./RUNBOOK.md) | Диагностика |
|
||||
|
||||
## URL (Android-хотспот)
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Mac | `http://127.0.0.1:8080` |
|
||||
| Телефон | `http://<подсеть>.100:8080` (см. `joplin-hotspot-alias.sh status`) |
|
||||
|
||||
**Не** `http://*.local:8080` — с телефона-хотспота не работает.
|
||||
## Одна команда (Mac)
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-webdav-status.sh
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh status
|
||||
./docs/apps/joplin/scripts/joplin-ensure-sync.sh
|
||||
```
|
||||
|
||||
Mac должен быть на **Wi‑Fi хотспота телефона**. URL на телефоне: `http://<подсеть>.100:8080` из вывода status.
|
||||
|
||||
Скрипты: [docs/apps/joplin/scripts/](../../../apps/joplin/scripts/)
|
||||
|
||||
@@ -4,14 +4,93 @@
|
||||
|
||||
Стек: **rclone serve webdav** на Mac → `~/JoplinSync` → Joplin (Mac + Android) по HTTP. Облако Joplin не используется.
|
||||
|
||||
**Рабочая схема (2026-06, проверено):** Mac на **DHCP**, alias **`*.100`** на `en0`, телефон → `http://<подсеть>.100:8080`. Подробно: [STABLE_SETUP.md](./STABLE_SETUP.md).
|
||||
**Рабочая схема (2026-06–07):** Mac на **хотспоте**, primary IP **`*.100`** через `networksetup -setmanual`, телефон → `http://<подсеть>.100:8080`. Подробно: [STABLE_SETUP.md](./STABLE_SETUP.md).
|
||||
|
||||
**Последняя проверка: 2026-07-04** — синк работает на подсети `10.121.169.x` (см. ниже).
|
||||
|
||||
---
|
||||
|
||||
## Проверенный рабочий сетап (зафиксировано 2026-07-04)
|
||||
|
||||
### Условия (все обязательны)
|
||||
|
||||
| # | Условие | Как проверить |
|
||||
|---|---------|---------------|
|
||||
| 1 | Mac — **клиент Wi‑Fi хотспота Android** (не домашний Wi‑Fi) | `joplin-hotspot-alias.sh status` → `network: похоже на Android-хотспот` |
|
||||
| 2 | **rclone** слушает `:8080` | `joplin-webdav-status.sh` → процесс / порт |
|
||||
| 3 | Mac primary IP = **`<подсеть>.100`** (setmanual) | `static IP: OK`, `ipconfig getifaddr en0` → `*.100` |
|
||||
| 4 | Шлюз Wi‑Fi = **телефон** (Android) | gateway `10.x.x.x` / `192.168.43.x` — не `192.168.1.1` роутера |
|
||||
| 5 | **Mac Joplin** → `http://127.0.0.1:8080` | `settings.json` → `sync.6.path` |
|
||||
| 6 | **Телефон Joplin** → `http://<подсеть>.100:8080` | URL из `status`, **без** `/` и пробелов в конце |
|
||||
| 7 | Учётка WebDAV: логин `joplin`, пароль из env | после смены пароля — `joplin-webdav-reload.sh` |
|
||||
| 8 | В rclone.log — запросы **не только** с `127.0.0.1` | `GET`/`PUT from 10.x.x.x` (часто IP **шлюза**, не Mac) |
|
||||
|
||||
### Пример сессии, когда синк **работал** (2026-07-04)
|
||||
|
||||
```
|
||||
Подсеть: 10.121.169.x
|
||||
Gateway: 10.121.169.246 ← телефон (виден в rclone.log)
|
||||
Mac primary: 10.121.169.100 ← networksetup -setmanual
|
||||
URL Mac: http://127.0.0.1:8080
|
||||
URL телефон: http://10.121.169.100:8080
|
||||
rclone.log: GET from 10.121.169.246:59442 …
|
||||
alias.log: networksetup -setmanual 10.121.169.100 gw 10.121.169.246
|
||||
```
|
||||
|
||||
### Одна команда перед синком
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-ensure-sync.sh
|
||||
```
|
||||
|
||||
Один раз (LaunchAgent без пароля):
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias-install-sudo.sh
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias-install.sh
|
||||
```
|
||||
|
||||
Перед возвратом на домашний Wi‑Fi:
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh dhcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Что НЕ работает (не пробовать)
|
||||
|
||||
| Подход | Почему не работает | Что делать вместо |
|
||||
|--------|-------------------|-------------------|
|
||||
| **Tailscale / VPN mesh** | На Mac нет App Store; brew tailscale без GUI/daemon — не подняли стабильно; пользователь отказался | Хотспот + LAN WebDAV (эта схема) |
|
||||
| **`ifconfig alias *.100`** | Mac видит alias (`curl` с Mac OK), **Android не маршрутизирует** к alias — в rclone.log **нет** `from 10.x` | **`networksetup -setmanual`** → primary `*.100` |
|
||||
| **`http://*.local:8080`** (mDNS) | Android-хотспот **не резолвит** `.local` клиентов Wi‑Fi | IP: `http://<подсеть>.100:8080` |
|
||||
| **URL = DHCP primary Mac** (`10.x.x.84`) | IP **меняется** при каждом reconnect хотспота | Фиксированный хвост **`.100`** |
|
||||
| **Старый URL после смены подсети** (`10.74.21.100` при Mac в `10.121.169.x`) | ETIMEDOUT; телефон стучится не туда | `./joplin-hotspot-alias.sh status` → **один раз** новый URL |
|
||||
| **Stale Manual Wi‑Fi** (старый шлюз в prefs) | `No Router MAC`, нет интернета, ping gateway fail | `macos-hotspot-network-recover.sh recover` → DHCP → `repair` |
|
||||
| **Mac дома (`192.168.1.x`), телефон на LTE** | Разные сети — маршрута нет | Mac к **хотспоту** телефона **или** телефон в ту же Wi‑Fi |
|
||||
| **Смотреть только UI Joplin на Mac** | Mac синкается на `127.0.0.1` — **OK даже когда телефон молчит** | `tail -f ~/Library/Logs/joplin-webdav/rclone.log \| grep -v 127.0.0.1` |
|
||||
| **WebDAV URL в разделе «Прокси»** | Прокси — для HTTP/SOCKS, не адрес синка | **Синхронизация → Self-hosting → WebDAV** |
|
||||
| **Пробел / `/` в конце URL** | `Not a valid URL: …8080 /info.json` | Переписать URL без пробела и без trailing `/` |
|
||||
| **Joplin Cloud / Docker Server** | Не выбрано: нужен **локальный** WebDAV без облака | rclone на Mac (`~/JoplinSync`) |
|
||||
| **Обновлять URL на Mac при смене хотспота** | Mac всегда на localhost | Mac: **только** `127.0.0.1:8080`; менять URL **на телефоне** |
|
||||
|
||||
### Быстрая отличительная диагностика
|
||||
|
||||
| Симптом | Вероятная причина из таблицы выше |
|
||||
|---------|-----------------------------------|
|
||||
| rclone только `from 127.0.0.1` | alias вместо setmanual, разные сети, или неверный URL на телефоне |
|
||||
| `curl` с Mac на `*.100` OK, телефон — timeout | **alias** (типичный кейс 2026-07-04) → `repair` |
|
||||
| Mac «Completed», заметок нет | Mac не на WebDAV / пробел в URL |
|
||||
| `401 Unauthorized` | пароль env ≠ Joplin или старый rclone → `reload` |
|
||||
| Интернет на Mac мёртв после reconnect | stale Manual → `recover` |
|
||||
|
||||
---
|
||||
|
||||
## Архитектура
|
||||
|
||||
```
|
||||
Телефон (Joplin) ──HTTP──► Mac en0 alias *.100:8080 ──► rclone ──► ~/JoplinSync/
|
||||
Телефон (Joplin) ──HTTP──► Mac en0 primary *.100:8080 ──► rclone ──► ~/JoplinSync/
|
||||
Mac (Joplin) ──HTTP──► 127.0.0.1:8080 (тот же rclone)
|
||||
```
|
||||
|
||||
@@ -20,9 +99,9 @@ Mac (Joplin) ──HTTP──► 127.0.0.1:8080 (тот же rclone)
|
||||
| Данные | `~/JoplinSync` |
|
||||
| Учётка | `~/.config/joplin-webdav/env` (`600`, не в git) |
|
||||
| WebDAV | LaunchAgent `com.eternal.joplin-webdav` |
|
||||
| Alias `*.100` | LaunchAgent `com.eternal.joplin-hotspot-alias` (опционально + sudoers) |
|
||||
| Static `*.100` | LaunchAgent `com.eternal.joplin-hotspot-alias` (setmanual; опционально + sudoers) |
|
||||
| Лог rclone | `~/Library/Logs/joplin-webdav/rclone.log` |
|
||||
| Лог alias | `~/Library/Logs/joplin-webdav/alias.log` |
|
||||
| Лог static IP | `~/Library/Logs/joplin-webdav/alias.log` |
|
||||
| Лог Joplin Mac | `~/.config/joplin-desktop/log.txt` |
|
||||
| Настройки Mac | `~/.config/joplin-desktop/settings.json` → `sync.6.path` |
|
||||
|
||||
@@ -40,7 +119,7 @@ Mac (Joplin) ──HTTP──► 127.0.0.1:8080 (тот же rclone)
|
||||
| Что смотреть | OK | Проблема |
|
||||
|--------------|-----|----------|
|
||||
| rclone / `:8080` | процесс слушает | `joplin-webdav-serve.sh` или `joplin-webdav-install.sh` |
|
||||
| `alias: OK` | `*.100` на en0 | `joplin-hotspot-alias.sh ensure` (sudo) |
|
||||
| `static IP: OK` | primary `*.100` | `joplin-hotspot-alias.sh repair` (sudo) |
|
||||
| rclone.log | `from 10.` или `from 192.` | только `127.0.0.1` — телефон не достучался |
|
||||
| Mac URL | `127.0.0.1:8080` | настроить WebDAV на Mac |
|
||||
|
||||
@@ -53,7 +132,7 @@ Mac (Joplin) ──HTTP──► 127.0.0.1:8080 (тот же rclone)
|
||||
| Устройство | WebDAV URL |
|
||||
|------------|------------|
|
||||
| **Mac** | `http://127.0.0.1:8080` |
|
||||
| **Телефон** | `http://<подсеть>.100:8080` — сейчас часто `http://10.74.21.100:8080` |
|
||||
| **Телефон** | `http://<подсеть>.100:8080` — актуально: `http://10.121.169.100:8080` (2026-07-04) |
|
||||
|
||||
Узнать актуальный URL:
|
||||
|
||||
@@ -63,13 +142,15 @@ Mac (Joplin) ──HTTP──► 127.0.0.1:8080 (тот же rclone)
|
||||
grep JOPLIN_PHONE_URL ~/.config/joplin-webdav/env
|
||||
```
|
||||
|
||||
**Не использовать на телефоне:**
|
||||
**Не использовать на телефоне** (подробнее — раздел «Что НЕ работает» выше):
|
||||
|
||||
| URL | Почему |
|
||||
| URL / подход | Почему |
|
||||
|-----|--------|
|
||||
| `http://eternals.local:8080` | Android-хотспот **не резолвит** `.local` клиентов; в rclone.log нет запросов с телефона |
|
||||
| `http://10.219.227.100:8080` | старая подсеть, если хотспот уже выдал `10.74.x` |
|
||||
| `http://10.x.x.84:8080` (primary DHCP) | IP меняется при reconnect |
|
||||
| `http://eternals.local:8080` | Android-хотспот **не резолвит** `.local` |
|
||||
| `http://10.219.227.100:8080` | старая подсеть (пример) |
|
||||
| `http://10.74.21.100:8080` | старая подсеть (пример) |
|
||||
| `http://10.x.x.84:8080` (DHCP primary Mac) | IP меняется при reconnect |
|
||||
| alias `*.100` без setmanual | телефон не достучится (2026-07-04) |
|
||||
|
||||
### Общее для Joplin
|
||||
|
||||
@@ -96,7 +177,7 @@ Mac Joplin не на WebDAV — в `~/JoplinSync` только данные с
|
||||
|
||||
### 2. `ETIMEDOUT` / `connect ETIMEDOUT 10.x.x.x:8080`
|
||||
|
||||
**Причина:** на телефоне **устаревший IP** (другая подсеть или нет alias `.100`).
|
||||
**Причина:** на телефоне **устаревший IP** (другая подсеть или primary `.100` не выставлен).
|
||||
|
||||
**Признаки:** Joplin `ETIMEDOUT`; rclone — нет свежих `GET`/`PUT` с `10.`.
|
||||
|
||||
@@ -139,9 +220,47 @@ grep JOPLIN_WEBDAV_PASS ~/.config/joplin-webdav/env
|
||||
|
||||
---
|
||||
|
||||
### 6. `ECONNREFUSED` / телефон «не достаёт», Mac — да
|
||||
### 6. Mac «синкается», телефон — нет (2026-07-04)
|
||||
|
||||
**Причина:** alias **`*.100` отсутствует** на `en0` (слетел после reconnect).
|
||||
**Самый частый кейс.** Mac → `127.0.0.1:8080` OK. Телефон молчит.
|
||||
|
||||
**Три причины (часто вместе):**
|
||||
|
||||
1. **Подсеть сменилась** — на телефоне старый URL (`10.74.21.100`), Mac уже в `10.121.169.x`
|
||||
2. **Primary `.100` не выставлен** — LaunchAgent не смог `sudo networksetup` (sudoers + `repair`)
|
||||
3. **Разные сети** — Mac на домашнем Wi‑Fi (`192.168.1.x`), телефон на мобильном
|
||||
|
||||
**Диагностика:**
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-webdav-status.sh
|
||||
grep JOPLIN_PHONE_URL ~/.config/joplin-webdav/env
|
||||
tail -5 ~/Library/Logs/joplin-webdav/rclone.log | grep -v 127.0.0.1
|
||||
```
|
||||
|
||||
| Признак | Значение |
|
||||
|---------|----------|
|
||||
| rclone только `from 127.0.0.1` | телефон **не достучался** |
|
||||
| `static IP: MISSING` | `./joplin-hotspot-alias.sh repair` |
|
||||
| `stale ifconfig: …` | старый alias → `repair` (скрипт снимет alias, выставит setmanual) |
|
||||
| `JOPLIN_PHONE_URL` ≠ URL из status | обновить URL **на телефоне** |
|
||||
| gateway `192.168.1.1` | домашний Wi‑Fi — телефон должен быть **в той же сети** |
|
||||
|
||||
**Фикс:**
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias-install-sudo.sh # если sudo просит пароль
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh repair
|
||||
./docs/apps/joplin/scripts/joplin-webdav-status.sh # URL для телефона
|
||||
```
|
||||
|
||||
→ Обновить URL в Joplin на телефоне → **Синхронизировать**
|
||||
|
||||
---
|
||||
|
||||
### 7. `ECONNREFUSED` / телефон «не достаёт», Mac — да
|
||||
|
||||
**Причина:** primary **`*.100` отсутствует** на `en0` (слетел после reconnect или DHCP вместо setmanual).
|
||||
|
||||
```bash
|
||||
ifconfig en0 | grep inet
|
||||
@@ -155,7 +274,7 @@ curl -s -o /dev/null -w '%{http_code}\n' http://10.74.21.100:8080/ # подс
|
||||
|
||||
---
|
||||
|
||||
### 7. `eternals.local` / `*.local` не работает с телефона
|
||||
### 8. `eternals.local` / `*.local` не работает с телефона
|
||||
|
||||
**Ожидаемо.** mDNS на Mac резолвится, Android-хотспот — нет. Использовать **`http://<subnet>.100:8080`**, не `.local`.
|
||||
|
||||
@@ -171,32 +290,32 @@ curl -s -o /dev/null -w '%{http_code}\n' http://10.74.21.100:8080/ # подс
|
||||
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh recover
|
||||
```
|
||||
|
||||
Wi‑Fi должен быть **DHCP**, не Manual ([HOTSPOT_NETWORK_EMERGENCY.md](../../HOTSPOT_NETWORK_EMERGENCY.md)).
|
||||
Wi‑Fi на хотспоте: **Manual `*.100`** через `joplin-hotspot-alias` (шлюз = текущий gateway). Перед домашним Wi‑Fi: `joplin-hotspot-alias.sh dhcp`. См. [HOTSPOT_NETWORK_EMERGENCY.md](../../HOTSPOT_NETWORK_EMERGENCY.md).
|
||||
|
||||
### 2. Joplin
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-webdav-status.sh
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh ensure # если alias MISSING
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh ensure # если static IP MISSING
|
||||
```
|
||||
|
||||
Чеклист:
|
||||
|
||||
- [ ] rclone слушает `:8080`
|
||||
- [ ] `alias: OK` (или `ensure` выполнен)
|
||||
- [ ] `static IP: OK` (или `repair` выполнен)
|
||||
- [ ] **Mac:** `http://127.0.0.1:8080` — без изменений
|
||||
- [ ] **Телефон:** URL из `status` — **не менять**, если подсеть та же (`10.74.21.x`)
|
||||
- [ ] Подсеть **сменилась** → один раз новый `http://<new-subnet>.100:8080`
|
||||
- [ ] В rclone.log появились `from 10.` после синка на телефоне
|
||||
|
||||
### 3. Авто-alias (рекомендуется один раз)
|
||||
### 3. Авто `*.100` (рекомендуется один раз)
|
||||
|
||||
```bash
|
||||
bash ./docs/apps/joplin/scripts/joplin-android-hotspot-setup.sh install
|
||||
bash ./docs/apps/joplin/scripts/joplin-hotspot-alias-install-sudo.sh
|
||||
```
|
||||
|
||||
LaunchAgent поднимает `*.100` каждые 60 с после reconnect.
|
||||
LaunchAgent выставляет primary `*.100` каждые 60 с после reconnect.
|
||||
|
||||
---
|
||||
|
||||
@@ -205,9 +324,9 @@ LaunchAgent поднимает `*.100` каждые 60 с после reconnect.
|
||||
| Скрипт | Когда |
|
||||
|--------|--------|
|
||||
| `joplin-webdav-status.sh` | Первая диагностика |
|
||||
| `joplin-hotspot-alias.sh status\|ensure` | URL телефона, поднять alias |
|
||||
| `joplin-hotspot-alias.sh status\|ensure\|repair\|dhcp` | URL телефона, primary `*.100`, вернуть DHCP |
|
||||
| `joplin-android-hotspot-setup.sh install` | Полная настройка хотспота |
|
||||
| `joplin-hotspot-alias-install-sudo.sh` | Alias без пароля (LaunchAgent) |
|
||||
| `joplin-hotspot-alias-install-sudo.sh` | setmanual/dhcp без пароля (LaunchAgent) |
|
||||
| `joplin-webdav-install.sh` | Первая установка rclone + launchd |
|
||||
| `joplin-webdav-reload.sh` | После смены пароля в env |
|
||||
| `joplin-mdns-setup.sh` | Справочно; **не для URL на телефоне-хотспоте** |
|
||||
@@ -240,7 +359,7 @@ grep -E 'Synchronizer: \[error\]|ETIMEDOUT|ECONNREFUSED|Unauthorized|Not a valid
|
||||
|
||||
| Документ | Зачем |
|
||||
|----------|--------|
|
||||
| [STABLE_SETUP.md](./STABLE_SETUP.md) | Схема alias `*.100`, установка |
|
||||
| [STABLE_SETUP.md](./STABLE_SETUP.md) | Primary `*.100`, установка |
|
||||
| [README.md](./README.md) | Оглавление |
|
||||
| [docs/apps/joplin/README.md](../../../apps/joplin/README.md) | Установка с нуля |
|
||||
| [HOTSPOT_NETWORK_EMERGENCY.md](../../HOTSPOT_NETWORK_EMERGENCY.md) | Сеть macOS после reconnect |
|
||||
@@ -253,10 +372,12 @@ grep -E 'Synchronizer: \[error\]|ETIMEDOUT|ECONNREFUSED|Unauthorized|Not a valid
|
||||
|------|---------|--------|------|
|
||||
| 2026-06-02 | 401 | Пароль env ≠ Joplin | `joplin-webdav-reload.sh` |
|
||||
| 2026-06-08 | ETIMEDOUT | Старый IP на телефоне | Обновить URL |
|
||||
| 2026-06-09 | Телефон не достаёт `.100` | Mac без alias | `joplin-hotspot-alias ensure` |
|
||||
| 2026-06-15 | Нет интернета после reconnect | Manual Wi‑Fi + битые маршруты | `macos-hotspot-network-recover.sh recover`, DHCP |
|
||||
| 2026-06-19 | `eternals.local` не работает | Android-хотспот не резолвит mDNS клиентов | URL `http://10.74.21.100:8080` + alias |
|
||||
| 2026-06-19 | Синк OK | alias `.100` + LaunchAgent | [STABLE_SETUP.md](./STABLE_SETUP.md) |
|
||||
| 2026-06-09 | Телефон не достаёт `.100` | Mac без primary `.100` | `setmanual` / `joplin-hotspot-alias repair` |
|
||||
| 2026-06-15 | Нет интернета после reconnect | Stale Manual + битые маршруты | `macos-hotspot-network-recover.sh recover` |
|
||||
| 2026-06-19 | `eternals.local` не работает | Android-хотспот не резолвит mDNS | URL `http://10.74.21.100:8080` + setmanual |
|
||||
| 2026-06-19 | Синк OK | primary `.100` + LaunchAgent | [STABLE_SETUP.md](./STABLE_SETUP.md) |
|
||||
| 2026-07-04 | Mac OK, телефон нет | alias `.100`; подсеть `10.74`→`10.121` | setmanual + URL `10.121.169.100` |
|
||||
| 2026-07-04 | **Синк OK** | setmanual `10.121.169.100`, gateway `.246` | [рабочий сетап](#проверенный-рабочий-сетап-зафиксировано-2026-07-04) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,17 +1,38 @@
|
||||
# Стабильная настройка: Android-хотспот + Mac + Joplin
|
||||
# Стабильная настройка: Joplin Mac ↔ телефон
|
||||
|
||||
Без облака и без VPN. Mac — WebDAV (rclone), телефон — клиент по HTTP в одной LAN (обычно **хотспот Android**).
|
||||
|
||||
---
|
||||
|
||||
## Важно: `.local` с телефона **не работает**
|
||||
## Схема
|
||||
|
||||
`http://eternals.local:8080` резолвится на **Mac**, но **Android, раздающий хотспот, не умеет** резолвить `.local` имён **подключённых** клиентов (Mac). Запросы до rclone не доходят.
|
||||
| Устройство | WebDAV URL |
|
||||
|------------|------------|
|
||||
| **Mac** | `http://127.0.0.1:8080` (никогда не менять) |
|
||||
| **Телефон** | `http://<подсеть>.100:8080` — из `joplin-webdav-status.sh` |
|
||||
|
||||
**Рабочая схема:** alias **`*.100`** на `en0` + URL `http://<подсеть>.100:8080`.
|
||||
На Mac **primary IP** Wi‑Fi = `*.100` через `networksetup -setmanual` (не ifconfig alias). Android маршрутизирует к **primary**; alias `.100` телефон часто не видит.
|
||||
|
||||
| Устройство | URL |
|
||||
|------------|-----|
|
||||
| Mac | `http://127.0.0.1:8080` |
|
||||
| Телефон | `http://10.74.21.100:8080` (подсеть меняется → см. ниже) |
|
||||
`.local` / mDNS **с Android-хотспота не работает** — только IP.
|
||||
|
||||
---
|
||||
|
||||
## Перед каждым синком (чеклист)
|
||||
|
||||
1. **Mac на Wi‑Fi хотспота этого телефона** — не домашний Wi‑Fi (отключить auto-join домашней сети).
|
||||
2. На Mac:
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-ensure-sync.sh
|
||||
```
|
||||
3. В выводе: `static IP: OK`, rclone слушает `:8080`.
|
||||
4. **Телефон:** URL `http://<подсеть>.100:8080` — сначала проверить в **браузере** (логин за 2–3 сек), потом Joplin → синк.
|
||||
5. В `~/Library/Logs/joplin-webdav/rclone.log` — `GET`/`PUT from <IP шлюза/телефона>`.
|
||||
|
||||
Переход на **домашний Wi‑Fi** (без Joplin с телефона):
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh dhcp
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -19,37 +40,75 @@
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-webdav-install.sh
|
||||
bash ./docs/apps/joplin/scripts/joplin-android-hotspot-setup.sh install
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias-install.sh # LaunchAgent
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias-install-sudo.sh # sudo без пароля
|
||||
```
|
||||
|
||||
На телефоне — URL из вывода (`joplin-hotspot-alias.sh status`).
|
||||
|
||||
Автоподнятие alias после reconnect:
|
||||
На телефоне в Joplin → WebDAV — URL из:
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias-install-sudo.sh # sudoers, без пароля
|
||||
./docs/apps/joplin/scripts/joplin-webdav-status.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## После reconnect
|
||||
## После reconnect / смены подсети
|
||||
|
||||
1. Alias поднимается LaunchAgent (если sudoers установлен)
|
||||
2. Проверка: `./docs/apps/joplin/scripts/joplin-webdav-status.sh`
|
||||
3. Если подсеть **та же** (`10.74.21.x`) — URL на телефоне **не менять**
|
||||
4. Если подсеть **сменилась** (`10.219` → `10.74`) — **один раз** новый URL из `status`
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-ensure-sync.sh
|
||||
```
|
||||
|
||||
Интернет пропал: `bash .../macos-hotspot-network-recover.sh recover`
|
||||
| Ситуация | URL на телефоне |
|
||||
|----------|-----------------|
|
||||
| Та же подсеть (`10.121.169.x` → `10.121.169.x`) | **Не менять** |
|
||||
| Подсеть сменилась (`10.74.21.x` → `10.121.169.x`) | **Один раз** новый URL из `status` |
|
||||
| Mac и телефон в одной домашней Wi‑Fi | `http://192.168.1.100:8080` (пример) |
|
||||
| Mac на домашнем Wi‑Fi, телефон на мобильном | **Синк невозможен** — Mac к хотспоту телефона |
|
||||
|
||||
Если `static IP: MISSING`:
|
||||
|
||||
```bash
|
||||
./docs/apps/joplin/scripts/joplin-hotspot-alias.sh repair
|
||||
```
|
||||
|
||||
Сеть «умерла» после reconnect хотспота:
|
||||
|
||||
```bash
|
||||
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh recover
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Почему URL иногда меняется
|
||||
## Почему десктоп «синкается», а телефон — нет
|
||||
|
||||
Android выдаёт **разные подсети** (`10.219.227.x`, `10.74.21.x`). Без Tailscale/VPN **нельзя** иметь один HTTP-URL при любой подсети с телефона-хотспота. Фиксированный **хвост `.100`** + автоподнятие alias минимизируют ручную работу.
|
||||
Mac ходит на **`127.0.0.1:8080`** — всегда работает. Телефон зависит от:
|
||||
|
||||
1. **Одна сеть** — Mac и телефон в одной LAN
|
||||
2. **Primary `.100`** — `static IP: OK` в status
|
||||
3. **URL на телефоне = текущая подсеть** — не старый `10.74.21.100`
|
||||
4. **rclone.log** — есть `GET`/`PUT from <IP>`
|
||||
|
||||
Joplin на Mac **скрывает** ошибки — смотреть `rclone.log`, не только UI.
|
||||
|
||||
---
|
||||
|
||||
## Подсети меняются
|
||||
|
||||
Без VPN нельзя иметь **один** URL при любой подсети. Фиксированный **хвост `.100`** минимизирует правки: меняется только префикс (`10.74` → `10.121` → `10.219`).
|
||||
|
||||
---
|
||||
|
||||
## История рабочих подсетей
|
||||
|
||||
| Дата | Подсеть | URL телефона |
|
||||
|------|---------|--------------|
|
||||
| 2026-06-09 | `10.219.227.x` | `http://10.219.227.100:8080` (setmanual) |
|
||||
| 2026-06-19 | `10.74.21.x` | `http://10.74.21.100:8080` |
|
||||
| 2026-07-04 | `10.121.169.x` | `http://10.121.169.100:8080` — **проверено, синк OK** (setmanual) |
|
||||
|
||||
---
|
||||
|
||||
## Связанное
|
||||
|
||||
- [RUNBOOK.md](./RUNBOOK.md)
|
||||
- [RUNBOOK.md](./RUNBOOK.md) — диагностика
|
||||
- [HOTSPOT_NETWORK_EMERGENCY.md](../../HOTSPOT_NETWORK_EMERGENCY.md)
|
||||
|
||||
Reference in New Issue
Block a user