После полутора лет разработки опубликована новая стабильная ветка инструментария Flatpak 1.18, предоставляющего систему для сборки самодостаточных пакетов, не привязанных к конкретным дистрибутивам Linux و در یک کانتینر مخصوص که برنامه را از بقیه سیستم جدا میکند، اجرا میشود. پشتیبانی از اجرای بستههای Flatpak برای فدورا ارائه شده است، CentOS, Debian، طاق Linux، جنتو، Linux ضرابخانه، آلت Linux и Ubuntu. Пакеты с Flatpak включены в репозиторий Fedora и поддерживаются в штатных программах управления приложениями GNOME и KDE.
نوآوری های کلیدی در شعبه 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-بازیهایی که با استفاده از 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 استودیو و غیره
برای کاهش اندازه، فقط وابستگی های خاص برنامه در بسته گنجانده شده است. سیستمهای پایه و کتابخانههای گرافیکی (کتابخانههای GTK، Qt، GNOME و KDE و غیره) در قالب محیطهای زمان اجرا استاندارد پلاگین عرضه میشوند. تفاوت اصلی Flatpak و Snap در این است که Snap از اجزای محیط اصلی سیستم و جداسازی مبتنی بر فراخوانی سیستم استفاده میکند، در حالی که Flatpak یک کانتینر جدا از سیستم ایجاد میکند و با مجموعههای زمان اجرا بزرگ کار میکند و بستهها را نه به عنوان وابستگی، بلکه استاندارد ارائه میکند. محیط سیستم ones (به عنوان مثال، تمام کتابخانه های لازم برای عملکرد برنامه های GNOME یا KDE).
علاوه بر محیط استاندارد سیستم (زمان اجرا) که از طریق یک مخزن ویژه نصب شده است، وابستگی های اضافی (بسته) مورد نیاز برای عملکرد برنامه ارائه می شود. در مجموع، "runtime" و "bundle" محتویات کانتینر را تشکیل می دهند، در حالی که "runtime" به طور جداگانه نصب می شود و به طور همزمان به چندین کانتینر متصل می شود، که به شما امکان می دهد از کپی کردن فایل های سیستمی رایج در کانتینرها جلوگیری کنید.
یک سیستم میتواند چندین «زمان اجرا» مختلف (GNOME، KDE) یا چندین نسخه از همان زمان اجرا (گنوم 50، گنوم 49) نصب کرده باشد. یک کانتینر با یک برنامه به عنوان یک وابستگی، فقط از یک اتصال به یک زمان اجرا خاص استفاده می کند، بدون در نظر گرفتن بسته های فردی که زمان اجرا انتخاب شده را تشکیل می دهند. تمام عناصر گم شده مستقیماً با برنامه بسته بندی می شوند. هنگام ایجاد یک کانتینر، محتویات "runtime" به عنوان پارتیشن /usr و "bundle" در پوشه /app نصب می شود.
زمان اجرا و کانتینرهای برنامه با استفاده از فناوری OSTree ساخته شده اند، که در آن تصویر به صورت اتمی از یک مخزن Git مانند به روز می شود، که اجازه می دهد تا روش های کنترل نسخه بر روی اجزای توزیع اعمال شود (به عنوان مثال، می توانید به سرعت سیستم را به حالت قبلی برگردانید. حالت). بسته های RPM با استفاده از لایه rpm-ostree به مخزن OSTree ترجمه می شوند.
نصب و به روز رسانی انتخابی بسته ها در محیط کار پشتیبانی نمی شود - سیستم نه در سطح اجزای جداگانه، بلکه به طور کلی به روز می شود و حالت خود را به صورت اتمی تغییر می دهد. ابزارهایی را برای اعمال بهروزرسانیها به صورت تدریجی فراهم میکند و نیازی به جایگزینی کامل تصویر با هر بهروزرسانی را از بین میبرد.
Формируемое изолированное окружение не зависит от используемого дистрибутива и при надлежащих настройках пакета не имеет доступа к файлам и процессам пользователя или основной системы, а также не может напрямую обращаться к оборудованию, за исключением вывода через DRI. Вывод графики и организация ввода реализованы при помощи протокола Wayland или через проброс сокета X11. Взаимодействие с внешней средой построено через систему обмена сообщениями DBus и специальный API Portals.
برای عایقبندی، یک لایه حبابپیچ و روش سنتی Linux فناوریهای مجازیسازی کانتینر مبتنی بر استفاده از cgroups، namespaces، Seccomp و SELinux. При создании пакета изоляция может быть отключена, чем пользуются разработчики некоторых пакетов для получения полного доступа к ФС и всем устройствам в системе.
منبع: opennet.ru
