feat(proxy-client): добавлен мастер установки системной службы
- Зачем: установка с нуля и переход из ручного Xray одной командой. - Что: план с подтверждением или --yes, скрытый ввод ссылки, проверка Xray, перенос настроек, запуск службы и переключение домашнего профиля; безопасное продолжение после сбоя и сохранение существующих настроек. - Проверка: cross-review Claude и исправление находок; по 108 тестов на Python 3.8 и 3.14 под PTY, 18 Bash-проверок. После аудита уточнена фикстура повторного запуска и отдельно проверена на обеих версиях Python. Настоящие службы и настройки машины не изменялись.
This commit is contained in:
1 parent
45938cde98
commit
203e515479
5 files changed
+1250
-56
No files matched your search
+116
-18
@@ -330,20 +330,116 @@ Linux, до входа пользователя. Требуются systemd, `sy
|
||||
администратора для установки. Служба одна; именованные профили остаются
|
||||
пользовательскими.
|
||||
|
||||
Сначала подготовьте и проверьте профиль Xray обычным ручным запуском. Перед
|
||||
запуском службы остановите ручной экземпляр, если он занимает тот же порт.
|
||||
Установите службу, указав каталог настроек и уже установленный Xray:
|
||||
### Установка и переход из tmux
|
||||
|
||||
Запустите от своего пользователя, без `sudo`:
|
||||
|
||||
```bash
|
||||
sudo "$HOME/.local/bin/proxy-client" service install \
|
||||
--config-dir "$HOME/.config/proxy-client" \
|
||||
--xray "$HOME/.local/bin/xray" --enable --start
|
||||
proxy-client service install
|
||||
```
|
||||
|
||||
В качестве `--config-dir` можно указать каталог именованного профиля.
|
||||
Пути должны быть абсолютными. `--enable` включает запуск при загрузке,
|
||||
`--start` запускает сейчас. Без этих параметров команда только устанавливает
|
||||
файлы и регистрирует службу.
|
||||
В терминале команда показывает план и просит одно подтверждение.
|
||||
Если настроек нет, она запросит VLESS-ссылку скрытым вводом и предложит
|
||||
локальный порт `12334`. Если Xray отсутствует, скачает закреплённую версию
|
||||
и проверит контрольную сумму. Ссылка не попадает в аргументы процессов и журнал.
|
||||
|
||||
Если профиль уже настроен, используются его `config` и `default.url`.
|
||||
После подтверждения команда проверяет конфигурацию Xray, устанавливает
|
||||
системные файлы через `sudo`, останавливает свой ручной Xray и запускает службу
|
||||
с автозапуском. Текущие соединения при переходе прервутся. Чужой процесс,
|
||||
занимающий порт, команда не останавливает.
|
||||
|
||||
Когда служба активна и локальный порт доступен, домашний `config` переключается
|
||||
на `type=external`. Поэтому `proxy_on`, `status` и `run` сразу работают со
|
||||
службой. Прежний файл сохраняется рядом как `config.before-service.*`.
|
||||
Готовность локального порта не гарантирует доступность удалённого сервера.
|
||||
|
||||
Если файлы службы уже установлены через `--install-only`, но домашний профиль
|
||||
ещё имеет `type=xray`, мастер завершит перенос. Сначала он проверит совпадение
|
||||
настроек с системными; другой профиль не заменит уже настроенную службу.
|
||||
|
||||
Для именованного профиля:
|
||||
|
||||
```bash
|
||||
proxy-client --profile work service install
|
||||
```
|
||||
|
||||
Для принятия плана без вопроса есть `--yes` и его синоним `--auto-yes`:
|
||||
|
||||
```bash
|
||||
proxy-client service install --yes
|
||||
```
|
||||
|
||||
При настройке с нуля без терминала передайте закрытый файл со ссылкой:
|
||||
|
||||
```bash
|
||||
chmod 600 ~/connection.url
|
||||
proxy-client service install --auto-yes --file ~/connection.url --port 12334
|
||||
```
|
||||
|
||||
`--file` также подходит, если ручной Xray запускался с разовой ссылкой
|
||||
через `start -f`. Без него берётся сохранённый `default.url`.
|
||||
`--yes` принимает план, но не заменяет ввод недостающей ссылки и не отменяет
|
||||
проверки или запрос пароля `sudo`.
|
||||
|
||||
### Ошибка или прерывание
|
||||
|
||||
До успешной установки системных файлов ручной Xray продолжает работать.
|
||||
Если запуск службы не удался после его остановки, домашний профиль остаётся
|
||||
прежним. Команда пытается отключить неудачно запущенную службу и показывает,
|
||||
как вернуть ручной запуск. Восстановить прежние соединения и процесс в tmux
|
||||
автоматически нельзя.
|
||||
|
||||
Повторите `proxy-client service install`: незавершённый переход продолжится
|
||||
по закрытому снимку `service-setup.json` в каталоге состояния выбранного
|
||||
профиля. Снимок содержит VLESS-ссылку, имеет права `600` в каталоге `700`
|
||||
и удаляется после успеха. Если домашние или системные настройки успели
|
||||
измениться, команда остановится, чтобы их не затереть. Проверяется также
|
||||
исходный `default.url` или файл, переданный через `--file`, до остановки
|
||||
ручного Xray. После запуска служба использует свою копию ссылки; позднее
|
||||
изменение исходной ссылки не отменяет завершение перехода.
|
||||
|
||||
Чтобы отказаться от старого снимка и прочитать текущие настройки заново,
|
||||
удалите только `service-setup.json`: точную команду `rm -- …` CLI печатает
|
||||
при конфликте. Для профиля по умолчанию без переопределения XDG это:
|
||||
|
||||
```bash
|
||||
rm -- ~/.local/state/proxy-client/service-setup.json
|
||||
proxy-client service install
|
||||
```
|
||||
|
||||
Сброс снимка не меняет домашние файлы, настройки службы и работающие процессы.
|
||||
Если системные настройки уже отличаются от желаемых, их нужно изменить
|
||||
отдельно в `/etc/proxy-client` — мастер их не перезаписывает.
|
||||
|
||||
### Только установка файлов
|
||||
|
||||
Для прежнего режима без мастера и переключения домашнего профиля:
|
||||
|
||||
```bash
|
||||
proxy-client service install --install-only
|
||||
```
|
||||
|
||||
Без терминала явно выберите `--yes` для полного перехода или `--install-only`
|
||||
для установки файлов; команда без выбора режима завершится с подсказкой.
|
||||
Режим установки файлов требует готовые
|
||||
настройки и Xray, а при их отсутствии выдаёт подсказку до вызова `sudo`.
|
||||
`--enable`, `--start` и `--restart` явно включают автозапуск, запуск сейчас
|
||||
или перезапуск с проверкой готовности. Без этих флагов служба не запускается.
|
||||
|
||||
Xray ищется в `~/.local/bin`, затем в `PATH` и системной установке.
|
||||
Параметр `--xray FILE` переопределяет выбор. Для установки из произвольного
|
||||
каталога есть `--config-dir DIR`: он тоже выбирает режим установки файлов.
|
||||
Пути должны быть абсолютными; `--config-dir` несовместим с именованным
|
||||
`--profile`. Прямой запуск через `sudo` подходит для `--install-only`;
|
||||
нестандартный каталог XDG в этом случае задавайте через `--config-dir`.
|
||||
|
||||
### Доступ к прокси
|
||||
|
||||
Xray слушает только числовой loopback-адрес: `127.0.0.1` или `::1`.
|
||||
Проверка выполняется при установке и каждом запуске. Адреса всех интерфейсов
|
||||
(`0.0.0.0`, `::`) и локальной сети не принимаются. Другие процессы на этой же
|
||||
машине могут пользоваться прокси.
|
||||
|
||||
Установщик копирует настройки в `/etc/proxy-client/`, а CLI и Xray — в
|
||||
`/usr/local/lib/proxy-client/`. Служба больше не зависит от домашнего каталога.
|
||||
@@ -381,18 +477,20 @@ sudo systemctl disable --now proxy-client
|
||||
sudo systemctl enable --now proxy-client
|
||||
```
|
||||
|
||||
При обновлении повторите установку из актуальной копии пакета. Существующие
|
||||
системные настройки сохраняются; исходный домашний профиль уже не нужен:
|
||||
При обновлении повторите команду из актуальной копии пакета:
|
||||
|
||||
```bash
|
||||
sudo "$HOME/.local/bin/proxy-client" service install \
|
||||
--config-dir /etc/proxy-client --xray "$HOME/.local/bin/xray"
|
||||
sudo systemctl restart proxy-client
|
||||
proxy-client service install
|
||||
```
|
||||
|
||||
Работающий процесс сам не перезапускается. Чужие или вручную изменённые
|
||||
исполняемые файлы и unit-файл установщик не заменяет; изменения параметров
|
||||
systemd делайте через `sudo systemctl edit proxy-client`. Файлы заменяются
|
||||
Мастер предложит обновить и перезапустить службу. Настройки в
|
||||
`/etc/proxy-client` сохраняются, домашний профиль не меняется и может
|
||||
отсутствовать. Без терминала используйте `--yes` для этого же действия.
|
||||
Режим `--install-only` по-прежнему не перезапускает службу без явного флага.
|
||||
|
||||
Чужие или вручную изменённые исполняемые файлы и unit-файл установщик
|
||||
не заменяет; изменения параметров systemd делайте через
|
||||
`sudo systemctl edit proxy-client`. Файлы заменяются
|
||||
по одному атомарно, общего отката всей установки при сбое нет. После
|
||||
устранения причины сбоя повторите установку: журнал незавершённой установки
|
||||
позволяет продолжить её, сохраняя проверку принадлежности файлов.
|
||||
|
||||
Reference in new issue
Block a user