feat(proxy-client): добавлены профили и системная служба

Добавлены независимые пользовательские профили, их выбор в Bash-командах и явная установка службы systemd. Инструкции размещены в README пакета.

Проверка: 67 тестов на Python 3.8 и 3.14, shell-наборы и интеграция Bash с CLI. Загрузка ОС и восстановление настоящей службы требуют отдельной проверки.
This commit is contained in:
ddadmin committed 2026-11-02 22:16:12 +01:00
1 parent b36ce50e12
commit b34eb6ac4c
9 files changed
+835 -23

No files matched your search

+159 -7
View File
@@ -1,7 +1,7 @@
# proxy-client
`proxy-client` — переносимый Linux/Bash-интерфейс для запуска команд через
внешний прокси или через управляемый пользовательский Xray. Он добавляет команды
внешний прокси или через управляемый Xray. Он добавляет команды
`proxy_on`, `proxy_off`, `pclaude` и `pcodex`, но не подменяет обычные `claude`
и `codex`.
@@ -78,7 +78,7 @@ source ~/.bash_custom
## Как выбирается прокси
Режим определяется только машинным файлом
Без выбора профиля режим определяется файлом
`~/.config/proxy-client/config`:
| Машинный конфиг | Используется | Что запускать |
@@ -212,14 +212,55 @@ proxy-client install
proxy-client start
```
Другой закрытый профиль можно выбрать без замены `default.url`:
Другой файл VLESS-ссылки можно выбрать без замены `default.url`:
```bash
proxy-client start -f ~/.config/proxy-client/work.url
```
Для переключения профиля сначала выполните `proxy-client stop`. Все файлы с
настоящими VLESS-ссылками должны иметь права `600` и не должны попадать в Git.
Для смены ссылки работающего экземпляра сначала выполните `proxy-client stop`.
Все файлы с настоящими VLESS-ссылками должны иметь права `600` и не должны
попадать в Git.
## Именованные профили
Профиль объединяет настройки локального входа, исключения и, для Xray,
VLESS-ссылку. Без указания имени используется `default`: прежние `config` и
`default.url` остаются на своих местах. Дополнительные профили живут в
`~/.config/proxy-client/profiles/<имя>/`. При заданном `XDG_CONFIG_HOME`
вместо `~/.config` используется этот каталог.
Например, создайте профиль `work`:
```bash
mkdir -p ~/.config/proxy-client/profiles/work
cp ~/.config/proxy-client/examples/config.xray ~/.config/proxy-client/profiles/work/config
$EDITOR ~/.config/proxy-client/profiles/work/config
```
В `config` задайте свободный порт, например `12335`, если основной прокси
занимает `12334`. Поместите VLESS-ссылку в `profiles/work/default.url` и
ограничьте доступ:
```bash
chmod 600 ~/.config/proxy-client/profiles/work/default.url
proxy-client --profile work start
```
Команда остаётся в терминале. В другом терминале можно проверить или
остановить именно этот профиль:
```bash
proxy-client --profile work status
proxy-client --profile work stop
```
Параметр `--profile` ставится перед подкомандой. Неизвестный профиль даёт
ошибку; перехода на `default` нет. Разные профили могут работать одновременно
на разных портах. Остановка одного не затрагивает остальные.
`start -f FILE` переопределяет только файл ссылки выбранного профиля на этот
запуск. Его порт и исключения по-прежнему берутся из `config`.
## Ежедневное использование
@@ -243,6 +284,24 @@ proxy-client start -f ~/.config/proxy-client/work.url
обёрнуты и не выполняют предварительную проверку, но после `proxy_on` наследуют
прокси-переменные, как и любой другой дочерний процесс.
Для именованного профиля:
```bash
proxy_on --profile work
pclaude --proxy-profile work
pcodex --proxy-profile work --search
proxy-client --profile work run -- COMMAND ARG...
```
У `pclaude` и `pcodex` параметр `--proxy-profile` должен быть первым.
Обычный `--profile` передаётся запускаемой программе.
`proxy_on --profile work` меняет окружение терминала, но не профиль по
умолчанию: обычный `codex` наследует это окружение, а `pcodex` без параметра
выберет `default`. `proxy_off` только очищает переменные — работающие прокси,
включая системную службу, остаются запущенными. `myip` использует текущее
окружение.
### Жизненный цикл Xray
```bash
@@ -253,7 +312,7 @@ proxy-client stop
```
`start` сначала проверяет версию и конфигурацию Xray, затем остаётся на переднем
плане. Systemd, фоновый автозапуск и скрытый запуск из `run` не используются.
плане. Скрытого запуска из `run` нет; системная служба устанавливается отдельно.
Один loopback-порт принимает HTTP CONNECT и SOCKS5.
Остановить Xray можно двумя способами: `Ctrl+C` в окне `start` или
@@ -262,7 +321,100 @@ proxy-client stop
остаться работать: `status` и `env` тогда сообщат об ошибке, а `stop` добьёт его
и уберёт файлы. `stop` работает и после изменения машинного типа на `external`.
Второй `start`, пока первый работает, завершится ошибкой.
Второй `start` того же профиля, пока первый работает, завершится ошибкой.
## Системная служба
Этот режим нужен, когда приложения должны получать прокси после загрузки
Linux, до входа пользователя. Требуются systemd, `systemd-sysusers` и права
администратора для установки. Служба одна; именованные профили остаются
пользовательскими.
Сначала подготовьте и проверьте профиль Xray обычным ручным запуском. Перед
запуском службы остановите ручной экземпляр, если он занимает тот же порт.
Установите службу, указав каталог настроек и уже установленный Xray:
```bash
sudo "$HOME/.local/bin/proxy-client" service install \
--config-dir "$HOME/.config/proxy-client" \
--xray "$HOME/.local/bin/xray" --enable --start
```
В качестве `--config-dir` можно указать каталог именованного профиля.
Пути должны быть абсолютными. `--enable` включает запуск при загрузке,
`--start` запускает сейчас. Без этих параметров команда только устанавливает
файлы и регистрирует службу.
Установщик копирует настройки в `/etc/proxy-client/`, а CLI и Xray — в
`/usr/local/lib/proxy-client/`. Служба больше не зависит от домашнего каталога.
Изменения исходного пользовательского профиля на неё не влияют. Системные
настройки имеют владельца `root`, группу `proxy-client` и права `640`;
каталог — `750`. Процесс работает под отдельным пользователем `proxy-client`.
Временные файлы находятся в закрытом `/run/proxy-client/`.
Управление и журнал:
```bash
sudo systemctl status proxy-client
sudo systemctl stop proxy-client
sudo systemctl start proxy-client
sudo systemctl restart proxy-client
sudo journalctl -u proxy-client -b
sudo journalctl -u proxy-client -f
```
Для изменения настроек отредактируйте `/etc/proxy-client/config` или
`/etc/proxy-client/default.url` с правами администратора, затем перезапустите
службу. Сохраняйте владельца, группу и права файлов.
После аварии systemd повторяет запуск с паузой в пять секунд. Явная команда
`stop` оставляет службу остановленной, но не отменяет запуск при следующей
загрузке. Чтобы отключить автозапуск и остановить её сразу:
```bash
sudo systemctl disable --now proxy-client
```
Чтобы включить обратно:
```bash
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
```
Работающий процесс сам не перезапускается. Чужие или вручную изменённые
исполняемые файлы и unit-файл установщик не заменяет; изменения параметров
systemd делайте через `sudo systemctl edit proxy-client`. Файлы заменяются
по одному атомарно, общего отката всей установки при сбое нет.
Вывод CLI поступает в journald. Сырой вывод Xray в системном режиме подавлен,
чтобы сообщения с фрагментами конфигурации не раскрывали секреты; детальные
сетевые журналы Xray поэтому недоступны. Установщик сообщает настройку хранения
journald, но не меняет её. Сохранение журнала после перезагрузки зависит от
настроек машины; проверить предыдущие загрузки можно через
`sudo journalctl --list-boots`.
Открытый локальный порт не гарантирует доступность удалённого сервера.
На ноутбуке сеть может появиться позже службы. Приложениям без повторения
запросов понадобится отдельная настройка ожидания готовности.
Для `proxy_on`, `pclaude`, `pcodex` и `run` системная служба — внешний прокси:
укажите в нужном пользовательском профиле `type = external`, адрес
`127.0.0.1` и порт службы. Дополнительный профиль типа `xray` запускайте вручную
на другом порту. Пользовательский `stop` системной службой не управляет.
Для проверки размещения файлов без установки на машину есть
`service install --config-dir DIR --xray FILE --root /absolute/staging`.
Этот режим не вызывает systemd, не создаёт системную учётную запись и не
назначает ей владельцев; он несовместим с `--enable` и `--start`.
## Прокси в настройках Codex и Claude Code