fix(proxy-client): согласованы инструкции самостоятельной установки
- Зачем: - README смешивал пакетный и корневой установщики и оставлял неполные шаги для отдельных сценариев. - Что: - выстроен цельный путь установки и настройки для standalone и полного dotfiles. - дополнена подсказка --no-shell-setup и добавлена регрессионная проверка. - закрыты критерии приёмки тикета и указана дата завершения. - Проверка: - bash tests/test_proxy_client_install.sh. - bash tests/test_install.sh.
This commit is contained in:
1 parent
f679515a8f
commit
623ed8f871
4 files changed
+109
-61
No files matched your search
@@ -10,33 +10,35 @@
|
|||||||
|
|
||||||
**Status:** ready-for-agent
|
**Status:** ready-for-agent
|
||||||
|
|
||||||
- [ ] При наличии stow установщик использует его, а без stow создаёт напрямую
|
**Completed:** 2026-07-21
|
||||||
|
|
||||||
|
- [x] При наличии stow установщик использует его, а без stow создаёт напрямую
|
||||||
тот же набор симлинков и явно сообщает выбранный способ.
|
тот же набор симлинков и явно сообщает выбранный способ.
|
||||||
- [ ] Управляются только CLI, Bash-модуль и шаблоны; машинный конфиг и закрытый
|
- [x] Управляются только CLI, Bash-модуль и шаблоны; машинный конфиг и закрытый
|
||||||
профиль не создаются, не заменяются и не связываются даже при наличии в
|
профиль не создаются, не заменяются и не связываются даже при наличии в
|
||||||
исходном каталоге.
|
исходном каталоге.
|
||||||
- [ ] Домашние каталоги остаются обычными каталогами; пакетные README и
|
- [x] Домашние каталоги остаются обычными каталогами; пакетные README и
|
||||||
установщик не раскладываются в домашний каталог.
|
установщик не раскладываются в домашний каталог.
|
||||||
- [ ] До любых изменений проверяется весь набор назначений. Любой чужой файл,
|
- [x] До любых изменений проверяется весь набор назначений. Любой чужой файл,
|
||||||
каталог или симлинк приводит к отказу без частичной установки и без
|
каталог или симлинк приводит к отказу без частичной установки и без
|
||||||
автоматической замены или резервной копии; пользователю показывается полный
|
автоматической замены или резервной копии; пользователю показывается полный
|
||||||
список конфликтующих путей.
|
список конфликтующих путей.
|
||||||
- [ ] Повторный запуск для уже правильных ссылок ничего не меняет и завершается
|
- [x] Повторный запуск для уже правильных ссылок ничего не меняет и завершается
|
||||||
успешно, а исходный каталог может находиться в произвольном пути, включая
|
успешно, а исходный каталог может находиться в произвольном пути, включая
|
||||||
путь с пробелами.
|
путь с пробелами.
|
||||||
- [ ] По умолчанию установщик идемпотентно подключает Bash-модуль и при
|
- [x] По умолчанию установщик идемпотентно подключает Bash-модуль и при
|
||||||
необходимости добавляет пользовательский каталог исполняемых файлов в
|
необходимости добавляет пользовательский каталог исполняемых файлов в
|
||||||
`PATH`, не дублируя подключение из полного dotfiles.
|
`PATH`, не дублируя подключение из полного dotfiles.
|
||||||
- [ ] Параметр `--no-shell-setup` полностью отключает изменение настроек Bash.
|
- [x] Параметр `--no-shell-setup` полностью отключает изменение настроек Bash.
|
||||||
- [ ] После раскладки проверяется только локальная исправность CLI и
|
- [x] После раскладки проверяется только локальная исправность CLI и
|
||||||
Bash-модуля; установка не выбирает режим, не устанавливает Xray, не читает
|
Bash-модуля; установка не выбирает режим, не устанавливает Xray, не читает
|
||||||
VLESS, не проверяет сеть и не требует существующего корректного конфига.
|
VLESS, не проверяет сеть и не требует существующего корректного конфига.
|
||||||
- [ ] Финальный вывод кратко объясняет, как применить изменения в текущей
|
- [x] Финальный вывод кратко объясняет, как применить изменения в текущей
|
||||||
shell-сессии, предупреждает о постоянном пути исходного каталога и направляет
|
shell-сессии, предупреждает о постоянном пути исходного каталога и направляет
|
||||||
к настройке режимов в основной инструкции, не дублируя её.
|
к настройке режимов в основной инструкции, не дублируя её.
|
||||||
- [ ] Автоматические проверки покрывают оба способа создания ссылок, повторный
|
- [x] Автоматические проверки покрывают оба способа создания ссылок, повторный
|
||||||
запуск, все виды конфликтов, защиту машинных файлов, настройку Bash и режим
|
запуск, все виды конфликтов, защиту машинных файлов, настройку Bash и режим
|
||||||
без её изменения.
|
без её изменения.
|
||||||
- [ ] Инструкция пакета описывает новый установщик, зависимость симлинков от
|
- [x] Инструкция пакета описывает новый установщик, зависимость симлинков от
|
||||||
постоянного пути исходного каталога и дальнейшую ручную настройку; общий
|
постоянного пути исходного каталога и дальнейшую ручную настройку; общий
|
||||||
установщик dotfiles продолжает работать по прежнему контракту.
|
установщик dotfiles продолжает работать по прежнему контракту.
|
||||||
+93
-47
@@ -10,30 +10,10 @@ CLI требует Python 3.8+ и использует только станда
|
|||||||
|
|
||||||
## Установка
|
## Установка
|
||||||
|
|
||||||
### В составе dotfiles
|
|
||||||
|
|
||||||
Полная установка подключает пакет и автоматически загружает Bash-функции в
|
|
||||||
новых интерактивных сессиях:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd ~/dotfiles
|
|
||||||
./install.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Установщик заранее создаёт `~/.local/bin` и `~/.config/proxy-client`, чтобы Stow
|
|
||||||
размещал ссылки внутри них, а не превращал сами каталоги в ссылки на
|
|
||||||
репозиторий.
|
|
||||||
|
|
||||||
После установки откройте новый Bash или выполните:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
source ~/.bash_custom
|
|
||||||
```
|
|
||||||
|
|
||||||
### Только пакет `proxy-client`
|
### Только пакет `proxy-client`
|
||||||
|
|
||||||
Каталог можно скопировать отдельно от остальных dotfiles и запустить его
|
Скопируйте каталог в постоянное место и запустите пакетный установщик. Текущий
|
||||||
собственный установщик из любого рабочего каталога:
|
рабочий каталог не важен:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
~/src/proxy-client/install.sh
|
~/src/proxy-client/install.sh
|
||||||
@@ -44,18 +24,54 @@ source ~/.bash_custom
|
|||||||
нельзя перемещать: домашние ссылки зависят от его постоянного пути.
|
нельзя перемещать: домашние ссылки зависят от его постоянного пути.
|
||||||
|
|
||||||
По умолчанию установщик добавляет в `~/.bashrc` помеченный блок для
|
По умолчанию установщик добавляет в `~/.bashrc` помеченный блок для
|
||||||
`~/.local/bin` и Bash-модуля. Чтобы оставить настройки оболочки без изменений:
|
`~/.local/bin` и Bash-модуля. После установки откройте новый Bash или примените
|
||||||
|
блок в текущей сессии:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
Чтобы оставить `~/.bashrc` без изменений, запустите:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
~/src/proxy-client/install.sh --no-shell-setup
|
~/src/proxy-client/install.sh --no-shell-setup
|
||||||
```
|
```
|
||||||
|
|
||||||
|
В этом случае подготовьте только текущую сессию вручную:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
source ~/.config/proxy-client/shell.bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Для следующих сессий добавьте эти строки в подходящий Bash-конфиг сами.
|
||||||
|
|
||||||
Установщик не создаёт машинный `config` и закрытый `default.url`, не
|
Установщик не создаёт машинный `config` и закрытый `default.url`, не
|
||||||
устанавливает Xray и не проверяет сеть. После установки примените изменения
|
устанавливает Xray и не проверяет сеть. После подключения команд выберите режим
|
||||||
через `source ~/.bashrc`; с `--no-shell-setup` подключите модуль напрямую:
|
по разделу [«Настройка режима»](#настройка-режима). Без машинного конфига
|
||||||
`source ~/.config/proxy-client/shell.bash`. Затем выберите режим по разделу
|
действует режим Hiddify по умолчанию.
|
||||||
[«Настройка режима»](#настройка-режима). Без машинного конфига продолжает
|
|
||||||
действовать режим Hiddify по умолчанию.
|
### В составе dotfiles
|
||||||
|
|
||||||
|
Корневой установщик dotfiles подключает тот же пакет через Stow и загружает
|
||||||
|
Bash-функции в новых интерактивных сессиях:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/dotfiles
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Он заранее создаёт `~/.local/bin` и `~/.config/proxy-client`, чтобы Stow
|
||||||
|
размещал ссылки внутри них, а не превращал сами каталоги в ссылки на
|
||||||
|
репозиторий. После установки откройте новый Bash или выполните:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
source ~/.bash_custom
|
||||||
|
```
|
||||||
|
|
||||||
|
Если `~/.local/bin` отсутствует в `PATH` и в новых сессиях, добавьте ту же строку
|
||||||
|
`export` в свой Bash-конфиг: корневой установщик dotfiles его не изменяет.
|
||||||
|
|
||||||
## Как выбирается прокси
|
## Как выбирается прокси
|
||||||
|
|
||||||
@@ -91,28 +107,46 @@ proxy-client status
|
|||||||
pclaude --version
|
pclaude --version
|
||||||
```
|
```
|
||||||
|
|
||||||
В WSL NAT mode IP Windows-шлюза меняется при перезапуске. Интерактивный
|
#### WSL NAT mode
|
||||||
`./install.sh` предлагает добавить обновление `hproxy.local` в `/etc/wsl.conf`.
|
|
||||||
То же можно настроить вручную:
|
|
||||||
|
|
||||||
```ini
|
IP Windows-шлюза меняется при перезапуске WSL, поэтому `hproxy.local` нужно
|
||||||
[boot]
|
обновлять. В отдельно скопированном пакете системных помощников нет. Узнайте
|
||||||
command = "/path/to/dotfiles/scripts/setup-hproxy.sh"
|
адрес шлюза:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip route show default | awk 'NR == 1 {print $3}'
|
||||||
```
|
```
|
||||||
|
|
||||||
После изменения выполните `wsl --shutdown` из Windows. Обновить адрес без
|
Затем откройте `/etc/hosts` через `sudoedit` и оставьте одну отдельную строку с
|
||||||
перезапуска WSL можно так:
|
полученным адресом:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudoedit /etc/hosts
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
<адрес-шлюза> hproxy.local
|
||||||
|
```
|
||||||
|
|
||||||
|
Не удаляйте другие имена на той же строке: при необходимости перенесите их на
|
||||||
|
отдельную строку. Повторяйте обновление после перезапуска WSL.
|
||||||
|
|
||||||
|
С полным dotfiles запустите корневой `~/dotfiles/install.sh` интерактивно: он
|
||||||
|
предложит автоматическое обновление при старте WSL. Обновить адрес сразу можно
|
||||||
|
так:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo ~/dotfiles/scripts/setup-hproxy.sh
|
sudo ~/dotfiles/scripts/setup-hproxy.sh
|
||||||
# или после загрузки Bash-функций:
|
# после настройки автозапуска и загрузки общих Bash-функций:
|
||||||
update_hproxy
|
update_hproxy
|
||||||
```
|
```
|
||||||
|
|
||||||
В NAT mode Hiddify должен слушать адрес, доступный через Windows-шлюз, а не
|
В NAT mode Hiddify должен слушать адрес, доступный через Windows-шлюз, а не
|
||||||
только `127.0.0.1`.
|
только `127.0.0.1`.
|
||||||
|
|
||||||
В [WSL mirrored mode](https://learn.microsoft.com/windows/wsl/networking#mirrored-mode-networking)
|
#### WSL mirrored mode
|
||||||
|
|
||||||
|
В [mirrored mode](https://learn.microsoft.com/windows/wsl/networking#mirrored-mode-networking)
|
||||||
(`networkingMode=mirrored`) Windows-сервисы доступны из WSL через `127.0.0.1`.
|
(`networkingMode=mirrored`) Windows-сервисы доступны из WSL через `127.0.0.1`.
|
||||||
Чтобы сохранить адрес по умолчанию, добавьте алиас в Windows hosts:
|
Чтобы сохранить адрес по умолчанию, добавьте алиас в Windows hosts:
|
||||||
|
|
||||||
@@ -121,9 +155,9 @@ update_hproxy
|
|||||||
127.0.0.1 hproxy.local
|
127.0.0.1 hproxy.local
|
||||||
```
|
```
|
||||||
|
|
||||||
Альтернатива — создать `config.external` с `address = 127.0.0.1`. В обоих
|
Альтернатива — настройте внешний режим по следующему разделу и укажите
|
||||||
случаях проверьте результат через `getent hosts hproxy.local` или
|
`address = 127.0.0.1`. Алиас проверяйте через `getent hosts hproxy.local`, а
|
||||||
`proxy-client status`.
|
активный конфиг — через `proxy-client status`.
|
||||||
|
|
||||||
### Другой внешний прокси
|
### Другой внешний прокси
|
||||||
|
|
||||||
@@ -169,7 +203,7 @@ chmod 600 ~/.config/proxy-client/default.url
|
|||||||
proxy-client install
|
proxy-client install
|
||||||
```
|
```
|
||||||
|
|
||||||
Запустите Xray в отдельной панели tmux:
|
Запустите Xray в отдельном терминале или панели tmux:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
proxy-client start
|
proxy-client start
|
||||||
@@ -260,18 +294,30 @@ export PROXY_PREFLIGHT_TIMEOUT=5
|
|||||||
|
|
||||||
### Ручное подключение без установщика
|
### Ручное подключение без установщика
|
||||||
|
|
||||||
Если пакетный установщик запустить нельзя, создайте те же ссылки вручную:
|
Если пакетный установщик запустить нельзя, выберите постоянный абсолютный путь
|
||||||
|
к исходному каталогу и создайте те же ссылки вручную. Команды предполагают, что
|
||||||
|
назначения ещё не заняты:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p ~/.local/bin ~/.config/proxy-client
|
mkdir -p ~/.local/bin ~/.config/proxy-client
|
||||||
ln -s /path/to/proxy-client/.local/bin/proxy-client ~/.local/bin/proxy-client
|
ln -s /absolute/path/to/proxy-client/.local/bin/proxy-client \
|
||||||
ln -s /path/to/proxy-client/.config/proxy-client/shell.bash \
|
~/.local/bin/proxy-client
|
||||||
|
ln -s /absolute/path/to/proxy-client/.config/proxy-client/shell.bash \
|
||||||
~/.config/proxy-client/shell.bash
|
~/.config/proxy-client/shell.bash
|
||||||
ln -s /path/to/proxy-client/.config/proxy-client/examples \
|
ln -s /absolute/path/to/proxy-client/.config/proxy-client/examples \
|
||||||
~/.config/proxy-client/examples
|
~/.config/proxy-client/examples
|
||||||
|
chmod 755 /absolute/path/to/proxy-client/.local/bin/proxy-client
|
||||||
```
|
```
|
||||||
|
|
||||||
Исполняемому файлу нужен режим `755`, а `~/.local/bin` должен входить в `PATH`.
|
Подготовьте текущую Bash-сессию:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
source ~/.config/proxy-client/shell.bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Для следующих сессий добавьте эти две строки в свой Bash-конфиг. Исходный
|
||||||
|
каталог после этого нельзя перемещать: созданные ссылки зависят от его пути.
|
||||||
|
|
||||||
### Машинный конфиг
|
### Машинный конфиг
|
||||||
|
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ fi
|
|||||||
if [ "$SETUP_SHELL" -eq 1 ]; then
|
if [ "$SETUP_SHELL" -eq 1 ]; then
|
||||||
RELOAD_COMMAND='source ~/.bashrc'
|
RELOAD_COMMAND='source ~/.bashrc'
|
||||||
else
|
else
|
||||||
RELOAD_COMMAND='source ~/.config/proxy-client/shell.bash'
|
RELOAD_COMMAND='export PATH="$HOME/.local/bin:$PATH"; source ~/.config/proxy-client/shell.bash'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
|||||||
@@ -69,8 +69,8 @@ test_installs_same_public_artifacts_without_stow() {
|
|||||||
printf '%s' "$output" | grep -Fq 'без Stow' \
|
printf '%s' "$output" | grep -Fq 'без Stow' \
|
||||||
|| fail "Expected direct-symlink method in output"
|
|| fail "Expected direct-symlink method in output"
|
||||||
printf '%s' "$output" | grep -Fq \
|
printf '%s' "$output" | grep -Fq \
|
||||||
'source ~/.config/proxy-client/shell.bash' \
|
'export PATH="$HOME/.local/bin:$PATH"; source ~/.config/proxy-client/shell.bash' \
|
||||||
|| fail "Expected direct shell-module hint with --no-shell-setup"
|
|| fail "Expected complete current-session hint with --no-shell-setup"
|
||||||
[ -d "$home_dir/.local/bin" ] && [ ! -L "$home_dir/.local/bin" ] \
|
[ -d "$home_dir/.local/bin" ] && [ ! -L "$home_dir/.local/bin" ] \
|
||||||
|| fail "Expected ~/.local/bin to be a real directory"
|
|| fail "Expected ~/.local/bin to be a real directory"
|
||||||
[ -d "$home_dir/.config/proxy-client" ] \
|
[ -d "$home_dir/.config/proxy-client" ] \
|
||||||
|
|||||||
Reference in new issue
Block a user