Найти тему
Другой мир

Пакеты snap и flatpak - что это такое.

Оглавление

И опять у нас статья по заявкам читателей моего блога. В комментариях попросили рассказать подробнее про snap и flatpak. До этого я постарался подробно и понятно разобрать appimage.

Как многие знают, большая проблема совместимость установочных пакетов с конкретной системой.

Во-первых у нас существует несколько ветвей самого Linux и его пакетной базы: на базе Дебинан, на базе РедХат, на базе АрчЛинукс - как самые популярные. А так же куча независимых со своей пакетной базой, ли вообще собираемые из исходников.

Во-вторых установочный пакет, будь то deb или rpm содержит только бинарник самой программы, но не библиотеки необходимые для работы программы. Здесь не будет у каждой программы одной и той же dll, как у винды но в каждой папке программы. Если 10 приложений используют 1 библиотеку, то она будет установлена 1 раз, а не 10 раз, как у мелкомягких.

Для примера установочные пакеты программ для винды содержат, как правило, все что нужно для работы программы, но не всегда. Бывает что скрипт-установщик(инсталятор) понимает что нет, скажем какого либо .net вызывает исталятор библиотеки, скачивает и устанавливает.

Но не всегда.

неразрешенная зависимость в виндоувс.
неразрешенная зависимость в виндоувс.

Почему так реализованы установочные пакеты в Линукс? Для уменьшения размера и из соображений, что если у вас есть эта библиотека, то зачем ее качать?

Все это называется зависимостями, они могут быть разрешенными, когда библиотека установилась или есть в системе, не разрешенными.

Если вы устанавливаете приложение из официального репозитория вашей системы, то зависимости все удовлетворятся. Пакетный менеджер системы, скажем apt, увидит на что ссылается программа и если в системе нет нужных библиотек, то скачает их. Такое имеет место и с некоторыми сторонними программами, где разработчик позаботился указать что нужно докачивать из официального репозитория.

Автоматическое разрешение зависимостей пакетным менеджером в графическом режиме.
Автоматическое разрешение зависимостей пакетным менеджером в графическом режиме.

Но, часто бывает так, что вы скачали какую то программу, а зависимости к ней взять не понятно где, особенно если это старые библиотеки, которые давно убрали из репозитория. И как быть?

Да, можно в терминале запустить установщик, смотреть на ошибки, устанавливать нужные библиотеки, разыскивая их на сторонних сайтах, и опять запускать установку, и так по кругу. Да, для красноглазиков это вариант и понимание системы изнутри. Но для обычного пользователя это боль и страдание и проще пользоваться виндой.

Потому эту проблему решили решить - создать форматы пакетов, близкие по сути к пакетам виндовс.

Snap

Система упаковки и развертывания программного обеспечения, разработанная компанией Canonical, которые эту технологию агрессивно продвигают, что создатели Linux Mint даже отключили поддержку по умолчанию. Снапы содержат в себе все необходимое для работы приложения практически в любом дистрибутиве.

Как бы снапы напоминают appImage, только постоянно смонтированные в системе. Это тоже сжатый образ системы с программой использующую формат SquashFS. Запуск снапа происходит в "песочнице" - изолированном контейнере, который имеет очень ограниченный доступ к самой хост системе. Но пользователь может разрешить разные доступы - доступ к микрофону, принтеру, камере и тд. Значит так же и зловредный код, который могли засунуть в снап может получить доступ к системе.

Командой snap list можно посмотреть какие есть в системе snap приложения
Командой snap list можно посмотреть какие есть в системе snap приложения

В формате снап могут быть и приложения командной строки и пользовательские графические приложения. Но не могут содержать элементы ядра и базовых компонентов системы.

Загрузка и установка приложения в формате snap
Загрузка и установка приложения в формате snap

Как я сказал выше - снап это сжатый образ системы, который монтируется в папку snap в вашем домашнем каталоге. А вот так это выглядит в системе:

архивы с образами
архивы с образами

Мы можем в режиме суперпользователя открыть любой снап как архив и увидеть что там внутри.

-7

Особенно наглядно это на Гимпе(который я специально установил для статьи):

Знакомые папки, не правда ли? Мы примерно тоже самое имеем в корне нашей системы. В галерее вы можете увидеть и исполняемые бинарные файлы, и библиотеки.

Таким образом snap это не коем образом не скрипт для установки и не архив с бинарником.

Да, снапы будут работать только на системах с ситемой инициализации systemd.

Flatpak

"Конкурент" snap. Это так же система управления и развертывания пакетов.

Запуск происходит так же в изолированной песочнице. Но есть отличия от snap:

Зависимости могут находится как в каждом контейнере приложения, а могут быть общие в окружении для нескольких приложений.

Можно использовать для работы как репозиторий разработчика Flathub, так и сторонние репозитории.

Разрабатывался формат именно для приложений с графическим интерфейсом. На многих дистрибутивах поддержка формата стоит по умолчанию и менеджер приложений вам может найти пакет как в формате, скажем deb, так и в формате flatpak.

Для ЛинуксМинт старше 18.3 настройка не требуется, поддержка уже включена.

Подробнее о поддержке я писал тут

Установка скачанного приложения
Установка скачанного приложения

Но, как я писал выше - флетпак децентрализован, ни чего не мешает создать свой репозиторий и распространять через него приложения, что несет угрозу системе.

Флетпак создает файловую структуру системы, библиотеки и метаданные, необходимые для выполнения программы. Обычно по адресу /var/lib/flatpak

-10

Бинарные файлы и все необходимое для работы лежит не архивом, как у snap, а в развернутом виде:

Среда выполнения находится по адресу /var/lib/flatpak/runtime

Для примера откроем одну из них:

-12

Опять похоже на корень нашей системы.

Сами приложения монтируются в /var/lib/flatpak/app и запускаются в среде выполнения, при том разные приложения могут использовать одну среду.

-13

Песочница имеет доступ только к ресурсам, строго необходимым ей для работы, причем только с минимально допустимыми привилегиями. Но файлы ярлыков находятся вне песочницы, иначе ярлык программы не сможет попасть в системное меню.

Когда вы запускаете приложение Flatpak, оно запускает подсистему выполнения (образ системы в песочнице), там запускается сама программа, а так же необходимые системные ресурсы для выполнения.

Я не хочу грузить вас сложными техническими вопросами - как работает песочница, если вам интересно, то можете почитать заумный текст на эту тему https://github.com/flatpak/flatpak/wiki/Sandbox

Думаю я достаточно раскрыл тему Flatpak и Snap, для общего развития точно хватит.

Какие недостатки есть?

Кроме некоторой небезопасности, основной недостаток это замусоривание системы.

Когда вы удаляете приложение Флетапак, то среда выполнения остается и занимает место на диске, а среда выполнения это все же образ системы с библиотеками, интерпретаторами языков типо питона и тд. Так же данные не удаляются. Но это решается следующим командами:

flatpak remove --unused

Это мы удаляем ненужные среды выполенения

flatpak remove --delete-data

а это удаляем ненужные данные удаленных приложений.

У снапов другая проблема, на мой взгляд это косяк разработчиков. Когда вы обновили приложение, старая версия остается, и ни куда не девается, просто не активна.

Потому копируем в терминал команду:

snap list --all

И смотрим все, старые версии можем удалить вручную, а можем открыть текстовый редактор и написать туда скрипт:

#!/bin/bash # Removes old revisions of snaps # CLOSE ALL SNAPS BEFORE RUNNING THIS set -eu

LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
while read snapname revision; do snap remove "$snapname" --revision="$revision"

done

Так же вы можете указать максимальное значение образов для одной и той же программы:

sudo snap set system refresh.retain=2

И очистить кэш

sudo rm /var/lib/snapd/cache/*

Ну на этом, думаю хватит:) И так весьма объемная статья.