Публикувана е нова стабилна версия на инструмента Flatpak 1.14, който предлага система за изграждане на самодостатъчни пакети, независими от конкретни дистрибуции на Linux и изпълнявани в специален контейнер, изолиращ приложението от останалата система. Поддръжката на Flatpak пакети е осигурена за Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux и Ubuntu. Пакетите с Flatpak са включени в репозитория на Fedora и се подпомагат в стандартната програма за управление на приложения GNOME.
Основни нововъведения в версията Flatpak 1.14:
- Създаден е каталог за файлове в състояние (.local/state) и е зададена променлива на средата XDG_STATE_HOME, указваща на този каталог.
- Добавени са условни проверки от вида „have-kernel-module-имя“ за установяване наличието на ядра (универсален аналог на предходната проверка have-intel-gpu, вместо която сега може да се използва изразът „have-kernel-module-i915“).
- Реализирана е команда „flatpak document-unexport —doc-id=…”.
- Осигурен е експортиране на метаданни Appstream за използване в основната среда.
- Добавени са правила за автоматично допълване на командите flatpak за командната обвивка Fish.
- Разрешен е мрежов достъп до услугите X11 и PulseAudio (с добавяне на съответните настройки).
- Основната клонка в Git репозитория е преименувана от „master“ на „main“, тъй като думата „master“ напоследък се счита за политически некоректна.
- Осигурено е презаписване на стартиращите скриптове в случай на преименуване на приложението.
- В командата install са добавени опции „—include-sdk“ и „—include-debug“ за инсталиране на SDK и файлове debuginfo.
- В flatpakref и flatpakrepo файлове е добавена поддръжка на параметъра „DeploySideloadCollectionID“, при инсталирането на който идентификаторът на колекцията ще бъде зададен по време на добавяне на отдалечен репозиторий, а не след изтегляне на метаданните.
- Разрешено е създаването на вложени sandbox-окружения за обработвачи в сесии с отделни имена MPRIS (спецификация за отдалечено управление на медийни плейъри).
- В командните утилити е осигурен изход на информация за използването на остарели runtime разширения.
- В командата uninstall е реализиран запитване за потвърждение преди изтриване на runtime или runtime разширения, които все още се използват.
- В команди като „flatpak run“ е добавена поддръжка на опцията „—socket=gpg-agent“.
- В libostree е отстранена уязвимост, която потенциално позволява на потребителите да изтриват произволни файлове в системата, чрез манипулации с обработчика flatpak-system-helper (изпращане на искане за изтриване с лицензиранo име на клон). Проблемът се проявява само в стари версии на Flatpak и libostree, издадени преди 2018 година (< 0.10.2), и не засяга актуалните издания.
Напомняме, че разработчиците на приложения получават възможността да улеснят разпространението на своите програми, които не влизат в стандартните хранилища на дистрибуциите, чрез подготовка на един универсален контейнер, без да се формират отделни сборки за всяка дистрибуция. На потребителите, които се грижат за сигурността, Flatpak позволява да стартират съмнителни приложения в контейнер, предоставяйки достъп само до мрежови функции и файлове на потребителя, свързани с приложението. На потребителите, които се интересуват от новини, Flatpak позволява да инсталират най-новите тестови и стабилни издания на приложенията, без да е необходимо да правят промени в системата. Например, Flatpak пакети се изграждат за LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, 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 3.40, GNOME 3.42). Контейнерът с приложението използва свързването само с определен 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. За звуковото изходене се използва PulseAudio. При това изолацията може да бъде деактивирана, което разработчиците на много популярни пакети използват, за да получат пълен достъп до файловата система и всички устройства в системата. Например пакети като GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity и VLC се предлагат с ограничен режим на изолация, който оставя пълен достъп до домашния каталог. В случай на компрометиране на пакети с достъп до домашния каталог, независимо от наличието на етикета „sandboxed“ в описанието на пакета, нападателят може да изпълни своя код, като просто промени файла ~/ .bashrc. Отделен въпрос е контролът върху промените в пакетите и доверието в сборвачите на пакети, които често не са свързани с основния проект или дистрибуцията.
Източник: opennet.ru
