From 98484ad2204d4d51c4144fc4a26dc0aaf0bc0a1e Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Wed, 18 Mar 2026 11:11:03 +0300 Subject: [PATCH] =?UTF-8?q?feat(wsl):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20boot-=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B3=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D0=BE=D0=BB=D0=B2=D0=B0=20hproxy.local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - старая команда в wsl.conf дублировала записи в /etc/hosts при каждом ребуте. - настройка hproxy.local не была задокументирована в репозитории. - Что: - создан идемпотентный скрипт scripts/setup-hproxy.sh (sed + append). - в install.sh добавлен интерактивный вопрос о подключении скрипта в wsl.conf. - в README.md добавлена документация по настройке hproxy.local (NAT и Mirror). - Проверка: - cat /etc/wsl.conf, wsl --shutdown, getent hosts hproxy.local. Co-Authored-By: Claude Opus 4.6 --- README.md | 35 +++++++++++++++++++++++++++++++++++ install.sh | 24 ++++++++++++++++++++++++ scripts/setup-hproxy.sh | 12 ++++++++++++ 3 files changed, 71 insertions(+) create mode 100755 scripts/setup-hproxy.sh diff --git a/README.md b/README.md index 96ca6b7..6200f93 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ cd ~/dotfiles - Создаёт `~/.claude/settings.local.json` с дефолтными model/effortLevel - Защищает `settings.json` от перезаписи (`chmod 444`) - Автоматически добавляет подключение bash_custom в `~/.bashrc` +- В WSL предлагает настроить автоматический резолв `hproxy.local` (см. ниже) ### Stow вручную @@ -201,6 +202,40 @@ export ZAI_API_KEY="your_zai_api_key_here" Файл `~/.env.secrets` автоматически подгружается при старте shell. +### WSL: настройка hproxy.local + +Имя `hproxy.local` используется как алиас для хоста, на котором работает прокси-сервер. Это позволяет функциям `proxy_on`/`proxy_off` и VS Code Server не зависеть от конкретного IP-адреса. + +**NAT mode** (по умолчанию в WSL2) — IP шлюза меняется при каждом запуске, поэтому нужен автоматический boot-скрипт: + +```bash +# Вариант 1: через install.sh (интерактивно) +./install.sh # ответьте "y" на вопрос про wsl.conf + +# Вариант 2: вручную +sudo tee -a /etc/wsl.conf <<'EOF' + +[boot] +command = "/path/to/dotfiles/scripts/setup-hproxy.sh" +EOF +``` + +После изменения `wsl.conf` перезапустите WSL: `wsl --shutdown`. + +Обновить `hproxy.local` без перезапуска WSL: +```bash +sudo scripts/setup-hproxy.sh +# или +update_hproxy # интерактивная функция из .bash_functions +``` + +**Mirror mode** (`networkingMode=mirrored` в `.wslconfig`) — WSL разделяет сетевой стек с хостом, IP не меняется. Достаточно один раз прописать запись в Windows hosts: + +``` +# C:\Windows\System32\drivers\etc\hosts +192.168.1.100 hproxy.local +``` + ### VS Code Server в WSL Файл `vscode/.vscode-server/server-env-setup` выполняется при каждом старте VS Code Server в WSL и делает две вещи: diff --git a/install.sh b/install.sh index cad2107..7f72998 100755 --- a/install.sh +++ b/install.sh @@ -65,4 +65,28 @@ else info "Добавлено в ~/.bashrc: $BASHRC_LINE" fi +# --- WSL: hproxy.local (автоматический резолв при старте) --- +if [ -n "${WSL_DISTRO_NAME:-}" ]; then + HPROXY_SCRIPT="$DOTFILES_DIR/scripts/setup-hproxy.sh" + if grep -q "hproxy.local" /etc/wsl.conf 2>/dev/null; then + warn "/etc/wsl.conf уже содержит hproxy.local, пропускаю" + else + echo "" + info "Обнаружен WSL. Скрипт $HPROXY_SCRIPT может автоматически" + info "прописывать hproxy.local в /etc/hosts при каждом старте WSL (NAT mode)." + echo -ne "${YELLOW}[?]${NC} Добавить boot command в /etc/wsl.conf? [y/N] " + read -r answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + # Добавляем [boot] секцию, если её нет + if ! grep -q '^\[boot\]' /etc/wsl.conf 2>/dev/null; then + printf '\n[boot]\n' | sudo tee -a /etc/wsl.conf > /dev/null + fi + sudo sed -i "/^\[boot\]/a command = \"$HPROXY_SCRIPT\"" /etc/wsl.conf + info "Добавлено в /etc/wsl.conf. Перезапустите WSL: wsl --shutdown" + else + warn "Пропущено. Можно настроить вручную — см. README.md" + fi + fi +fi + info "Готово!" diff --git a/scripts/setup-hproxy.sh b/scripts/setup-hproxy.sh new file mode 100755 index 0000000..a07566f --- /dev/null +++ b/scripts/setup-hproxy.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Прописывает hproxy.local в /etc/hosts (WSL NAT mode). +# Gateway IP WSL = адрес хоста, на котором слушает прокси. +# +# Использование: +# Вручную: sudo ./setup-hproxy.sh +# При старте WSL — добавить в /etc/wsl.conf: +# [boot] +# command = "/path/to/setup-hproxy.sh" + +sed -i '/hproxy.local/d' /etc/hosts +ip route show default | awk '{print $3 " hproxy.local"}' >> /etc/hosts