[PR #1223] [MERGED] feat: автообновление на Linux без ручной установки пакета #112

Closed
opened 2026-08-23 05:14:53 +03:00 by mirror-bot · 0 comments

📋 Pull Request Information

Original PR: https://github.com/Flowseal/tg-ws-proxy/pull/1223
Author: @Fgeeha
Created: 8/16/2026
Status: ✅ Merged
Merged: 10/10/2026
Merged by: @Flowseal

Base: main ← Head: feature/linux-auto-update


📝 Commits (1)

  • 317d7b4 feat: автообновление на Linux без ручной установки пакета

📊 Changes

11 files changed (+771 additions, -21 deletions)

View changed files

📝 docs/EN/README.linux.md (+11 -0)
📝 docs/RU/README.linux.md (+11 -0)
📝 linux.py (+90 -6)
➕ tests/test_linux_update.py (+241 -0)
➕ tests/test_tray_common.py (+49 -0)
📝 tests/test_update_check.py (+93 -0)
📝 ui/i18n/en.json (+2 -0)
📝 ui/i18n/ru.json (+2 -0)
➕ utils/linux_update.py (+180 -0)
📝 utils/tray_common.py (+30 -14)
📝 utils/update_check.py (+62 -1)

📄 Description

Проблема

На Linux обновление ручное: закрыть приложение, скачать .deb/.rpm или бинарник со страницы релиза, установить, запустить заново. На Windows обновление уже работает из приложения.

Решение

При запуске (если включена проверка обновлений) приложение определяет способ установки и предлагает обновиться:

  • из .deb — pkexec apt-get install -y --reinstall <файл>, запасной вариант dpkg -i;
  • из .rpm — pkexec dnf install -y <файл>, запасной вариант rpm -U --force;
  • отдельный бинарник — os.replace, если каталог доступен на запись, иначе pkexec install -m 755 (без ETXTBSY на запущенном файле).

Скачанный файл проверяется по Content-Length и SHA-256 из поля digest GitHub API. Неполный или повреждённый файл удаляется и не устанавливается.

После установки приложение снимает single-instance lock, останавливает прокси, ждёт освобождения порта и запускает новый бинарник. Окружение очищается от _PYI_*/_MEIPASS, переменные *_ORIG восстанавливаются — иначе новый процесс подхватил бы библиотеки из удаляемого _MEI.

Если автоустановка невозможна (AUR, pip, не x86_64, нет pkexec) или установка завершилась ошибкой, остаётся прежнее поведение: предложение открыть страницу релиза.

Изменения

  • utils/linux_update.py — новый модуль: определение способа установки, команды установки, замена бинарника, relaunch_env;
  • linux.py — диалог обновления и перезапуск;
  • utils/update_check.py — download_asset с проверкой длины и SHA-256;
  • utils/tray_common.py — check_update_async выделен из maybe_notify_update, поведение на Windows/macOS не меняется;
  • ui/i18n/{ru,en}.json — строки update.ask_install, update.install_fail;
  • docs/{RU,EN}/README.linux.md — раздел об автообновлении;
  • тесты: tests/test_linux_update.py, tests/test_tray_common.py, tests/test_update_check.py.

windows.py и macos.py не затронуты.

Проверка

  • python -m unittest discover -s tests -t . — 91 тест, OK;
  • ruff check . — без замечаний;

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Flowseal/tg-ws-proxy/pull/1223 **Author:** [@Fgeeha](https://github.com/Fgeeha) **Created:** 8/16/2026 **Status:** ✅ Merged **Merged:** 10/10/2026 **Merged by:** [@Flowseal](https://github.com/Flowseal) **Base:** `main` ← **Head:** `feature/linux-auto-update` --- ### 📝 Commits (1) - [`317d7b4`](https://github.com/Flowseal/tg-ws-proxy/commit/317d7b4369e69cfe4b34bb9f736ccf755c824be5) feat: автообновление на Linux без ручной установки пакета ### 📊 Changes **11 files changed** (+771 additions, -21 deletions) <details> <summary>View changed files</summary> 📝 `docs/EN/README.linux.md` (+11 -0) 📝 `docs/RU/README.linux.md` (+11 -0) 📝 `linux.py` (+90 -6) ➕ `tests/test_linux_update.py` (+241 -0) ➕ `tests/test_tray_common.py` (+49 -0) 📝 `tests/test_update_check.py` (+93 -0) 📝 `ui/i18n/en.json` (+2 -0) 📝 `ui/i18n/ru.json` (+2 -0) ➕ `utils/linux_update.py` (+180 -0) 📝 `utils/tray_common.py` (+30 -14) 📝 `utils/update_check.py` (+62 -1) </details> ### 📄 Description ## Проблема На Linux обновление ручное: закрыть приложение, скачать `.deb`/`.rpm` или бинарник со страницы релиза, установить, запустить заново. На Windows обновление уже работает из приложения. ## Решение При запуске (если включена проверка обновлений) приложение определяет способ установки и предлагает обновиться: - из `.deb` — `pkexec apt-get install -y --reinstall <файл>`, запасной вариант `dpkg -i`; - из `.rpm` — `pkexec dnf install -y <файл>`, запасной вариант `rpm -U --force`; - отдельный бинарник — `os.replace`, если каталог доступен на запись, иначе `pkexec install -m 755` (без `ETXTBSY` на запущенном файле). Скачанный файл проверяется по `Content-Length` и SHA-256 из поля `digest` GitHub API. Неполный или повреждённый файл удаляется и не устанавливается. После установки приложение снимает single-instance lock, останавливает прокси, ждёт освобождения порта и запускает новый бинарник. Окружение очищается от `_PYI_*`/`_MEIPASS`, переменные `*_ORIG` восстанавливаются — иначе новый процесс подхватил бы библиотеки из удаляемого `_MEI`. Если автоустановка невозможна (AUR, pip, не x86_64, нет `pkexec`) или установка завершилась ошибкой, остаётся прежнее поведение: предложение открыть страницу релиза. ## Изменения - `utils/linux_update.py` — новый модуль: определение способа установки, команды установки, замена бинарника, `relaunch_env`; - `linux.py` — диалог обновления и перезапуск; - `utils/update_check.py` — `download_asset` с проверкой длины и SHA-256; - `utils/tray_common.py` — `check_update_async` выделен из `maybe_notify_update`, поведение на Windows/macOS не меняется; - `ui/i18n/{ru,en}.json` — строки `update.ask_install`, `update.install_fail`; - `docs/{RU,EN}/README.linux.md` — раздел об автообновлении; - тесты: `tests/test_linux_update.py`, `tests/test_tray_common.py`, `tests/test_update_check.py`. `windows.py` и `macos.py` не затронуты. ## Проверка - `python -m unittest discover -s tests -t .` — 91 тест, OK; - `ruff check .` — без замечаний; --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot added the pull-request label 2026-08-23 05:14:53 +03:00
mirror-bot changed title from [PR #1223] Feature/linux auto update to [PR #1223] feat: автообновление на Linux без ручной установки пакета 2026-09-25 16:02:03 +03:00
mirror-bot changed title from [PR #1223] feat: автообновление на Linux без ручной установки пакета to [PR #1223] [MERGED] feat: автообновление на Linux без ручной установки пакета 2026-10-11 00:00:51 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Utilities/tg-ws-proxy#112