Отличные новости в понедельник, %username%. На днях была опубликована стабильная ветка инструментария Flatpak 1.10. Она предназначена для сборки самодостаточных пакетов, которые не привязаны к конкретным дистрибутивам Linux и выполняются в специальном контейнере, изолирующем приложение от системы.
Flatpack-пакеты гарантированно работают для Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux и Ubuntu. Они также входят в репозиторий Fedora и поддерживаются штатным софтом управления приложениями GNOME. Под катом — подробнее о новинке и ее возможностях.
Что такое Flatpak?
Этот инструментарий дает возможность разработчикам упростить распространение собственных программ, которые не входят в штатные репозитории дистрибутивов. Как это реализовано? Готовится один универсальный контейнер без формирования отдельных сборок для каждого дистрибутива.
Инструментарий обеспечивает и высокий уровень информационной безопасности, позволяя выполнить сомнительное приложение в изолированном контейнере. В этом случае доступ предоставляется лишь для сетевых функций и файлов пользователя, которые связаны с приложением. Плюс ко всему, с Flatpak можно устанавливать самые свежие выпуски приложений без необходимости вносить изменения в систему. Так, Flatpak-пакеты готовятся для LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio и десятков других приложений.
Чтобы снизить размер пакета, разработчики включили лишь специфичные для приложения зависимости. А вот все основные библиотеки оформлены в виде подключаемых runtime-приложений. У Flatpack есть ключевое отличие от Snap — последний использует компоненты окружения системы и изоляцию на основе фильтрации системных вызовов. А вот Flatpack создает отдельный от системы контейнер, оперируя крупными runtime-наборами, так что в качестве зависимостей предоставляются не пакеты, а типовые системные окружения. Это могут быть любые библиотеки, которые нужны для работы программ GNOME/KDE.
Что касается типового системного окружения, то, кроме runtime, устанавливаются еще и дополнительные зависимости, которые нужны для корректной работы приложения. Основное системное окружение и эти зависимости образуют начинку контейнера. Соответственно, runtime устанавливается отдельно и привязывается сразу к нескольким контейнерам. Это дает возможность обойтись без дублирования общих для контейнеров системных файлов.
В одной системе может быть установлено несколько различных runtime или несколько версий одного runtime. Контейнер с приложением в качестве зависимости использует привязку к определенному runtime без учета отдельных пакетов, из которых состоит runtime. Недостающие элементы упаковываются вместе с приложением. При формировании контейнера содержимое runtime монтируется как раздел /usr, а bundle монтируется в директорию /app.
Начинка runtime и контейнеров приложений формируется с использованием технологии OSTree. В этом случае образ обновляется из Git-подобного хранилища. Это сделано для того, чтобы можно было применять методы версионного контроля к компонентам дистрибутива. Например, пользователь может откатить систему к предыдущему состоянию. Стоит выделить и то, что RPM-пакеты транслируются в репозиторий OSTree при помощи специальной прослойки rpm-ostree.
Отдельная установка и обновление пакетов внутри рабочего окружения не поддерживается, так что система обновляется целиком, а не на уровне отдельных компонентов. Есть и средства для инкрементального применения обновлений, что избавляет от необходимости полной замены образа при каждом обновлении.
Изолированное окружение не зависит от используемого дистрибутива. Так что при соответствующих настройках пакета у окружения нет доступа к файлам и процессам пользователя или основной системы. Также окружение не может напрямую обращаться к оборудованию и сетевой подсистеме. Для вывода графики и ввода применяется протокол Wayland и проброс сокета X11. Взаимодействие с внешней средой построено на основе системы обмена сообщениями DBus и специального API Portals.
Для изоляции используется прослойка Bubblewrap и стандартные технологии контейнерной виртуализации. Их основа — cgroups, пространства имен (namespaces), Seccomp и SELinux. Звук выводится при помощи PulseAudio. Изоляция может быть и отключена, если это необходимо.
Что нового?
- Добавлена поддержка нового формата репозитория, который дает возможность ускорить доставку объявлений, сократив размер загружаемых данных. Этот репозиторий основывается на технологии OSTree. В ней для идентификации содержимого используется индексный файл, обновляющийся при каждом изменении. Его размер напрямую зависит как от количества пакетов, так и от числа поддерживаемых архитектур. В новой версии применили инкрементальные обновления, что, по словам разработчиков, в 100 раз сократило трафик. Кроме того, теперь во Flatpack нет дополнительных архитектур. Так, общий размер индекса сейчас составляет 6.6 МБ (1.8 МБ сжатый), вариант для архитектуры x86-64 — 2.7 МБ (554 КБ сжатый). При обновлении с прошлой версии потребуется загрузка всего 20 КБ.
- Появилась команда «flatpak pin» для закрепления runtime. По умолчанию закрепление применяется для runtime, установленных явно, а не загруженных автоматически.
- При общем обновлении или удалении отдельных приложений неиспользуемые runtime удаляются автоматически ( если они не закреплены и имеют истекшее время жизни).
- Определение похожих путей приложений, например, "/org/gnome/sound-juicer", сопоставляется с «org.gnome.SoundJuicer».
- Добавлена поддержка нового стандарта на оформление файлов в os-release в контейнерах.
- Добавлен профиль для командной оболочки tcsh.
- В ходе поиска зависимостей репозиторий устанавливаемого приложения теперь имеет более высокий приоритет, чем другие репозитории.
- Увеличена эффективность кэширования индекса репозитория в памяти.
- Добавлено несколько новых API, включая flatpak_installation_list_pinned_refs, flatpak_transaction_set_disable_auto_pin, flatpak_transaction_set_include_unused_uninstall_ops, flatpak_transaction_operation_get_subpaths, flatpak_transaction_operation_get_requires_authentication.
- Обеспечена совместимость с находящимися еще в разработке GCC 11.
- Оптимизировано определение сокетов PulseAudio в нетиповых конфигурациях.
- Теперь при обновлении в самом начале устанавливается новая версия приложения, а затем удаляется старая. Соответственно, если что-то идет не так, то приложение не пропадает.
- Пользователю root можно обходить ограничения родительского контроля.