refactor(wsl): унифицирована логика hproxy.local и добавлена миграция legacy boot command
- Зачем:
- setup-hproxy.sh удалял запись из hosts до проверки gateway — при ошибке hosts ломался.
- update_hproxy() дублировала логику скрипта с багами и не тестировалась.
- legacy inline boot command в wsl.conf не мигрировался автоматически.
- Что:
- setup-hproxy.sh: безопасный порядок (gateway → hosts), set -e, экранированная точка в sed.
- update_hproxy() заменена на thin wrapper с проверкой wsl.conf и ошибок sudo.
- install.sh: интерактивная замена legacy boot command, детекция существующих [boot] command,
принимает русскую «у» наравне с «y».
- README.md: описаны три сценария (WSL NAT, WSL mirrored — host-side resolution, native Linux).
- добавлены тесты: existing boot command preserved, legacy command migration hint.
- Проверка:
- bash tests/test_install.sh
- ./install.sh (интерактивно, ответить «y» на миграцию legacy command)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
1963b6a117
commit
898db1098d
5 files changed
+131
-66
No files matched your search
+15
-37
@@ -3,46 +3,24 @@
|
||||
# export HTTP_PROXY="http://127.0.0.1:10809"
|
||||
# export HTTPS_PROXY="http://127.0.0.1:10809"
|
||||
|
||||
# --- WSL Host Update ---
|
||||
# --- WSL Host Update (только WSL NAT) ---
|
||||
update_hproxy() {
|
||||
echo "🔄 Обновление IP-адреса для hproxy.local..."
|
||||
|
||||
local host_ip=""
|
||||
local wslconfig=$(ls /mnt/c/Users/*/.wslconfig 2>/dev/null | head -n 1)
|
||||
local win_hosts="/mnt/c/Windows/System32/drivers/etc/hosts"
|
||||
|
||||
# Проверяем наличие параметра networkingMode=mirror в конфиге Windows
|
||||
if [ -f "$wslconfig" ] && grep -qiE '^[[:space:]]*networkingMode[[:space:]]*=[[:space:]]*mirror' "$wslconfig"; then
|
||||
echo "🔍 Обнаружен режим Mirror."
|
||||
|
||||
# Читаем hosts из Windows
|
||||
if [ -f "$win_hosts" ] && grep -qiw "hproxy.local" "$win_hosts"; then
|
||||
# Извлекаем IP (первый столбец) и чистим от виндовых символов возврата каретки (\r)
|
||||
host_ip=$(grep -iw "hproxy.local" "$win_hosts" | awk '{print $1}' | tr -d '\r' | head -n 1)
|
||||
echo "📂 Взят IP из Windows hosts: $host_ip"
|
||||
else
|
||||
# Фолбэк на случай, если записи в Windows нет
|
||||
host_ip="127.0.0.1"
|
||||
echo "⚠️ Запись hproxy.local в Windows hosts не найдена, используем дефолтный $host_ip"
|
||||
fi
|
||||
else
|
||||
echo "🔍 Обнаружен режим NAT."
|
||||
|
||||
# Формируем IP на лету из маршрута по умолчанию
|
||||
host_ip=$(ip route show default | awk '{print $3}')
|
||||
echo "🌐 Вычислен IP шлюза WSL: $host_ip"
|
||||
fi
|
||||
|
||||
if [ -z "$host_ip" ]; then
|
||||
echo "❌ Ошибка: Не удалось определить IP-адрес."
|
||||
local script
|
||||
script="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/../scripts/setup-hproxy.sh"
|
||||
if [ ! -f "$script" ]; then
|
||||
echo "❌ Скрипт не найден: $script"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Обновляем /etc/hosts в Ubuntu
|
||||
sudo sed -i '/hproxy.local/d' /etc/hosts
|
||||
echo "$host_ip hproxy.local" | sudo tee -a /etc/hosts > /dev/null
|
||||
|
||||
echo "✅ Готово! hproxy.local теперь указывает на $host_ip"
|
||||
if ! awk '/^\[boot\]$/{b=1;next} /^\[/{b=0} b && /^[[:space:]]*command[[:space:]]*=/ && /setup-hproxy\.sh/' \
|
||||
"${WSL_CONF_PATH:-/etc/wsl.conf}" 2>/dev/null | grep -q .; then
|
||||
echo "⚠️ Boot command не настроен — update_hproxy работает только для WSL NAT"
|
||||
return 1
|
||||
fi
|
||||
if ! sudo "$script"; then
|
||||
echo "❌ Ошибка обновления hproxy.local"
|
||||
return 1
|
||||
fi
|
||||
echo "✅ hproxy.local -> $(getent hosts hproxy.local 2>/dev/null | awk '{print $1}')"
|
||||
}
|
||||
|
||||
# Удобные функции-переключатели для терминала
|
||||
|
||||
Reference in new issue
Block a user