refactor(wsl): добавлена поддержка режима Mirror для WSL2
- Зачем: - новый режим networkingMode=mirror в WSL2 требует другого подхода к определению IP-адреса хоста. - Что: - добавлено определение режима WSL через проверку .wslconfig. - при режиме mirror IP берется из Windows hosts файла. - при режиме NAT IP вычисляется через маршрут по умолчанию. - добавлена очистка символов \r при чтении Windows файлов. - улучшены информативные сообщения для пользователя. - Проверка: - вызов функции update_hproxy в обоих режимах WSL2.
This commit is contained in:
1 parent
f865bea0ee
commit
39d1d8636e
1 file changed
+30
-7
+30
-7
@@ -6,19 +6,42 @@
|
||||
# --- WSL Host Update ---
|
||||
update_hproxy() {
|
||||
echo "🔄 Обновление IP-адреса для hproxy.local..."
|
||||
|
||||
# Получаем текущий IP хоста
|
||||
local host_ip=$(ip route show default | awk '{print $3}')
|
||||
|
||||
|
||||
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-адрес хоста."
|
||||
echo "❌ Ошибка: Не удалось определить IP-адрес."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Удаляем старую запись и добавляем новую (потребуется пароль sudo)
|
||||
# Обновляем /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"
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user