16 May 2022
Относительно недавно в Ubuntu появился новый инструмент – снапы (от англ. snap), но что это такое и как их использовать знают далеко не все пользователи.
Представим вполне реальную ситуацию. Пользователь устанавливает самую новую версию Ubuntu, пусть это будет версия 16.04 – именно в ней и появились впервые снапы по умолчанию. По определенным причинам пользователь отключает обновления. Такая ситуация не надумана. Мы все знаем, что после обновления системы Ubuntu, к сожалению, не всегда работает корректно и даже не всегда загружается.
Пользователя все устраивает и он спокойно себе использует дистрибутив некоторое время. Через несколько лет пользователь хочет установить новую версию какого-то приложения, например, браузера и обнаруживает, что он не может этого сделать.
Почему? Да потому что его дистрибутив устарел. Просто-напросто для установки приложения нужны новые версии библиотек, а для их установки нужно обновить уже установленные пакеты. Иногда процесс настолько масштабный, что приходится обновлять дистрибутив. А ведь мы знаем, что пользователь не хочет этого делать по ряду причин, да и это опасно: система может быть разрушена из-за нарушения связей между программами и библиотеками.
Вторая ситуация. Пусть у пользователя самая новая версия дистрибутива (на данный момент – это 18.10) – чтобы никто не упрекнул нас в надуманности ситуации. Мы знаем, что у традиционных пакетов есть зависимости и конфликты. Иногда нельзя установить то или иное приложение, поскольку его библиотеки конфликтуют с библиотеками уже установленными в системе.
Обе проблемы настолько обширны, что разработчики Ubuntu изобрели снапы. Все мы знакомы с понятием пакета. Пакет содержит саму программу, а также различные вспомогательные файлы – документацию, ресурсы (картинки, например), файлы локализации, какие-то сценарии и т.д. Но пакет не содержит всего, что нужно для работы этой программы в системе. Например, если программе для работы нужна библиотека GL, то просто в пакете "прописывается" зависимость – нужно установить такой-то пакет для работы этого пакета. При установке программы менеджер пакетов (apt) производит разрешение зависимостей – устанавливает все необходимые для работы этой программы пакеты.
С одной стороны, такой подход позволяет экономить место на диске. Ведь одну и ту же библиотеку не нужно устанавливать несколько раз. С другой стороны, это порождает уже описанные ранее проблемы.
Снап – это решение всей головной боли, как пользователя, так и разработчика приложения. Снап можно считать таким пакетом, в котором содержится не только программа, но и все необходимые для ее работы библиотеки. Получается, что все, что нужно для работы программы содержится в снапе.
Не нужно бояться, что система превратится в свалку, где перемешаны старые и новые версии библиотек. Снапы устанавливаются в отдельной папке в виде защищенного от записи образа. Изменения, которые должен внести снап в файловую систему (например, в каталог /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
Теперь вы знаете, для чего используются снапы и что это вообще такое. А вот обновлять систему или использовать снапы – каждый решает сам.