для работы приложения snap требуется отключить механизмы ограждения данных
Среда выполнения snap.
Четвёртая статья, в которой рассматривается размещение и свойства файловой системы во время выполнения программы в snap пакете.
С точки зрения пользователя ничего особенного не происходит. Он запускает программу, щёлкнув по значку на Рабочем столе или запустив из Терминала. Внутренне snapd делает ряд шагов, которые подробно будут рассмотрены в следующих статьях, для конфигурирования процесса приложения.
(ch)root файловой системы и немного магии
Core snap меняет корневую файловую систему для среды выполнения (runtime) данного приложения. Можно представлять это как chroot, только учитывать что файловые системы snap доступны только на чтение и core snap не исключение.
Некоторые каталоги в core snap примонтированы через bind (можно представлять их как специальный тип символической ссылки или жёсткой ссылки на каталог, хотя оба сравнения неточны) к некоторым местам в хостовой системе:
Заметьте, что нет путей /usr/lib/ или /usr/bin/. Если программе в snap требуется библиотека или бинарник, то нужное должно присутствовать в данном снап пакете. Исключение состоит только в низкоуровневых библиотеках типа libc, которые находятся в core snap.
Со всеми этим точками монтирования (mounts) и chroots можно задаться вопросами, а как эти точки монтирования выглядят для всех остальных процессов в системе? Ответ прост. Они выглядят, как будто ничего специально связанного со snappy нет.
Не волнуйтесь, если не в полной мере пока понятна данная тема. Суть в том, что ваше приложение видит другое представление файловой системы, но это видение согласуется среди различных дистрибутивов Linux.
Рассмотрим пару моментов, без подробного объяснения:
На данном моменте для программы присутствуют привычные места и они содержат данные, знакомые данной программе. Это не означает, что эти каталоги доступны для чтения или записи! Они только лишь присутствуют и механизм ограничения (confinement) и интерфейсы будут решать что будет доступно для чтения или записи. И тут подходим к такой части как snap-confine.
Механизм ограничения процесса
Snap-confine поддерживает две технологии песочницы: фильтры системных вызовов seccomp и система мандатного доступа AppArmor.
Seccomp ограничивает программу в списке доступных для неё системных вызовов, которые сами по себе являются интерфейсом между ядром Linux и пользовательским пространством. Очень грубо говоря, некоторые функции в языках программирования реализованы как системные вызовы и seccomp та подсистема linux, которая отвечает за доступ к ним.
Прямо сейчас, если программа запущена в режиме devmode, вы не получите какое-либо уведомление, что в программе используются вызовы, которые будут запрещены, так как не разрешены при текущем наборе используемых интерфейсов. По факту режим devmode в апстриме проекта называется complain и ситуация с уведомлением может завтра измениться.
В строгом режиме ограничения под названием strict, попытки программы использовать системные вызовы, которые не были ей разрешены, вызовут её убийство. В системном журнале будет отображено что-то типа:
Процесс с PID=66834 был убит с сигналом 31 (SIGSYS), так как пытался использовать системный вызов под номером 54 (setsockopt). Номера системных вызовов зависят от архитектуры, в примере подразумевается 64 битная архитектура (amd64).
/snap/$app-name/$revision/, но чтение и запись в реальную домашнюю директорию пользователя, по умолчанию запрещено.
Мы видим что процесс PID=67013 пытался открыть файл ключей /home/zyga/.ssh/authorized_keys и ему запретили операцию read (denied_mask=»r»). Если программа установлена в режиме devmode, то действие будет разрешено, с занесением информации в журнал.
AppArmor обладает более широкими возможностями для проверки linux capabilities, UNIX IPC (сигналы и слоты), сообщения DBus, включая вызываемые объекты и методы. Бо́льшая часть ограничений для программ создаётся профилями AppArmor. Все возможности будут рассмотрены в следующих статьях, где с нуля попробуем создать свой интерфейс.
device control group
А теперь всё вместе
С учётом всего вышесказанного, snap-confine вызывает через execv скрипт-обёртку, который содержит вызов программы, указанной в снапкрафтером в файле snapcraft.yaml в разделе apps
Пример
Механизм ограничения с помощью snap-confine вызывается всякий раз при старте программы. Дополнительную информацию вы можете получить через man 5 snap-confine
В следующий раз мы создадим наш первый, чрезвычайно простой, интерфейс.
Установка и использование Snap на разных дистрибутивах Linux
До сего момента вы уже могли слышать о Snap. Canonical описывает свою разработку как универсальный способ установки пакетов на любом дистрибутиве Linux.
Сами Snap-пакеты представляют собой заранее скомпилированные, вместе со всеми своими зависимостями и библиотеками, приложения, для которых, ко всему прочему, еще и существует своя собственная изолированная среда запуска. Они легче и быстрее устанавливаются, могут получать последние обновления, а также более безопасны, с точки зрения доступа к операционной системе и важным файлам.
Приложение может быть запаковано для любого дистрибутива Linux, сервера или облака в виде Snap. Разработчики более не должны испытывать боль и страдания, упаковывая свои программы для каждого отдельного дистрибутива Linux и прочих платформ, и именно по этой причине многие отдают предпочтение данному виду пакетов.
Преимущества Snap:
Как установить Snap на Linux
Включение поддержки Snap в Debian и Ubuntu
Если вы хотите использовать Snap на Linux Mint и других дистрибутивах, основанных на Debian или Ubuntu, то используйте эту команду:
Включение поддержки Snap в дистрибутивах Fedora:
Включение поддержки Snap в Arch-based дистрибутивах
Spapd доступен в AUR. Используйте команды ниже, чтобы установить его оттуда.
Включение поддержка Snap в дистрибутивах OpenSuse
Официально Snapd не включен в OpenSuse, с помощью команд ниже вы сможете установить его на Tumbleweed.
Как только Snapd будет успешно установлен из репозиториев сообщества, не забудьте включить его с помощью команды:
Основные команды Snap
При работе с приложениями Snap вам необходимо будет запомнить несколько команд, которые будут помогать вам выполнить различные (иногда весьма важные) действия.
Поиск
Рано или поздно вы захотите найти какое-нибудь приложение, а если быть точнее, Snap-версию этого приложения. Следующая команда поможет вам в этом:
Установка Snap-пакета
После того, как вы найдете нужную программу, вам необходимо будет ее установить. Для этого надо ввести эту команду:
Список установленных Snap-приложений:
Далее вы сможете найти ее в этом списке:
Обновление Snap-пакета до последней версии
Приложения Snap обновляются автоматически, однако если это по каким-то причинам не произошло, вы можете использовать эту команду:
Удаление Snap-приложения
Чтобы удалить приложение Snap используйте следующую команду:
Выводы
В различных дистрибутивах Linux нет единого способа установки приложений. Разработчикам приходится собирать разные пакеты для каждого отдельного семейства дистрибутивов, что отнимает у них больше времени и сил. Snap мог бы стать отличным решением этой, и еще ряда других (связанных с отсутствием зависимостей и библиотек) проблем.
Отключение Snap в Ubuntu 20.04
Не поймите меня неправильно, снимки — это здорово в теории. Если вы не знакомы, snap-пакет похож на изолированное приложение, которое упаковано таким образом, что:
Все это звучит великолепно, и в некотором смысле (особенно для разработчиков приложений), но за это приходится платить: обычно это производительность и неудобства, связанные с темами приложений, доступом к пользовательским папкам и т.д.
Я лично считаю, что если я хочу запустить приложение в песочнице, я больше склоняюсь к Flatpak, поскольку он более производительный и кажется немного более зрелым, чем система привязок Canonical.
В любом случае я обычно полностью отключаю привязки snap при новой установке Ubuntu, и я покажу вам, как это сделать в новой версии Ubuntu 20.04.
1. Удалите существующие привязки
При новой установке Ubuntu предустановлено несколько снимков. Вы можете увидеть их список с помощью команды snap list:
Выполните следующую команду, чтобы удалить их все:
Вам может быть интересно, почему я не удалил базовую привязку… ну, оказывается, вы не можете удалить ее, но на следующих шагах она все равно будет удалена.
2. Отключите службу ядра Snap
Вам нужно будет заменить xxxx на фактический идентификатор внутри основного каталога в вашей системе, который вы можете узнать, запустив df
Вот узнали идентификатор как 8542, теперь используя его можно отмонтировать ресурс:
Проверяем командой, что у нас осталось:
3. Удалите с очисткой пакет snapd
Затем, чтобы удалить пакет snapd и все связанные с ним службы, запустите:
Остановите gnome-software и зачистите кэш от snap пакетов
4. Удалите все устаревшие каталоги оснастки
Наконец, вы можете удалить оставшиеся каталоги оснастки в системе. После шага 3 у вас может не быть ни одного из этих каталогов, и это нормально. У меня не было этих каталогов при новой установке Ubuntu 20.04 после удаления snapd, но ваш опыт может отличаться от моего.
Теперь у вас Gnome-Software, который простым способом устанавливает приложения как в былые времена из deb-пакетов.
Вернуть всё в зад
Да, вернуть можно, установив plugin-snap
Похожее
ПОИСК ПО САЙТУ
НОВЫЕ СТАТЬИ НА EMAIL
Подпишитесь на нашу рассылку и получайте интересные новости на свой почтовый ящик
РЕКОМЕНДУЮ
Открыл для себя очень выгодный хостинг серверов, доволен и рекомендую Hetzner. Регистрируйся по моей ссылке, и получи 20 евро облачных кредитов (использую с 2019)
Рекомендую для ваших Linux-серверов отличный сервис DigitalOcean (использую с 2012)
Рекомендую простой облачный диск DropBox удобный для совместной работы или переноса документов работа-дом (использую с 2011)
Установка Snap в Linux
Что такое Snap пакеты?
Здесь в игру вступают пакеты. После завершения разработки программы её разработчики создают пакеты, например, deb или rpm и размещают их в репозиториях программного обеспечения, откуда пользователи могут их очень легко установить. Установить программу из любого deb пакета можно буквально в пару кликов. Но такие пакеты содержат только саму программу, все зависимости и необходимые ей библиотеки пакетный менеджер ищет и устанавливает автоматически.
В свою очередь Snap пакеты содержат саму программу, а также все её зависимости. Это имеет несколько преимуществ перед обычными deb или rpm пакетами, поскольку теперь программу можно запустить в любом дистрибутиве, а также разработчик может быть уверен, что его программа получает именно необходимые ей версии библиотек.
Установка snap
В дистрибутивах, основанных на Debian и в самом Debian для использования snap пакетов сначала надо установить менеджер пакетов snap. Для этого выполните:
sudo apt install snapd
Установка snap в Fedora или CentOS отличается не сильно:
sudo dnf install snapd
После установки для включения возможности установки классических приложений через snap надо создать символическую ссылку на /var/lib/snapd/snap в корне:
После этого можно установить магазин приложений snap-store:
sudo snap install snap-store
Или устанавливать пакеты snap через терминал.
Как пользоваться snap
Основы рассмотрели, теперь перейдем к управлению пакетами. Процесс взаимодействия со snap очень похож на apt или dnf, только не надо обновлять репозитории. Все действия выполняются в терминале.
1. Поиск пакетов
Чтобы найти нужный пакет или посмотреть есть ли он в магазине приложений snap используйте команду find. Например:
snap find chromium
Будут выведены все пакеты соответствующие данному критерию, доступные для установки в вашей системе. Если выполнить команду find без параметров, то система выведет несколько рекомендуемых пакетов.
2. Информация о пакете
Чтобы посмотреть информацию о пакете используйте команду info:
snap info chromium
3. Установка пакетов
Вы можете установить snap пакет в Ubuntu или любом другом дистрибутиве командой install:
sudo snap install chromium
Когда установка snap пакетов завершится, программа выдаст соответствующее сообщение. Для установки пакета из определенного канала используйте соответствующую опцию, например —stable, —candidate, —beta или —edge. По умолчанию используется канал stable. Например:
По умолчанию приложение может получить доступ только к тем частям системы, к которым у него подключены интерфейсы. Эти подключения устанавливаются автоматически во время установки пакета. Посмотреть их можно командой connections:
snap connections chromium
Иногда для приложений недостаточно такого уровня доступа. Тогда для них используется уровень безопасности classic. В этом режиме приложение получает доступ к системным ресурсам как любые другие системные программы. Для установки таких программ надо использовать опцию —classic, иначе установить их не получится:
Есть ещё один режим безопасности, при котором приложение получает полный доступ к системе: devmode. Для установки таких программ надо использовать опцию —devmode.
4. Удаление пакета
Удалить snap пакет из системы очень просто. Для этого достаточно использовать команду remove:
sudo snap remove chromium
5. Установленные программы
Для того чтобы посмотреть все пакеты, установленные в системе используйте команду list:
6. История изменений
Также вы можете посмотреть историю изменений, внесенных, в систему с помощью этого пакетного менеджера:
7. Обновление пакетов
Если вы хотите обновить пакет snap, до более новой версии, выполните команду refresh:
sudo snap refresh opera
Если установлена самая свежая версия вы получите сообщение об ошибке.
Для обновления всех пакетов, установленных в системе просто выполните команду refresh:
Если обновление вам не понравилось, вы можете откатить версию всех пакетов или одного из них до предыдущей. Для этого выполните команду revert:
sudo snap revert opera
Выводы
С момента создания этой технологии прошло много времени и сейчас доступно уже много snap пакетов. Они даже вытеснили многие PPA репозитории, что теперь заброшены и не поддерживаются. Поскольку существует инструмент snapcraft, который делает создание snap пакетов намного проще, все разработчики могут подготовить эти пакеты для своих программ.
А что вы думаете о системе управления пакетами и о самих пакетах snap? Будете использовать систему установки snap чаще чем apt? Напишите в комментариях!
Ubuntu snap – что это такое и с чем его едят?
Относительно недавно в Ubuntu появился новый инструмент — снапы (от англ. snap), но что это такое и как их использовать знают далеко не все пользователи.
Введение в снапы
Представим вполне реальную ситуацию. Пользователь устанавливает самую новую версию Ubuntu, пусть это будет версия 16.04 — именно в ней и появились впервые снапы по умолчанию. По определенным причинам пользователь отключает обновления. Такая ситуация не надумана. Мы все знаем, что после обновления системы Ubuntu, к сожалению, не всегда работает корректно и даже не всегда загружается.
Пользователя все устраивает и он спокойно себе использует дистрибутив некоторое время. Через несколько лет пользователь хочет установить новую версию приложения, например, браузера и обнаруживает, что он не может этого сделать.
Почему? Да потому что его дистрибутив устарел. для установки приложения нужны новые версии библиотек, а для их установки нужно обновить уже установленные пакеты. Иногда процесс настолько масштабный, что приходится обновлять дистрибутив. А ведь мы знаем, что пользователь не хочет этого делать по ряду причин, да и это опасно: система может быть разрушена нарушения связей между программами и библиотеками.
Вторая ситуация. Пусть у пользователя самая новая версия дистрибутива (на данный момент — это 18.10) — чтобы никто не упрекнул нас в надуманности ситуации. Мы знаем, что у традиционных пакетов есть зависимости и конфликты. Иногда нельзя установить то или иное приложение, поскольку его библиотеки конфликтуют с библиотеками уже установленными в системе.
Обе проблемы настолько обширны, что разработчики Ubuntu изобрели снапы. Все мы знакомы с понятием пакета. Пакет содержит саму программу, а также различные вспомогательные файлы — документацию, ресурсы (картинки, например), файлы локализации, сценарии Но пакет не содержит всего, что нужно для работы этой программы в системе. Например, если программе для работы нужна библиотека GL, то просто в пакете «прописывается» зависимость — нужно установить пакет для работы этого пакета. При установке программы менеджер пакетов (apt) производит разрешение зависимостей — устанавливает все необходимые для работы этой программы пакеты.
С одной стороны, такой подход позволяет экономить место на диске. Ведь одну и ту же библиотеку не нужно устанавливать несколько раз. С другой стороны, это порождает уже описанные ранее проблемы.
Снап — это решение всей головной боли, как пользователя, так и разработчика приложения. Снап можно считать таким пакетом, в котором содержится не только программа, но и все необходимые для ее работы библиотеки. Получается, что все, что нужно для работы программы содержится в снапе.