feat(proxy-client): добавлены профили и системная служба
Добавлены независимые пользовательские профили, их выбор в Bash-командах и явная установка службы systemd. Инструкции размещены в README пакета. Проверка: 67 тестов на Python 3.8 и 3.14, shell-наборы и интеграция Bash с CLI. Загрузка ОС и восстановление настоящей службы требуют отдельной проверки.
This commit is contained in:
1 parent
b36ce50e12
commit
b34eb6ac4c
9 files changed
+835
-23
No files matched your search
+159
-7
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user