🇷🇺 Что нового (RU)
Что решает этот релиз
v1.0.2 убирает две операторские ловушки в mtbuddy (обе способны уронить прокси) и открывает проект для пользователей из стран, где Telegram блокируют, — на их родном языке.
Главное — безопасность CLI. Подкоманды mtbuddy молча игнорировали неизвестные флаги, поэтому mtbuddy <подкоманда> --help не показывал справку, а выполнял команду. Самый опасный случай — sudo mtbuddy update --help: оператор хотел прочитать справку перед обновлением, а получил скачивание и установку релиза (по реальному отчёту #310 это привело к двухминутному простою). К тому же mtbuddy update переписывал systemd-юнит на User=mtproto, но самого пользователя не создавал (это делал только install), так что на серверах, поставленных до 1.0 (прокси работал от root), апдейт ронял сервис в status=217/USER. v1.0.2 чинит оба сценария.
И второе — README теперь есть на китайском, фарси и вьетнамском (страны, где Telegram под блокировкой) плюс уже бывшие английский и русский, с крупным заметным переключателем языков.
[!TIP]
Теперьmtbuddy <подкоманда> --help(и-h) всегда показывает справку и ничего не выполняет — в том числеsudo mtbuddy update --helpбезопасно печатает справку.
[!NOTE]
Менятьconfig.tomlне нужно. Поведение обычных команд не изменилось — затронуты только обработка--helpи создание сервисного пользователя приupdate.
Что изменено
--help/-h после подкоманды показывает справку, а не выполняет команду (#311)
- Парсеры подкоманд молча отбрасывали неизвестные флаги, поэтому
--help/-hпосле подкоманды игнорировался и действие выполнялось. - Диспетчер теперь заранее сканирует аргументы подкоманды на
-h/--helpи печатает справку (дляinstall— детальную, для остального — общую) не выполняя действие — как требует стандартное соглашение CLI (apt,systemctl,docker). installи раньше уважал свой--help; теперь это распространено наupdate,status,config,links,setupи остальные.
update создаёт сервисного пользователя mtproto — больше нет status=217/USER (#311)
mtbuddy updateпереписывает systemd-юнит наUser=mtproto, но создавал этого пользователя толькоinstall.- На хостах, впервые поставленных до 1.0 (прокси работал от root),
updateоставлял systemd сstatus=217/USER, а откат восстанавливал только бинарь, но не юнит — самоинициированный простой. - Теперь
updateгарантирует наличие пользователя и группыmtproto(переиспользует идемпотентныйensureServiceUserизinstall) до остановки сервиса и аккуратно прерывается, если не может — отсутствие аккаунта больше не уронит прокси.
README на китайском, фарси и вьетнамском (#309)
- Добавлены переводы README на языки трёх стран, где блокируют Telegram: 🇨🇳 упрощённый китайский (
README.zh.md), 🇮🇷 фарси (README.fa.md), 🇻🇳 вьетнамский (README.vi.md). - Каждый перевод 1:1 повторяет английский оригинал (та же структура заголовков, таблиц, кода и картинок); команды, пути, URL и технические имена собственные оставлены латиницей.
- Переключатель языков во всех пяти README переделан в крупный заметный центрированный ряд с флагами и нативными названиями (вместо мелких
<kbd>-чипсов).
Внутренние планировочные документы убраны из репозитория (#309)
ROADMAP_1.0.mdиPRODUCT_VISION.md— рабочие документы для команды, а не публичный справочник; они больше не публикуются в репозитории.
Проверено
zig build testи кросс-компиляция подx86_64-linux+aarch64-linux— зелёные;zig fmtчистый.- GitHub Actions:
Test & Build,E2E Integration,Bench (No Soak), installer e2edebian:12иubuntu:24.04. - Поведение проверено на живом Linux (на throwaway-копии бинаря, установленный
mtbuddyне тронут):update --help/status --help/update -hпечатают справку и не выполняются;install --helpпоказывает справку install; голыйupdateпо-прежнему обновляет.
🇬🇧 Release notes (EN)
What this release addresses
v1.0.2 removes two operator footguns in mtbuddy (both capable of taking the proxy down) and opens the project to users in countries that block Telegram — in their own language.
The headline is CLI safety. mtbuddy subcommands silently ignored unknown flags, so mtbuddy <subcommand> --help didn't show help — it ran the subcommand. The worst case is sudo mtbuddy update --help: an operator who wanted to read the help before updating instead triggered a download + install of the latest release (per the real report in #310 this caused a two-minute outage). On top of that, mtbuddy update rewrites the systemd unit to run as User=mtproto but never created that account (only install did), so on hosts first installed before 1.0 (proxy ran as root) an update left systemd failing the service with status=217/USER. v1.0.2 fixes both.
Second, the README is now available in Chinese, Persian, and Vietnamese (alongside English and Russian), with a bigger, clearer language switcher.
[!TIP]
mtbuddy <subcommand> --help(and-h) now always shows help and never executes — includingsudo mtbuddy update --help, which now safely prints help.
[!NOTE]
Noconfig.tomlchanges needed. Normal command behavior is unchanged — only--helphandling and the service-user creation onupdateare affected.
What changed
--help/-h after a subcommand shows help instead of running it (#311)
- The per-subcommand parsers silently dropped unknown flags, so
--help/-hafter a subcommand was ignored and the action ran. - The dispatcher now scans a subcommand's args for
-h/--helpup front and prints help (install's detailed help forinstall, the general help otherwise) without executing — the standard CLI convention (apt,systemctl,docker). installalready honored its own--help; this generalizes it toupdate,status,config,links,setup, and the rest.
update creates the mtproto service user — no more status=217/USER (#311)
mtbuddy updaterewrites the systemd unit toUser=mtproto, but onlyinstallever created that account.- On hosts first installed before 1.0 (proxy ran as root),
updateleft systemd atstatus=217/USER, and the rollback restored only the binary, not the unit — a self-inflicted outage. updatenow ensures themtprotouser and group exist (reusing install's idempotentensureServiceUser) before stopping the service, and aborts cleanly if it can't — a missing account can no longer take the proxy down.
README in Chinese, Persian, and Vietnamese (#309)
- Added README translations for the languages of three countries that block Telegram: 🇨🇳 Simplified Chinese (
README.zh.md), 🇮🇷 Persian/Farsi (README.fa.md), 🇻🇳 Vietnamese (README.vi.md). - Each mirrors the English source 1:1 (same heading/table/code/image structure); commands, paths, URLs, and technical proper nouns kept in Latin script.
- The language switcher in all five READMEs is now a bigger, clearer centered row of flag + native name (replacing the small inline
<kbd>chips).
Internal planning docs removed from the repo (#309)
ROADMAP_1.0.mdandPRODUCT_VISION.mdare internal working documents, not public-facing reference; they are no longer published in the repository.
Verified
zig build testand cross-compilation forx86_64-linux+aarch64-linux— green;zig fmtclean.- GitHub Actions:
Test & Build,E2E Integration,Bench (No Soak), installer e2edebian:12andubuntu:24.04. - Behavior verified on a live Linux host (throwaway binary copy, the installed
mtbuddyuntouched):update --help/status --help/update -hprint help and do not execute;install --helpshows install help; bareupdatestill updates.