Релиз системы самодостаточных пакетов Flatpak 1.2.0

Опубликована новая стабильная ветка инструментария Flatpak 1.2, который предоставляет систему для сборки самодостаточных пакетов, не привязанных к конкретным дистрибутивам Linux и выполняемым в специальном контейнере, изолирующем приложение от остальной системы. Поддержка выполнения Flatpak-пакетов обеспечена для Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint и Ubuntu. Пакеты с Flatpak включены в репозиторий Fedora и поддерживаются в штатной программе управления приложениями GNOME.

Ключевые новшества в ветке Flatpak 1.2:

  • Добавлена новая команда «flatpak kill» для принудительного завершения работающих экземпляров flatpak-окружений;
  • При установке пакетов в интерактивном режиме указание внешнего репозитория в числе аргументов командной строки теперь является необязательным (если не указан выводится интерактивный запрос);
  • Во все команды с табличными результатами добавлена опция »--columns» для управления выводом;
  • В команду «flatpak uninstall» добавлена опция »--delete-data» для удаления каталога с данными приложения (если не указать конкретное приложение, то будут удалены все каталоги с данными удалённых приложений);
  • В команде «flatpak remote-ls» обеспечен показ runtime для каждого приложения в списке;
  • В команду «flatpak repo» добавлены опции »--info» для отображения сведений о репозитории и »--commits» для вывода списка изменений в ветке;
  • Обеспечено отображение транзакций в логе systemd при сборке с libsystemd;
  • Удалена поддержка миграции с xdg-app (прошлое название flatpak);
  • Добавлена опция «flatpak --installations» для показа списка всех установленных приложений flatpak;
  • В команды install, update и uninstall добавлена опция »--noninteractive» для выполнения операции из скриптов без дополнительных запросов и с минимальными выводом;
  • Реализована начальная поддержка применения в sandbox-окружении системных параметров по умолчанию из dconf;
  • Приложениям, использующим интерфейс DRI (Direct Rendering Infrastructure), для корректной поддержки CUDA и OpenCL предоставлен доступ к большему числу файлов устройств NVIDIA (/dev/dri/renderD*);
  • Команда «permission-list» переименована в «permissions», а «document-list» в «documents» (старые имена не удалены для сохранения совместимости);
  • При выполнении привилегированных операций обеспечена возможность аутентификации в терминале при отсутствии агента policykit;
  • Указание команды «update» без дополнительных аргументов теперь приводит к обновлению всех установленных пакетов.

Дополнительно можно отметить, появление ресурса flatkill.org с критикой Flatpak. Авторы данного сайта пытаются обратить внимание на проблему с необязательностью применения режима sandbox-изоляции в пакетах. В текущем виде почти все популярные приложения, доступные в формате Flatpak (включая GIMP, VSCode, PyCharm, Octave, Inkscape, Steam, Audacity, VLC), собраны с правами «filesystem=host», «filesystem=home» или «device=all», т.е. имеют полный доступ к ФС, домашнему каталогу пользователя или всем устройствам в системе. При таких настройках sandbox не более чем фикция, а для обхода изоляции и выполнения кода вне изолированного окружения достаточно изменить ~/.bashrc. При этом пользователи считают, что приложение действительно изолировано, так как при установке показывается пиктограмма «sandbox».

Напомним, что разработчикам приложений Flatpak даёт возможность упростить распространение своих программ, не входящих в штатные репозитории дистрибутивов, за счет подготовки одного универсального контейнера без формирования отдельных сборок для каждого дистрибутива. Для пользователей, заботящихся о безопасности, Flatpak позволяет выполнить вызывающее сомнение приложение в контейнере, предоставив доступ только к сетевым функциям и файлам пользователя, связанным с приложением. Для пользователей, интересующихся новинками, Flatpak позволяет установить самые свежие тестовые и стабильные выпуски приложений, без необходимости внесения изменений в систему. Например, в настоящее время Flatpak-пакеты уже собираются для LibreOffice, Firefox, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio и т.д.

Для уменьшения размера пакета, он включает лишь специфичные для приложения зависимости, а базовые системные и графические библиотеки (Gtk+, Qt, библиотеки GNOME и KDE и т.п.) оформлены в виде подключаемых типовых runtime-окружений. Ключевое отличие Flatpak от Snap заключается в том, что Snap использует компоненты окружения основной системы и изоляцию на основе фильтрации системных вызовов, в то время как Flatpak создаёт отдельный от системы контейнер и оперирует крупными runtime-наборами, предоставляя в качестве зависимостей не пакеты, а типовые системные окружения (например, все библиотеки, необходимые для работы программ GNOME или KDE).

Помимо типового системного окружения (runtime), устанавливаемого через специальный репозиторий, поставляются дополнительные зависимости (bundle), требуемые для работы приложения. В сумме runtime и bundle образуют начинку контейнера, при том, что runtime устанавливается отдельно и привязывается сразу к нескольким контейнерам, что позволяет обойтись без дублирования общих для контейнеров системных файлов. В одной системе может быть установлено несколько разных runtime (GNOME, KDE) или несколько версий одного runtime (GNOME 3.26, GNOME 3.28). Контейнер с приложением в качестве зависимости использует привязку только к определённому runtime, без учета отдельных пакетов, из которых состоит runtime. Все недостающие элементы упаковываются непосредственно вместе с приложением. При формировании контейнера содержимое runtime монтируется как раздел /usr, а bundle монтируется в директорию /app.

Начинка runtime и контейнеров приложений формируется с использованием технологии OSTree, при которой образ атомарно обновляется из Git-подобного хранилища, позволяющего применять методы версионного контроля к компонентам дистрибутива (например, можно быстро откатить систему к прошлому состоянию). RPM-пакеты транслируются в репозиторий OSTree при помощи специальной прослойки rpm-ostree. Отдельная установка и обновление пакетов внутри рабочего окружения не поддерживается, система обновляется не на уровне отдельных компонентов, а целиком, атомарно меняя своё состояние. Предоставляются средства для инкрементального применения обновлений, избавляющие от необходимости полной замены образа при каждом обновлении.

Формируемое изолированное окружение полностью независимо от используемого дистрибутива, не имеет доступа к файлам и процессам пользователя или основной системы, не может напрямую обращаться к оборудованию, за исключением вывода через DRI, и сетевой подсистеме. Вывод графики и организация ввода реализована при помощи протокола Wayland или через проброс сокета X11. Взаимодействие с внешней средой построено на основе системы обмена сообщениями DBus и специального API Portals. Для изоляции используется прослойка Bubblewrap и традиционные для Linux технологии контейнерной виртуализации, основанные на использовании cgroups, пространств имён (namespaces), Seccomp и SELinux. Для вывода звука применяется PulseAudio.

© OpenNet