Обновление Flatpak с помощью systemd

Вы можете автоматизировать обновления Flatpak без менеджера пакетов, используя службы и таймеры.

Альтернативные пакетные системы, такие как Flatpak, Snap и AppImage, становятся все более популярными. Они предлагают ряд преимуществ, как для разработчиков, так и для пользователей. Например, экспериментальные версии программ можно тестировать, не вмешиваясь в работу системы управления пакетами дистрибутива. Можно также запускать несколько версий программного инструмента для сравнения, при этом они не будут мешать друг другу. Флэтпаки, не зависящие от дистрибутива, могут упростить работу разработчика, поскольку программное обеспечение должно быть собрано только в одном экземпляре.

Flatpak’и также имеют некоторые недостатки. Учитывая низкую стоимость носителей, вы сами решаете, является ли недостатком Flatpak значительно возросшая потребность в пространстве. Однако поведение обновлений Flatpak и AppImages является очевидным недостатком. Gnome Software, Plasma Discover и Mint Update позволят вам автоматически обновлять Flatpaks, но такое управление пакетами не всем по вкусу. Если вы полагаетесь на командную строку для поддержания своего программного обеспечения в актуальном состоянии, поведение Flatpak при обновлении оставит вас совершенно без внимания. Фактически, вы даже не получите уведомления о том, что Flatpak необходимо обновить.

Поскольку разработчики Flatpak не предусмотрели никаких дальнейших шагов по автоматическому обновлению, ответственность за обновления лежит на окружении рабочего стола. По этой причине был предложен метод, позволяющий пользователям systemd автоматически обновлять установленные на их системах Flatpak’и по расписанию с помощью системного менеджера и менеджера сеансов. Этот метод не только избавляет вас от необходимости обновлять вручную, но и демонстрирует, насколько просто создавать службы systemd и соответствующие таймеры.

Система и пользователь

Flatpak может быть установлен как в пользовательском, так и в системном контексте. Соответственно, необходимо создать отдельные службы и таймеры для обоих контекстов. Каталог /etc/systemd/содержит два подкаталога (среди прочих) под названиями user/и system/, содержащие файлы служб в зависимости от их назначения (Рисунок 1).

Рисунок 1: Systemd различает общесистемные службы и службы, контролируемые пользователями. Тот же принцип применяется к Flatpak.

Только системный администратор может управлять общесистемным экземпляром systemd. Кроме того, существует один экземпляр для каждого пользователя. Экземпляр запускается и останавливается по требованию, когда пользователи входят в систему или выходят из нее. Для каждого пользователя работает максимум один экземпляр, независимо от того, как часто пользователь входит в систему. Только пользователь (или администратор) имеет право управлять этими службами, специфичными для пользователя. Wiki Arch Linux объясняет эту концепцию более подробно.

Контекст, в котором создаются службы для обновления установленных Flatpak’ов, зависит от того, были ли они установлены в пользовательском или системном контексте. Подробности можно узнать с помощью команды flatpak list (Рисунок 2), которая показывает все установленные Flatpak и runtimes. В правом столбце Тип установки показан контекст, в котором были установлены Flatpak’и. Если у вас есть оба контекста, то необходимо создать службы как для user, так и для system.

Рисунок 2: Команда flatpak list показывает контекст (крайний справа), в котором приложение было установлено как Flatpak.

Быстрая установка

В листинге 1 показана служба systemd для пользователя, которую необходимо сохранить в пользовательском контексте systemd как update-user-flatpaks.service. Она может храниться в двух местах. Если компьютер используют несколько пользователей, и вы хотите, чтобы все они использовали эту службу, подойдет /etc/systemd/user/. Для однопользовательских систем, храните службу в ~/.config/system/user/.

Листинг 1: Служба, специфичная для пользователя

# update-user-flatpaks.service
# в каталоге /etc/systemd/user/
[Unit]
Description=Update user Flatpaks
[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak --user update -y
[Install]
WantedBy=default.target

Листинг 2: Редактирование файла

$ sudo nano /etc/systemd/user/update-user-flatpaks.service

Самый простой способ создать файл службы — это использовать команду, показанную в листинге 2. Введите текст из Листинга 1 в выбранном вами редакторе, а затем сохраните. Выполните те же шаги для общесистемного варианта, показанного в листинге 3. Назовите этот служебный файл update-system-flatpaks.serviceи сохраните его в /etc/systemd/system.

Листинг 3: Служба, специфичная для системы

# update-systems-flatpaks.service
# в каталоге /etc/system/system/
[Unit]
Description=Update system Flatpaks
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak --system update -y
[Install]
WantedBy=multi-user.target

Теперь вам нужно создать таймеры для управления службами; вы найдете таймеры в листинге 4 (пользовательский вариант) и листинге 5 (общесистемный вариант). Два таймера, названные update-user-flatpaks.timer и update-system-flatpaks.timer, хранятся в /etc/systemd/user/ и /etc/systemd/system/ соответственно.

Листинг 4: Таймер для пользователя

# update-user-flatpaks.timer
# в /etc/systemd/user/
[Unit]
Description=Update user Flatpaks daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

Листинг 5: Таймер системы

# update-system-flatpaks.timer
# в /etc/systemd/system/
[Unit]
Description=Update system Flatpaks daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

Спецификация OnCalendar в Листингах 4 и 5 позволяет настроить желаемое время обновления. Если предложенный вариант ежедневного обновления OnCalendar Вас не устраивает, то можете использовать, например, OnCalendar=weekly для еженедельного запуска.

При необходимости, однако, вы можете сделать это гораздо более целенаправленно. Чтобы запустить обновление в 6:00 вечера в первую субботу каждого месяца, вы можете использовать следующую запись:

OnCalendar=Sat *-*-1..7:*18:00:00

Вы можете прочитать все о таймерах systemd в Wiki Arch Linux, если вас интересует более глубокий подход.

Включение таймеров

Теперь пришло время включить таймеры. Чтобы сделать это для пользователя, вам понадобится команда в строке 1 листинга 6. Для общесистемной настройки вместо нее используйте команду в строке 2. Наконец, вызов в 3 строке сообщает systemd, что нужно перезагрузить все конфигурационные файлы и перезапустить все устройства. Вы также выполняете эту команду после внесения изменений в файлы.

Листинг 6: Таймер и Systemd

01 $ sudo systemctl --user enable --now update-user-flatpaks.timer
02 $ sudo systemctl --system enable --now update-system-flatpaks.timer
03 $ sudo systemctl daemon-reload
04 $ sudo systemd-analyze calendar weekly
05 $ sudo journalctl -b | grep flatpak

Вызов в строке 4 позволяет определить, когда произойдет следующее обновление. Если вы получаете правильный вывод, то уже сразу знаете, что служба настроена правильно.

Рисунок 3: Хотите узнать, когда будет следующее обновление? Эта команда подскажет вам.

Если хотите узнать после даты выполнения, была ли настройка успешной, используйте команду из 5 строки. В случае успеха вы увидите здесь вывод; в противном случае вы увидите  flatpak update.

Вывод

Systemd подходит для многих задач управления в системах Linux. Вы можете управлять обновлениями Flatpak с помощью systemd всего за полчаса работы. Как только службы и таймеры настроены — вы можете оставить ваши будущие обновления Flatpak на усмотрение компьютера.

Эта статья основана на учебнике Джордана Уильямса. Вы можете найти код листингов и на его сайте.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
MasCloud
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: