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

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

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

  • Включена поддержка модуля ядра NTSYNC, позволяющего существенно поднять производительность Windows-игр, запускаемых при помощи Wine. Модуль реализует символьное устройство /dev/ntsync и набор примитивов для синхронизации, применяемых в ядре Windows NT.

  • Реализована поддержка условных полномочий (conditional permission), предоставляемых при наличии определённых возможностей в системе и в runtime. Например, при необходимости получения доступа к устройству ввода вместо »--device=all» можно запросить полномочие »--device-if=all:! has-input-device --device=input», которое предоставит доступ только к устройствам ввода, если оно поддерживается в runtime, а если не поддерживается — полный доступ ко всем устройствам. Аналогично можно запросить доступ только к SUB-устройвствам («has-usb-device» и «has-usb-portal») или совместно используемым подсистемам.

  • Для GPU Intel Xe включена поддержка API VA-API для аппаратного ускорения декодирования видео.

  • Реализована возможность доступа к устройству /dev/kfd (Kernel Fusion Driver) с использованием полномочий, предоставляемых для DRI-устройств. Драйвер kfd реализует интерфейс для прямого выполнения вычислений на GPU AMD из приложений, использующих AMD ROCm, HIP и OpenCL.

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

  • Добавлена поддержка каталога «preinstall.d», определяющего список предустанавливаемых Flatpak-приложений (для включения Flatpak-приложений в состав операционной системы).

  • Разрешена прямая установка приложений из образов контейнеров в формате OCI, которые могут загружаться из собственных OCI-репозиториев и локальных архивов.

  • В команду «flatpak install --from» добавлена поддержка URI «flatpak+https://».

  • В команду «flatpak run» добавлена опция »--clear-env» для очистки переменных окружения перед запуском приложения.

  • Предоставлена возможность экспорта корневого каталога хост-окружения в sandbox приложения как /run/host/root.
  • Добавлена возможность вывода результата выполнения различных команд в формате JSON.

  • Усилена изоляция сборочного окружения — команда «flatpak build» теперь не предоставляет по умолчанию возможность доступа к хосту.

  • Добавлена команда «reinstall» для переустановки зависимостей (bundle).

  • Настройки D-Bus по умолчанию перенесены из каталога /etc в /usr.

  • Сокращено время запуска при использовании командного интерпретатора fish.
  • В libflatpak добавлена функция для получения информации о времени создания конфигурации, что позволяет приложениям, таким как GNOME Software, определить, что прокэшированные ими данные требуют обновления.

  • Удалена сборочная опция http_backend, вместо libsoup2 для загрузки по HTTP/HTTPS задействована библиотека libcurl.

  • По умолчанию включено использование escape-последовательностей для индикации прогресса выполнения операции.

  • Разрешено передавать права доступа к устройствам во вложенные sandbox-окружения, созданные через порталы Flatpak.

  • Для приложений, поставляемых в форме OCI-образов, реализован механизм «extra-data», например, позволяющий организовать воспроизведение видео h.265 во Flatpak-пакетах Fedora Linux.

  • Добавлена поддержка сжатия зависимостей (OCI bundle) с использованием алгоритма zstd, позволяющим сократить размер на 20%. По умолчанию для сжатия продолжает использоваться gzip, обеспечивающий максимальную совместимость.

Flatpak упрощает распространение программ, не входящих в штатные репозитории дистрибутивов, за счёт подготовки одного универсального контейнера, избавляющего разработчиков программ от необходимости формировать отдельные сборки для каждого дистрибутива. Пользователям, заботящимся о безопасности, Flatpak даёт возможность выполнить вызывающее сомнение приложение в контейнере, предоставив выборочный доступ только к необходимым сетевым функциям и файлам пользователя. Пользователям, интересующимся новинками, Flatpak позволяет установить самые свежие тестовые и стабильные выпуски приложений без необходимости внесения изменений в систему. Например, Flatpak-пакеты собираются для LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, 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 50, GNOME 49). Контейнер с приложением в качестве зависимости использует привязку только к определённому «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. При создании пакета изоляция может быть отключена, чем пользуются разработчики некоторых пакетов для получения полного доступа к ФС и всем устройствам в системе.



Источник: http://www.opennet.ru/opennews/art.shtml? num=65642

© OpenNet