После полутора лет разработки опубликована новая стабильная ветка инструментария Flatpak 1.18, предоставляющего систему для сборки самодостаточных пакетов, не привязанных к конкретным дистрибутивам Linux e executado em um contêiner especial que isola o aplicativo do restante do sistema. O Fedora oferece suporte à execução de pacotes Flatpak. CentOS, Debian, Arco LinuxGentoo, Linux Hortelã, Alternativa Linux и UbuntuOs pacotes Flatpak estão incluídos no repositório do Fedora e são suportados nos programas padrão de gerenciamento de aplicativos GNOME e KDE.
Principais inovações no ramo Flatpak 1.18:
- Реализована поддержка условных полномочий (conditional permission), позволяющих при запросе полномочий проверить наличие определённых возможностей в системе или в runtime. Например, при необходимости получения доступа к устройству ввода вместо «—device=all» можно запросить полномочие «—device-if=all:!has-input-device —device=input», которое предоставит доступ только к устройствам ввода или откатится на доступ ко всем устройствам если выборочное предоставление доступа не поддерживается в runtime. Аналогично можно запросить доступ к USB-устройвствам («has-usb-device» и «has-usb-portal») или совместно используемым подсистемам.
- Разрешён доступ к устройству /dev/ntsync для обращения к
модулю ядра NTSYNC, реализующему набор примитивов для синхронизации, применяемых в ядре Windows NT и позволяющих существенно поднять производительность Windows-jogos iniciados usando o Wine. - Для 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» для очистки переменных окружения перед запуском приложения.
- Предоставлена возможность экспорта корневого каталога хост-окружения в изолированное окружение приложения с доступом через каталог /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, более эффективно сжимающего данные. По умолчанию для сжатия продолжает использоваться gzip, обеспечивающий максимальную совместимость.
Flatpak упрощает распространение программ, не входящих в штатные репозитории дистрибутивов, за счёт подготовки одного универсального контейнера, избавляющего разработчиков программ от необходимости формировать отдельные сборки для каждого дистрибутива. Пользователям, заботящимся о безопасности, Flatpak даёт возможность выполнить вызывающее сомнение приложение в контейнере, предоставив выборочный доступ только к необходимым сетевым функциям и файлам пользователя. Пользователям, интересующимся новинками, Flatpak позволяет установить самые свежие тестовые и стабильные выпуски приложений без необходимости внесения изменений в систему. Например, Flatpak-пакеты собираются для LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Estúdio, etc.
Para reduzir o tamanho, apenas dependências específicas do aplicativo são incluídas no pacote. Bibliotecas básicas de sistema e gráficos (bibliotecas GTK, Qt, GNOME e KDE, etc.) são fornecidas na forma de ambientes de tempo de execução padrão de plug-in. A principal diferença entre Flatpak e Snap é que o Snap usa os componentes do ambiente principal do sistema e o isolamento baseado na filtragem de chamadas do sistema, enquanto o Flatpak cria um contêiner separado do sistema e opera com grandes conjuntos de tempo de execução, fornecendo não pacotes como dependências, mas padrão ambiente do sistema (por exemplo, todas as bibliotecas necessárias para o funcionamento dos programas GNOME ou KDE).
Além do ambiente de sistema padrão (runtime), instalado através de um repositório especial, são fornecidas dependências adicionais (bundle) necessárias para o funcionamento da aplicação. No total, “runtime” e “bundle” formam o conteúdo do container, enquanto “runtime” é instalado separadamente e vinculado a vários containers ao mesmo tempo, o que permite evitar a duplicação de arquivos de sistema comuns aos containers.
Um sistema pode ter vários “tempos de execução” diferentes instalados (GNOME, KDE) ou várias versões do mesmo “tempo de execução” (GNOME 50, GNOME 49). Um contêiner com um aplicativo como dependência usa uma ligação apenas para um tempo de execução específico, sem levar em consideração os pacotes individuais que formam o tempo de execução selecionado. Todos os elementos ausentes são empacotados diretamente com o aplicativo. Ao criar um contêiner, o conteúdo de "runtime" é montado como a partição /usr e "bundle" é montado no diretório /app.
O tempo de execução e os contêineres de aplicativos são construídos usando a tecnologia OSTree, na qual a imagem é atualizada atomicamente a partir de um repositório semelhante ao Git, o que permite que métodos de controle de versão sejam aplicados aos componentes de distribuição (por exemplo, você pode reverter rapidamente o sistema para um anterior estado). Os pacotes RPM são traduzidos para o repositório OSTree usando a camada rpm-ostree.
A instalação e atualização seletiva de pacotes dentro do ambiente de trabalho não são suportadas - o sistema é atualizado não no nível de componentes individuais, mas como um todo, alterando atomicamente seu estado. Fornece ferramentas para aplicar atualizações de forma incremental, eliminando a necessidade de substituir completamente a imagem a cada atualização.
Формируемое изолированное окружение не зависит от используемого дистрибутива и при надлежащих настройках пакета не имеет доступа к файлам и процессам пользователя или основной системы, а также не может напрямую обращаться к оборудованию, за исключением вывода через DRI. Вывод графики и организация ввода реализованы при помощи протокола Wayland или через проброс сокета X11. Взаимодействие с внешней средой построено через систему обмена сообщениями DBus и специальный API Portals.
Para isolamento, uma camada de plástico bolha e o tradicional Linux Tecnologias de virtualização de contêineres baseadas no uso de cgroups, namespaces, Seccomp e SELinux. При создании пакета изоляция может быть отключена, чем пользуются разработчики некоторых пакетов для получения полного доступа к ФС и всем устройствам в системе.
Fonte: opennet.ru
