What happened?
Пока настраивал реле на рф серв нашел два бага
Два бага meridian'а:
- provision/relay.py:26 — в _RELAY_PACKAGES нет netcat-openbsd. VerifyRelay дёргает nc -z → 127 → ложное "cannot reach exit". Фикс: добавить
netcat-openbsd в список.
- ssh.py:212-216 — в local_mode команды оборачиваются в sudo -n bash -c даже когда мы root, если use_sudo or needs_sudo. На минимальном Debian
(где meridian relay deploy бежит из-под root, sudo не установлен) → FileNotFoundError: 'sudo'. Фикс: при os.geteuid() == 0 пропускать
sudo-обёртку.
What happened? (body):
meridian relay deploy падает в двух независимых местах на минимальной Debian. Оба бага воспроизводятся на свежеподнятых exit + relay.
Воркэраунды — однострочники, корневые причины похожи на простые недосмотры.
Баг 1: VerifyRelay ложно фейлится, когда на реле нет nc
Симптом:
✗ Verify relay connectivity (relay cannot reach exit X.X.X.X:443. Check: ...)
Причина: src/meridian/provision/relay.py:26
_RELAY_PACKAGES = ["curl", "wget", "ufw", "ca-certificates"]
Netcat в список не включён. VerifyRelay в src/meridian/provision/relay.py:336 зовёт nc -z -w 5 ..., который возвращает 127 ("command not
found") когда nc отсутствует — meridian рапортует это как фейл коннективити. На самом деле сеть в порядке (проверено через bash -c 'exec 3<>/dev/tcp/...').
InstallPackages отчитывается "all packages present", потому что проверяет только 4 пакета из списка.
Фикс: добавить netcat-openbsd в _RELAY_PACKAGES.
Баг 2: в local-mode команды оборачиваются в sudo даже когда я root → крашится на системах без sudo
Симптом (после воркэраунда Баг 1):
FileNotFoundError: [Errno 2] No such file or directory: 'sudo'
Трейс упирается в commands/relay.py:202 (_deploy_relay_nginx) → ssh.py:218 → subprocess.run(["sudo", "-n", ...]).
Причина: src/meridian/ssh.py:210-216
use_sudo = sudo if sudo is not None else (self.user != "root")
if self.local_mode:
if self.needs_sudo or use_sudo:
cmd = ["sudo", "-n", "bash", "-c", command]
Запускаю meridian relay deploy прямо на экзите под root: local_mode=True (детектится по /etc/meridian/proxy.yml), но self.user для
exit-соединения почему-то не "root" (берётся из registry) → use_sudo=True → meridian локально дёргает sudo. На минимальной Debian, где root
— единственный логин и sudo не ставится никогда, это хард-крашит деплой.
Фикс: в local-mode при os.geteuid() == 0 пропускать sudo-обёртку — привилегии уже есть.
Окружение
- Meridian v3.17.2 (
uv tool install meridian-vpn)
- Exit: Debian 12 (6.1.0-44-amd64), запуск под root, sudo не установлен, nginx уже на :443 как SNI-роутер (
needs_web_server=True, Reality на
127.0.0.1:<derived port>)
- Relay: Debian 12, deploy user
user с passwordless sudo, netcat не установлен
Воркэраунд
ssh user@<relay> 'sudo apt-get install -y netcat-openbsd'
ssh root@<exit> 'apt-get install -y sudo'
meridian relay deploy <relay> --exit <exit> --user user -y
После обоих фиксов деплой проходит чисто от начала до конца.
Setup mode
Standalone (no domain)
When does it fail?
During SSH connection
Doctor output
Error output
Server OS
No response
Local OS
No response
What happened?
Пока настраивал реле на рф серв нашел два бага
Два бага meridian'а:
netcat-openbsd в список.
(где meridian relay deploy бежит из-под root, sudo не установлен) → FileNotFoundError: 'sudo'. Фикс: при os.geteuid() == 0 пропускать
sudo-обёртку.
What happened? (body):
meridian relay deployпадает в двух независимых местах на минимальной Debian. Оба бага воспроизводятся на свежеподнятых exit + relay.Воркэраунды — однострочники, корневые причины похожи на простые недосмотры.
Баг 1:
VerifyRelayложно фейлится, когда на реле нетncСимптом:
Причина:
src/meridian/provision/relay.py:26Netcat в список не включён.
VerifyRelayвsrc/meridian/provision/relay.py:336зовётnc -z -w 5 ..., который возвращает 127 ("command notfound") когда
ncотсутствует — meridian рапортует это как фейл коннективити. На самом деле сеть в порядке (проверено черезbash -c 'exec 3<>/dev/tcp/...').InstallPackagesотчитывается "all packages present", потому что проверяет только 4 пакета из списка.Фикс: добавить
netcat-openbsdв_RELAY_PACKAGES.Баг 2: в local-mode команды оборачиваются в
sudoдаже когда я root → крашится на системах без sudoСимптом (после воркэраунда Баг 1):
Трейс упирается в
commands/relay.py:202(_deploy_relay_nginx) →ssh.py:218→subprocess.run(["sudo", "-n", ...]).Причина:
src/meridian/ssh.py:210-216Запускаю
meridian relay deployпрямо на экзите под root:local_mode=True(детектится по/etc/meridian/proxy.yml), ноself.userдляexit-соединения почему-то не
"root"(берётся из registry) →use_sudo=True→ meridian локально дёргаетsudo. На минимальной Debian, где root— единственный логин и
sudoне ставится никогда, это хард-крашит деплой.Фикс: в local-mode при
os.geteuid() == 0пропускать sudo-обёртку — привилегии уже есть.Окружение
uv tool install meridian-vpn)needs_web_server=True, Reality на127.0.0.1:<derived port>)userс passwordless sudo, netcat не установленВоркэраунд
После обоих фиксов деплой проходит чисто от начала до конца.
Setup mode
Standalone (no domain)
When does it fail?
During SSH connection
Doctor output
Error output
Server OS
No response
Local OS
No response