Реліз системи самодостатніх пакетів Flatpak 1.14.0

Опубліковано нову стабільну гілку інструментарію 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 (Media Player Remote Interfacing Specification).
  • В утилітах командного рядка забезпечено виведення відомостей про використання застарілих runtime-розширень.
  • У команді uninstall реалізовано запит підтвердження перед видаленням runtime або runtime-розширень, які ще використовуються.
  • У команди подібні "flatpak run" додана підтримка опції "-socket = gpg-agent".
  • У libostree усунута вразливість, що потенційно дозволяє користувачеві видалити довільні файли в системі через маніпуляції з обробником flatpak-system-helper (надсилання запиту на видалення зі спеціально оформленим ім'ям гілки). Проблема проявляється лише у старих версіях Flatpak та libostree, випущених до 2018 року (< 0.10.2), і не торкається актуальних випусків.

Нагадаємо, що розробникам додатків Flatpak дає можливість спростити розповсюдження своїх програм, які не входять до штатних репозиторій дистрибутивів за рахунок підготовки одного універсального контейнера без формування окремих збірок для кожного дистрибутива. Користувачам, які піклуються про безпеку, Flatpak дозволяє виконати додаток у контейнері, що викликає сумнів, надавши доступ тільки до мережевих функцій і файлів користувача, пов'язаних з додатком. Користувачам, які цікавляться новинками, Flatpak дозволяє встановити найсвіжіші тестові та стабільні випуски програм без необхідності внесення змін до системи. Наприклад, Flatpak-пакети збираються для LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 AD, 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

Додати коментар або відгук