Снапы в Ubuntu: что это такое и с чем его едят?

18 Декабря 2018

Относительно недавно в Ubuntu появился новый инструмент — снапы (от англ. snap), но что это такое и как их использовать знают далеко не все пользователи.

Введение в снапы

Представим вполне реальную ситуацию. Пользователь устанавливает самую новую версию Ubuntu, пусть это будет версия 16.04 — именно в ней и появились впервые снапы по умолчанию. По определенным причинам пользователь отключает обновления. Такая ситуация не надумана. Мы все знаем, что после обновления системы Ubuntu, к сожалению, не всегда работает корректно и даже не всегда загружается.

Пользователя все устраивает и он спокойно себе использует дистрибутив некоторое время. Через несколько лет пользователь хочет установить новую версию какого-то приложения, например, браузера и обнаруживает, что он не может этого сделать.

Почему? Да потому что его дистрибутив устарел. Просто-напросто для установки приложения нужны новые версии библиотек, а для их установки нужно обновить уже установленные пакеты. Иногда процесс настолько масштабный, что приходится обновлять дистрибутив. А ведь мы знаем, что пользователь не хочет этого делать по ряду причин, да и это опасно: система может быть разрушена из-за нарушения связей между программами и библиотеками.

Вторая ситуация. Пусть у пользователя самая новая версия дистрибутива (на данный момент — это 18.10) — чтобы никто не упрекнул нас в надуманности ситуации. Мы знаем, что у традиционных пакетов есть зависимости и конфликты. Иногда нельзя установить то или иное приложение, поскольку его библиотеки конфликтуют с библиотеками уже установленными в системе.

Обе проблемы настолько обширны, что разработчики Ubuntu изобрели снапы. Все мы знакомы с понятием пакета. Пакет содержит саму программу, а также различные вспомогательные файлы — документацию, ресурсы (картинки, например), файлы локализации, какие-то сценарии и т. д. Но пакет не содержит всего, что нужно для работы этой программы в системе. Например, если программе для работы нужна библиотека GL, то просто в пакете «прописывается» зависимость — нужно установить такой-то пакет для работы этого пакета. При установке программы менеджер пакетов (apt) производит разрешение зависимостей — устанавливает все необходимые для работы этой программы пакеты.

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

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

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Не нужно бояться, что система превратится в свалку, где перемешаны старые и новые версии библиотек. Снапы устанавливаются в отдельной папке в виде защищенного от записи образа. Изменения, которые должен внести снап в файловую систему (например, в каталог /lib) будут внесены в виртуальной файловой системе. Таким образом, установка снапа никак не повлияет на работу основной системе. Все. Все проблемы с совместимостью версий разных приложений решены.

Работа со снапами

Первым делом нужно установить snapd. В Ubuntu 16.04 и более новых версиях ничего делать не нужно, поскольку snapd уже установлен. В Ubuntu 14.04 нужно ввести команду:

sudo apt install snapd

В других дистрибутивах команда будет другой, например, в Fedora команда установки выглядит так:

sudo dnf install snapd

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

snap find <название>

Например

snap find hello

Вывод будет примерно таким:

hello-node-snap 1.0.2 bhdouglass — A simple hello world command
hello-mdeslaur 2.10 mdeslaur - GNU Hello, the «hello world» snap
hello-snap 0.01 muhammad - GNU hello-snap, the «Hello, Snap!» snap
hello 2.10 canonical — GNU Hello, the «hello world» snap
hello-world 6.3 canonical — The 'hello-world' of snaps
hello-sergiusens 1.0 sergiusens — hello world example
hello-gabriell 0.1 gabriell - Qt Hello World example
hello-bluet 0.1 bluet - Qt Hello World example
so-hello-world 0.2 shadowen - the old classic
hello-huge 1.0 noise - a really big snap

В первой колонке приводится название снапа. Пусть мы хотим установить снап hello:

sudo snap install hello

Как видите, команда установки снапа аналогична команде установки пакета, только вместо apt используется утилита snap.

Кстати, после установки снапа можно запустить имеющуюся в нем программу:

hello
Hello, world!

Просмотреть установленные снапы можно командой snap list:

snap list
Name    Version   Rev Developer Notes
hello   2.10      20   canonical —
core    16.04.1   423 canonical —

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

Как и пакеты, снапы можно обновить. Например:

sudo snap refresh hello

Данная команда обновит снап hello, если для него доступны обновления. Это очень удобно — вы обновляете не только приложения, но и все необходимые для его работы библиотеки.
Для обновления всех снапов используется другая команда:

sudo snap resresh

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

Получить консультацию специалиста