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>
106 lines
4.9 KiB
Bash
Executable File
106 lines
4.9 KiB
Bash
Executable File
#!/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
|