Expand local_machine docs and automation for connectivity, games, and ops.
Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs; document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
105
docs/connectivity/scripts/macos-hotspot-network-recover.sh
Executable file
105
docs/connectivity/scripts/macos-hotspot-network-recover.sh
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/bin/sh
|
||||
# Сброс сетевого стека macOS после смены хотспота / «интернет не поднимается без перезагрузки».
|
||||
# Типичная причина в связке с docs/connectivity: системный PAC на localhost:1089 при мёртвом/ещё не
|
||||
# поднятом PAC-сервере + кэш DNS / Wi‑Fi. См. HOTSPOT_NETWORK_EMERGENCY.md
|
||||
#
|
||||
# Использование (из корня репозитория):
|
||||
# ./docs/connectivity/scripts/macos-hotspot-network-recover.sh status
|
||||
# ./docs/connectivity/scripts/macos-hotspot-network-recover.sh recover
|
||||
#
|
||||
# Переменные:
|
||||
# MACOS_PAC_SERVICES — как в macos-system-pac.sh (по умолчанию Wi-Fi|Thunderbolt Bridge 2)
|
||||
# WIFI_DEVICE — например en0; иначе авто: первый Device у Hardware Port: Wi-Fi
|
||||
|
||||
set -e
|
||||
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
||||
PAC_SCRIPT="$ROOT/macos-system-pac.sh"
|
||||
|
||||
wifi_device() {
|
||||
if [ -n "${WIFI_DEVICE:-}" ]; then
|
||||
printf '%s\n' "$WIFI_DEVICE"
|
||||
return
|
||||
fi
|
||||
# "Device: en0" под блоком "Hardware Port: Wi-Fi"
|
||||
networksetup -listallhardwareports 2>/dev/null \
|
||||
| awk '/Hardware Port: Wi-Fi$/ {p=1; next} p && /^Device: / {print $2; exit}'
|
||||
}
|
||||
|
||||
usage() {
|
||||
printf '%s\n' "Usage: $(basename "$0") status|recover" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
[ "$#" -eq 1 ] || usage
|
||||
cmd=$1
|
||||
|
||||
case "$cmd" in
|
||||
status)
|
||||
echo "=== Wi-Fi device (hardware) ==="
|
||||
wifi_device || true
|
||||
echo "=== networksetup -listallnetworkservices (excerpt) ==="
|
||||
networksetup -listallnetworkservices 2>/dev/null | head -15 || true
|
||||
echo "=== PAC / autoproxy (Wi-Fi + Thunderbolt Bridge 2 if present) ==="
|
||||
if [ -x "$PAC_SCRIPT" ]; then
|
||||
MACOS_PAC_SERVICES="${MACOS_PAC_SERVICES:-Wi-Fi|Thunderbolt Bridge 2}" "$PAC_SCRIPT" status || true
|
||||
fi
|
||||
echo "=== SOCKS firewall (Wi-Fi) ==="
|
||||
networksetup -getsocksfirewallproxy "Wi-Fi" 2>/dev/null || true
|
||||
echo "=== Web proxy (Wi-Fi) ==="
|
||||
networksetup -getwebproxy "Wi-Fi" 2>/dev/null || true
|
||||
echo "=== Listener on 1089 (PAC URL default) ==="
|
||||
if lsof -i :1089 -sTCP:LISTEN 2>/dev/null | head -5; then
|
||||
:
|
||||
else
|
||||
echo "(none — при Enabled PAC в Safari/системе возможны сбои)"
|
||||
fi
|
||||
echo "=== Default route ==="
|
||||
route -n get default 2>/dev/null | head -12 || true
|
||||
echo "=== Quick reachability (ICMP may be blocked on some hotspots) ==="
|
||||
ping -c 1 -W 2000 1.1.1.1 >/dev/null 2>&1 && echo "ping 1.1.1.1: ok" || echo "ping 1.1.1.1: fail"
|
||||
;;
|
||||
recover)
|
||||
echo "1) Отключаем автоматический PAC на выбранных сервисах..."
|
||||
if [ -x "$PAC_SCRIPT" ]; then
|
||||
MACOS_PAC_SERVICES="${MACOS_PAC_SERVICES:-Wi-Fi|Thunderbolt Bridge 2}" "$PAC_SCRIPT" off
|
||||
else
|
||||
echo "WARN: нет $PAC_SCRIPT — вручную: Системные настройки → Сеть → Wi‑Fi → Подробнее → Прокси → снять «Автоматическая настройка прокси»" >&2
|
||||
fi
|
||||
echo "2) Отключаем системный SOCKS-прокси на Wi-Fi (если был включён Shadowsocks и т.п.)..."
|
||||
if networksetup -listallnetworkservices 2>/dev/null | grep -Fqx "Wi-Fi"; then
|
||||
networksetup -setsocksfirewallproxystate "Wi-Fi" off 2>/dev/null || true
|
||||
fi
|
||||
echo "3) Сброс DNS-кэша (нужен sudo)..."
|
||||
if sudo -n true 2>/dev/null; then
|
||||
sudo dscacheutil -flushcache 2>/dev/null || true
|
||||
sudo killall -HUP mDNSResponder 2>/dev/null || true
|
||||
echo " mDNSResponder перезагружен."
|
||||
else
|
||||
echo " Пропуск (нет sudo без пароля). Выполните вручную:"
|
||||
echo " sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder"
|
||||
fi
|
||||
dev="$(wifi_device)"
|
||||
if [ -n "$dev" ]; then
|
||||
echo "4) Обновление DHCP на $dev (нужен sudo)..."
|
||||
if sudo -n true 2>/dev/null; then
|
||||
sudo ipconfig set "$dev" DHCP 2>/dev/null || true
|
||||
else
|
||||
echo " Пропуск. Вручную: sudo ipconfig set $dev DHCP"
|
||||
fi
|
||||
echo "5) Краткое выключение/включение Wi‑Fi радиомодуля ($dev)..."
|
||||
networksetup -setairportpower "$dev" off 2>/dev/null || true
|
||||
sleep 2
|
||||
networksetup -setairportpower "$dev" on 2>/dev/null || true
|
||||
else
|
||||
echo "4–5) Не удалось определить Wi‑Fi device — пропуск DHCP/airport power. Вручную выключите/включите Wi‑Fi в меню."
|
||||
fi
|
||||
echo "=== Готово. Проверка: ==="
|
||||
"$0" status
|
||||
echo ""
|
||||
echo "Если интернет всё ещё нет: откройте хотспот в браузере (captive portal), затем при необходимости снова включите PAC:"
|
||||
echo " ./docs/connectivity/scripts/macos-pac-on.sh"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user