3 Commits

Author SHA1 Message Date
Бобырев Андрей
c5e9e45141 router install: stop S10cron only if present, warn when crond is missing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:59:46 +03:00
Бобырев Андрей
51ec84db6c uninstall: accept yes with CR/spaces/case, read from tty
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:44:32 +03:00
Бобырев Андрей
d030344b00 release: 1.4.8 — сторож роутера не трогает чужие туннели
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 18:12:38 +03:00
6 changed files with 17 additions and 6 deletions

View File

@@ -19,6 +19,10 @@ phobos-update beta # или: phobos-update dev
--- ---
## 1.4.8 — сторож роутера не трогает чужие туннели
- Исправлено: если сторож не находил интерфейс Phobos (удалён или переименован), он брал Wireguard3 по умолчанию и прописывал туда пир Phobos — ломался посторонний WireGuard-туннель. Теперь он просто пропускает проверку.
- Роутерам: обновить скрипты из панели или переустановить клиента; серверу — `phobos-update stable`.
## 1.4.7 — роутеры Keenetic сами переключаются между серверами ## 1.4.7 — роутеры Keenetic сами переключаются между серверами
- Исправлено: после переключения на другой сервер туннель на роутере переставал работать — пир прописывался на порт обфускатора 13255, а он мог слушать другой. Порт теперь берётся из `wg-obfuscator.conf`. - Исправлено: после переключения на другой сервер туннель на роутере переставал работать — пир прописывался на порт обфускатора 13255, а он мог слушать другой. Порт теперь берётся из `wg-obfuscator.conf`.
- Исправлено: проверка и обновление конфига по расписанию на Keenetic не запускались — задачи писались в `/opt/etc/crontab`, который демон не читает. Теперь busybox `crond` и crontab пользователя root. - Исправлено: проверка и обновление конфига по расписанию на Keenetic не запускались — задачи писались в `/opt/etc/crontab`, который демон не читает. Теперь busybox `crond` и crontab пользователя root.

View File

@@ -1 +1 @@
1.4.7 1.4.8

View File

@@ -96,8 +96,10 @@ FAIL_COUNT=$(cat "$STATE/fail_count" 2>/dev/null || echo "0")
PRIMARY_CHECK_TS=$(cat "$STATE/primary_check_ts" 2>/dev/null || echo "0") PRIMARY_CHECK_TS=$(cat "$STATE/primary_check_ts" 2>/dev/null || echo "0")
# ── Detect Phobos WG interface (non-fatal, fallback to Wireguard3) ── # ── Detect Phobos WG interface (non-fatal, fallback to Wireguard3) ──
# Нет своего интерфейса — выходим: запасной Wireguard3 бывает чужим туннелем.
detect_wg_interface || { detect_wg_interface || {
log "WARN: detect failed, using default $WG_IF" log "ERROR: own WG interface not found, skip"
exit 0
} }
# ── Get handshake age via ndmc ── # ── Get handshake age via ndmc ──

View File

@@ -460,10 +460,11 @@ deploy_health_monitor() {
# (vixie, PROCS=cron) на Keenetic задачи не выполнял — заменяем (01.11.2026) # (vixie, PROCS=cron) на Keenetic задачи не выполнял — заменяем (01.11.2026)
local I=/opt/etc/init.d/S10cron local I=/opt/etc/init.d/S10cron
if [ ! -x $I ] || grep -q "^PROCS=cron$" $I; then if [ ! -x $I ] || grep -q "^PROCS=cron$" $I; then
$I stop >/dev/null 2>&1 [ -x $I ] && $I stop </dev/null >/dev/null 2>&1
printf '#!/bin/sh\n\nENABLED=yes\nPROCS=crond\nARGS="-c /opt/var/spool/cron/crontabs -b"\nPREARGS=""\nDESC=$PROCS\nPATH=/opt/sbin:/opt/bin:/usr/sbin:/usr/bin:/sbin:/bin\n\n. /opt/etc/init.d/rc.func\n' > $I printf '#!/bin/sh\n\nENABLED=yes\nPROCS=crond\nARGS="-c /opt/var/spool/cron/crontabs -b"\nPREARGS=""\nDESC=$PROCS\nPATH=/opt/sbin:/opt/bin:/usr/sbin:/usr/bin:/sbin:/bin\n\n. /opt/etc/init.d/rc.func\n' > $I
chmod +x $I chmod +x $I
fi fi
[ -x /opt/sbin/crond ] || command -v crond >/dev/null 2>&1 || log " ВНИМАНИЕ: crond не найден — health/pull по расписанию работать не будут (opkg install cron или busybox с crond)"
mkdir -p /opt/var/spool/cron/crontabs mkdir -p /opt/var/spool/cron/crontabs
# 01.11.2026: демоны cron на Keenetic (busybox crond, Entware cron) читают crontab # 01.11.2026: демоны cron на Keenetic (busybox crond, Entware cron) читают crontab
# пользователя root, а не /opt/etc/crontab — туда писать бесполезно # пользователя root, а не /opt/etc/crontab — туда писать бесполезно

View File

@@ -96,8 +96,10 @@ FAIL_COUNT=$(cat "$STATE/fail_count" 2>/dev/null || echo "0")
PRIMARY_CHECK_TS=$(cat "$STATE/primary_check_ts" 2>/dev/null || echo "0") PRIMARY_CHECK_TS=$(cat "$STATE/primary_check_ts" 2>/dev/null || echo "0")
# ── Detect Phobos WG interface (non-fatal, fallback to Wireguard3) ── # ── Detect Phobos WG interface (non-fatal, fallback to Wireguard3) ──
# Нет своего интерфейса — выходим: запасной Wireguard3 бывает чужим туннелем.
detect_wg_interface || { detect_wg_interface || {
log "WARN: detect failed, using default $WG_IF" log "ERROR: own WG interface not found, skip"
exit 0
} }
# ── Get handshake age via ndmc ── # ── Get handshake age via ndmc ──

View File

@@ -21,8 +21,10 @@ echo " watchdog, бинарники, $PHOBOS_DIR, $PANEL_DIR"
echo "==================================================" echo "=================================================="
if [ "${PURGE:-0}" != "1" ]; then if [ "${PURGE:-0}" != "1" ]; then
printf "Точно удалить ВСЁ? [yes/NO]: " printf "Точно удалить ВСЁ? [yes/NO]: "
read ans read -r ans </dev/tty 2>/dev/null || read -r ans
[ "$ans" = "yes" ] || { echo "Отменено."; exit 0; } # tolerate CR from Windows/phone terminals, spaces, case, "да"
ans=$(printf '%s' "$ans" | tr -d '\r[:space:]' | tr '[:upper:]' '[:lower:]')
case "$ans" in yes|y|да|д) ;; *) echo "Отменено (нужно ввести yes)."; exit 0 ;; esac
fi fi
IFACE=$(ip route get 8.8.8.8 2>/dev/null | awk '{for(i=1;i<NF;i++) if($i=="dev") print $(i+1)}' | head -1) IFACE=$(ip route get 8.8.8.8 2>/dev/null | awk '{for(i=1;i<NF;i++) if($i=="dev") print $(i+1)}' | head -1)