Выпуск system-autoupdate 1.5, системы автоматизации обновления Linux-дистрибутивов

Вышла версия 1.5 system-autoupdate — набора скриптов, сервисов и таймеров systemd для автоматизации обновления Linux с трехуровневой блокировкой выключения ПК во время обновления. Наработки проекта распространяются под лицензией GPLv3. Для установки подготовлены Makefile с инструкциями install и uninstall, а также deb-пакет, который при помощи штатных средств deb-хелперов автоматически активирует все необходимые юниты systemd при установке. Для Ubuntu поддерживается PPA-репозиторий.

Решаемые проектом задачи:

  • Автоматическое обновление серверных и десктопных установок различных дистрибутивов Linux без участия пользователя и без наличия центрального командно-управляющего сервера (например, Ansible, Puppet, Zabbix), в том числе когда Linux установлен на не личную технику, а, например, на ноутбук знакомого или удаленного сотрудника, но хочется, чтобы операционная система и набор прикладного ПО автоматически поддерживались в актуальном состоянии. Система также применима в малых офисах и небольшом парке серверов, когда нецелесообразно развёртывать централизированную систему управления и отдельный репозиторий;
  • Предотвращение случайного выключения ПК, когда процесс обновления еще не завершен.

В настоящий момент поддерживаются следующие дистрибутивы:

  • Ubuntu, Mint, Debian, Astra
  • ROSA Fresh
  • ALT Linux
  • Arch, Manjaro, Antergos (только pacman, не AUR)
  • CentOS, RHEL
  • Fedora
  • openSUSE, SUSE

Для надежной блокировки выключения компьютера во время обновления используется трехуровневая блокировка:

  • Через systemd-inhibit блокируются выполняемые от пользователя (не root) операции systemctl reboot/shutdown/halt; эта же блокировка в большинстве систем приводит к запросу пароля root при выключении/перезагрузке, а отказ от ввода пароля останавливает графическую сессию и возвращает на экран менеджера входа;
  • Блокируется выполнение целей systemd shutdown.target, reboot.target, halt.target, hibernate.target, poweroff.target, sleep.target, suspend.target, suspend-then-hibernate.target, предотвращая разные типы выключения даже от root;
  • Блокируются графические кнопки выключения, перезагрузки, ухода в сон, гибернации в графической оболочке, а при попытке ими воспользоваться выводятся графические уведомления, сообщающие пользователю, что систему невозможно выключить, что показано на скриншоте ниже.

    Блокировка графических кнопок выключения и вывод уведомлений реализованы с помощью правила policykit-1, для работы которого требуется Polkit = 0.106, однако в современных версиях Debian и Ubuntu, в том числе Debian Sid, до сих пор используется Polkit 0.105, когда как его свежие версии поддерживаются в Debian Experimental, поэтому пакеты policykit-1 из Debian Experimental были пересобраны для Ubuntu 18.04 и 18.10 и доступны в одном с system-autoupdate репозитории PPA.

    Показ графических уведомлений о начале и завершении процесса автообновления по умолчанию отключен, но доступен для включения в файле конфигурации. Также предусмотрена возможность использования только функциональности блокировки выключения системы без автообновлений.

    В версии system-autoupdate 1.5 штатными средствами systemd предотвращен запуск system-autoupdate одновременно с выполняемыми по расписанию операциями пакетных менеджеров apt и dnf (apt-daily.service, apt-daily-upgrade.service, dnf-makecache.service). В сборку Debian-пакета от автора system-autoupdate включен конфликт с пакетом unattended-upgrades по причине бессмысмленности работы unattended-upgrades, когда включен system-auotupdate, а также потому что их одновременная работа теоретически может привести к конфликтам и взаимным блокировкам пакетной системы.

    Разработчик проекта рекомендует сочетать system-autoupdate с функциональностью apt-btrfs-snapshot, которая автоматически делает снапшот (снимок состояния) корня файловой системы ОС при любой операции с пакетами, то есть при каждом автообновлении, а стандартное меню восстановления Ubuntu (пакет friendly-recovery) позволяет откатиться на один из снапшотов в псевдографическом интерфейсе (что не отменяет возможности сделать это вручную из системы вживую или из chroot).

    Автор system-autoupdate создал форк apt-btrfs-snapshot, заменив еженедельное задание очистки старых снапшотов cron на ежедневный таймер systemd с защитой от запуска при питании от батареи и изменив максимальный возраст снапшотов с 90 до 15 дней, как временное решение от переполнения диска. Изменения предложены апстриму. Готовый к использованию пакет собран в PPA. Также установлена зависимость от подготовленного командой SUSE пакета btrfsmaintenance со скриптами для автоматического обслуживания разделов Btrfs. За основу пакета взят одноименный пакет из Debian, в которые перенесены имеющиеся исправления.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.