Skip to content

v0.3.7.12

Choose a tag to compare

@sivatorov sivatorov released this 11 Sep 07:37
· 151 commits to main since this release

0.3.7.12

Исправление по PR #227 (Linux): обновление с повышением прав через pkexec больше не закрывает приложение до ответа PolicyKit — окно остаётся отзывчивым, а при отказе или недоступности прав приложение продолжает работать и показывает запасной диалог со ссылкой на страницу выпуска.

Исправлено

  • Linux: приложение больше не закрывается до ответа на запрос PolicyKit (PR #227, симптом из #153): раньше LaunchPrivilegedUpdater возвращал true сразу после Process.Start, и ShutdownNow() вызывался, пока пользователь ещё не ввёл пароль — приложение молча закрывалось, ничего не обновив. Теперь сценарий-помощник, получив права, первым делом создаёт файл-маркер, а приложение ждёт либо этот маркер, либо ранний выход pkexec (отказ PolicyKit даёт код 126, сбой запуска 127), с таймаутом 3 минуты. При отказе или недоступности pkexec приложение остаётся работать и показывает запасной диалог с кликабельной ссылкой на страницу выпуска. Реализовано в Services/UpdateService.Avalonia.cs. Правка только в Linux/Avalonia; Windows/WPF не затрагивается.

  • Linux: скачивание обновления больше не блокирует поток интерфейса: цепочка диалогов переведена на async, синхронные DownloadNewBinaryAsync(...).GetAwaiter().GetResult() заменены на await, dpkg -S (ждёт до 15 секунд) вынесен в Task.Run. Повторные проверки обновлений во время активной цепочки отсекаются через Interlocked.

  • Linux: бинарник пишется на диск потоком, а не буферизуется целиком в памяти: добавлен HttpCompletionOption.ResponseHeadersRead с явным таймаутом чтения тела.

  • Linux: сценарий обновления, исполняемый от root, больше не лежит в общем каталоге: вместо предсказуемого %TEMP%/ConfigurationManagement/update используется Directory.CreateTempSubdirectory("cm-update-") с правами 0700 — соседний пользователь больше не может подменить содержимое между записью и запуском от root.

  • Linux: после обновления с повышением прав приложение снова открывается: переменные графического сеанса (DISPLAY, XAUTHORITY, WAYLAND_DISPLAY, XDG_RUNTIME_DIR, XDG_SESSION_TYPE, DBUS_SESSION_BUS_ADDRESS) передаются помощнику и подставляются при перезапуске через runuser (иначе runuser не наследует окружение сеанса, и окно не возвращалось).

  • Linux: замена подготавливается до того, как приложению разрешено закрыться: помощник сначала копирует новый файл рядом с целью и делает chmod, и только потом ставит маркер, по которому приложение выходит; при отказе PolicyKit временные файлы и опустевший каталог убираются.

Версия

  • Версия поднята до 0.3.7.12 во всех четырёх полях (Version, AssemblyVersion, FileVersion, InformationalVersion) в Configuration Management.csproj.
  • Обе сборки — Windows/WPF и Linux/Avalonia (-p:ForceLinux=true) — проходят без ошибок (0 предупреждений, 0 ошибок).

Полный список изменений — в CHANGELOG.md.

Примечание по сборке Linux

Linux-бинарник ConfigurationManagement-0.3.7.12-linux-x64 при скачивании может потерять бит исполнения. Перед запуском выполните chmod +x ConfigurationManagement (например: ./ConfigurationManagement после chmod +x).