Скрытое содержимое Flatpak🔗
На этой странице представлен обзор внутренней работы Flatpak. Хотя не обязательно знать это, чтобы использовать Flatpak, некоторым это может показаться интересным. Знание об архитектуре Flatpak также помогает лучше понять, как и почему она работает именно так, с точки зрения пользователя и разработчика приложений.
«Git for apps»🔗
Flatpak построен на основе технологии под названием OSTree, которая находится под влиянием системы контроля версий Git и очень похожа на нее. Как и Git, OSTree позволяет отслеживать версионные данные и распределять их между различными репозиториями. Однако там, где Git предназначен для отслеживания исходных файлов, OSTree предназначен для отслеживания двоичных файлов и других больших данных.
Таким образом, внутри Flatpak работает аналогично Git, и многие концепции Flatpak аналогичны концепциям Git. Как и Git, Flatpak использует репозитории для хранения данных и отслеживает различия между версиями.
В Flatpak каждое приложение, среда выполнения и расширение - это ветка в репозитории. Тройная идентификация, например com.company.App/x86_64/stable
, является ссылкой на эту ветку. Результатом процесса сборки Flatpak является каталог файлов, который привязан к одной из этих веток.
Когда приложение устанавливается с помощью Flatpak, оно переносится с удалённой в новую ветку в локальном репозитории. Затем генерируются ссылки, которые указывают из нужных мест в файловой системе на файлы приложения в репозитории (это жесткие ссылки, которые быстро разрешаются и освобождают дисковое пространство, занимая мало места на диске). Другими словами, каждое установленное приложение хранится в локальном репозитории управления версиями, а затем сопоставляется с локальной файловой системой.
Таким образом, отслеживание версий является основной частью архитектуры Flatpak, и это делает обновление программного обеспечения до последней версии очень эффективным. Управление версиями также делает возможными откаты, поэтому при необходимости легко вернуться к предыдущей версии.
Хранение приложений в локальном репозитории OSTree имеет и другие преимущества. Например, он позволяет удалять дубликаты файлов, хранящихся на диске, поэтому один и тот же файл, принадлежащий нескольким приложениям (или средам выполнения), сохраняется только один раз.
This blog post explains the underlying structure of a Flatpak repository in more detail.
Базовые технологии🔗
Flatpak использует ряд уже существующих технологий. К ним относятся:
Утилита bubblewrap из Project Atomic, которая позволяет непривилегированным пользователям устанавливать и запускать контейнеры, используя такие функции ядра, как:
Namespaces
Bind mounts
Seccomp rules
systemd для настройки контрольных групп для песочниц
D-Bus, - хорошо зарекомендовавший себя способ предоставления высокоуровневых API для приложений
The OSTree system for versioning and distributing filesystem trees
Формат OCI из Open Container Initiative <https://opencontainers.org/>`_ в качестве альтернативы OSTree, используемой инфраструктурой Fedora <https://blog.fishsoup.net/2018/12/04/ flatpaks-in-fedora-now-live/>`__
Flatpak может использовать OSTree или OCI для однофайловых пакетов.
Appstream - метаданные, предназначенные для того, чтобы приложения Flatpak хорошо отображались в приложениях центра программ