Snap (Русский)
Состояние перевода: На этой странице представлен перевод статьи Snap. Дата последней синхронизации: 9 октября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Snap — это система развёртывания программного обеспечения и управления пакетами. Пакеты называются «snaps», а инструмент для их использования — «snapd», который работает в различных дистрибутивах Linux и, следовательно, позволяет развёртывать программное обеспечение, не зависящее от дистрибутива. Изначально система Snap была разработана и создана компанией Canonical.
snapd — это REST API демон для управления snap-пакетами. Пользователи могут взаимодействовать с ним с помощью клиента snap, входящего в состав этого же пакета.
Snap-пакеты могут быть ограничены с помощью AppArmor, который по умолчанию доступен в официальных ядрах. Шаги по включению AppArmor в системе описаны в соответствующих вики-статьях.
Установка
Совет: snapd устанавливает скрипт в /etc/profile.d/ для экспорта путей в исполняемым файлам, входящим в snap-пакеты. Для того чтобы эти изменения вступили в силу потребуется перезагрузка.
Если вы используете AppArmor, запустите и включите службы apparmor.service и snapd.apparmor.service .
Примечание: Если AppArmor не включен в вашей системе, то все snap-пакеты будут работать в режиме devel, то есть они будут иметь такой же неограниченный доступ к вашей системе, как и приложения, установленные из репозиториев Arch Linux.
Настройка
Чтобы демон snapd автоматически запускался, когда snap обращается к нему, запустите и/или включите юнит snapd.socket .
Использование
Для управления пакетами используется утилита snap.
Поиск
Для поиска пакетов, доступных для установки используйте команду find:
$ snap find критерий_поиска
Установка пакетов
Установить snap-пакет можно с помощью команды:
# snap install имя_пакета
Установка требует root привилегий. Установка с правами пользователя на данный момент невозможна. При установке snap загружается в /var/lib/snapd/snaps и монтируется в /var/lib/snapd/snap/имя_пакета .
Кроме того, создаются также юнит-файлы для каждого snap-пакета и добавляются в /etc/systemd/system/multi-user.target.wants/ , для того чтобы snap-пакеты монтировались при каждом запуске системы. Вы можете просмотреть список установленных пакетов командой:
$ snap list
Вы также можете устанавливать snap-пакеты локально, с жесткого диска:
# snap install --dangerous /путь/к/пакету/snap
Обновление пакетов
Для того чтобы обновить snap-пакеты выполните:
# snap refresh
Пакеты обновляются автоматически в соответствии с настройкой refresh.timer .
Посмотреть время последнего/следующего обновления можно с помощью команды:
# snap refresh --time
Изменение времени обновления, например, дважды в день:
# snap set core refresh.timer=0:00~24:00/2
Удаление пакетов
Для того чтобы удалить пакет выполните:
# snap remove snapname
Советы и рекомендации
Классические snap-пакеты
Некоторые пакеты (например, Skype и Pycharm) используют классический уровень ограничения (classic confinement). Однако он требует наличия каталога /snap , который не соответствует FHS. Пакет snapd не поставляет этот каталог, но на его месте можно создать символическую ссылку на /var/lib/snapd/snap , чтобы установка классических snap-пакетов стала возможна:
# ln -s /var/lib/snapd/snap /snap
Ограничение доступа
При использовании AppArmor snapd сгенерирует такие же профили для snap-пакетов, что и на Ubuntu. Парсер AppArmor достаточно умён, чтобы отбросить правила, которые ещё не поддерживаются основным ядром.
Чтобы проверить, что базовое ограничение доступа работает, установите snap-пакет hello-world. Затем выполните следующее:
$ hello-world.evil
Hello Evil World! This example demonstrates the app confinement You should see a permission denied error next /snap/hello-world/27/bin/evil: 9: /snap/hello-world/27/bin/evil: cannot create /var/tmp/myevil.txt: Permission denied
AppArmor должен отказать в доступе и записать событие в журнал:
# dmesg
. [ +0.000003] audit: type=1327 audit(1540469583.966:257): proctitle=2F62696E2F7368002F736E61702F68656C6C6F2D776F726C642F32372F62696E2F6576696C [ +12.268939] audit: type=1400 audit(1540469596.236:258): apparmor="DENIED" operation="open" profile="snap.hello-world.evil" name="/var/tmp/myevil.txt" pid=10835 comm="evil" requested_mask="wc" denied_mask="wc" fsuid=1000 ouid=1000 [ +0.000006] audit: type=1300 audit(1540469596.236:258): arch=c000003e syscall=2 success=no exit=-13 a0=55d991ba6bc8 a1=241 a2=1b6 a3=55d991ba6be0 items=0 ppid=31349 pid=10835 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts2 ses=3 comm="evil" exe="/bin/dash" subj==snap.hello-world.evil (enforce) .
Если отказа не видно, проверьте, что профили загружены:
# aa-status | grep snap.hello-world
snap.hello-world.env snap.hello-world.evil snap.hello-world.hello-world snap.hello-world.sh
Также можно проверить, какие функции песочницы доступны в системе согласно snapd:
$ snap debug sandbox-features
apparmor: kernel:caps kernel:domain kernel:file kernel:mount kernel:namespaces kernel:network_v8 kernel:policy kernel:ptrace kernel:query kernel:rlimit kernel:signal parser:unsafe policy:default support-level:partial confinement-options: devmode dbus: mediated-bus-access kmod: mediated-modprobe mount: freezer-cgroup-v1 layouts mount-namespace per-snap-persistency per-snap-profiles per-snap-updates per-snap-user-profiles stale-base-invalidation seccomp: bpf-argument-filtering kernel:allow kernel:errno kernel:kill_process kernel:kill_thread kernel:log kernel:trace kernel:trap
Решение проблем
Нечитабельный текст
Если вместо нормальных символов отображаются квадратики, попробуйте очистить кэш шрифтов:
# rm -f /var/cache/fontconfig/* $ rm -f ~/.cache/fontconfig/* # fc-cache -r -v
Snapctl также хранит внутренние кэши для каждого snap-пакета отдельно, которые тоже нужно очищать. Сначала найдите их с помощью команды:
$ find ~/snap/ -wholename '*/.cache/fontconfig'
. /home/darth_vader/snap/mailspring/common/.cache/fontconfig . /home/darth_vader/snap/authy/common/.cache/fontconfig . /home/darth_vader/snap/icedrive/common/.cache/fontconfig . /home/darth_vader/snap/discord/common/.cache/fontconfig . /home/darth_vader/snap/bitwarden/common/.cache/fontconfig
Затем либо удалите их по отдельности, либо используйте этот простой цикл.
Наконец, перезапустите сеанс.
Error: cannot mount squashfs
Snap-пакеты используют файловую систему SquashFS. Если случается подобная ошибка:
error: system does not fully support snapd: cannot mount squashfs image using "squashfs"
проверьте, загружен ли модуль ядра SquashFS:
$ lsmod
Module Size Used by squashfs xxxxx x .
Совет: Если snapd был установлен только что — возможно, нужно перезагрузиться перед установкой snap-пакетов.
Помощь
Почтовая рассылка Arch Linux и другие официальные каналы поддержки Arch Linux не являются подходящим местом для запроса помощи по snap-пакетам на Arch Linux. Подходящим местом для запроса поддержки является Snapcraft forum.
Смотрите также
- Официальный сайт
- Репозиторий на GitHub
- Статья на Ars Technica (2016-06) о том, что «Ubuntu snaps» становятся доступными для Arch и других дистрибутивов
Retrieved from «https://wiki.archlinux.org/index.php?title=Snap_(Русский)&oldid=751890»
Snap: что это такое и как его установить на Linux

Если вы пользуетесь Linux, то наверняка знаете, что для установки программ на эту операционную систему существуют разные форматы пакетов. Например, на Ubuntu вы можете использовать apt или dpkg для установки deb-пакетов, на Fedora — dnf или rpm для установки rpm-пакетов. Каждый из этих форматов имеет свои преимущества и недостатки, но все они обладают одной общей проблемой — зависимостями.
Зависимости — это дополнительные библиотеки или компоненты, которые необходимы для работы программы. Если вы хотите установить программу из пакета, то вам нужно также установить все ее зависимости. Это может быть не так просто, потому что разные программы могут требовать разные версии одних и тех же библиотек. Кроме того, зависимости могут конфликтовать друг с другом или с системой, вызывая ошибки или нестабильность.
Чтобы решить эту проблему, в 2016 году компания Canonical, разработчик Ubuntu, представила новый формат пакетов для Linux — snap. Snap-пакеты — это контейнеризованные приложения, которые включают в себя все необходимые зависимости и работают изолированно от системы. Snap-пакеты можно устанавливать и обновлять на любом дистрибутиве Linux, поддерживающем snapd, не беспокоясь о совместимости или безопасности.
В этой статье мы расскажем вам подробнее о snap-пакетах, их особенностях, преимуществах и способах установки.
Компоненты snap-экосистемы
Существует пять основных компонентов в snap-экосистеме:
Snapd: это демон snap, который работает в фоновом режиме и управляет snap-пакетами на Linux-системе. Он отвечает за установку, обновление, удаление и запуск snap-пакетов, а также за настройку разрешений и конфигурации для них.
Snap: это командно-строчный интерфейс, который используется для установки и управления snap-пакетами на Linux-системе. С его помощью вы можете поискать, скачать, установить, обновить, удалить или запустить snap-пакеты.
Каналы: это способ определения, какая версия snap-пакета будет установлена и проверена на обновления. Каждый snap-пакет может иметь несколько каналов, например stable, candidate, beta или edge. Канал stable содержит самую стабильную и проверенную версию пакета, а канал edge — самую свежую и экспериментальную. Вы можете выбирать канал при установке или переключаться между ними в любое время.
Snap Store: это магазин приложений для Linux, где разработчики публикуют свои snap-пакеты, а пользователи Linux устанавливают их. Snap Store содержит тысячи snap-пакетов разных категорий, таких как разработка, игры, серверы и т.д. Вы можете просматривать и устанавливать snap-пакеты из Snap Store через веб-сайт или через графический интерфейс.
Snapcraft: это инструмент для разработки и публикации snap-пакетов. С его помощью вы можете легко создать свой собственный snap-пакет из существующего приложения или написать новое с нуля. Snapcraft поддерживает разные языки программирования и фреймворки, такие как Python, Java, Go, Node.js и т.д.
Преимущества snap-пакетов
Snap-пакеты имеют ряд преимуществ перед традиционными пакетами для Linux:
Автоматическое обновление: snap-пакеты обновляются автоматически в фоновом режиме по расписанию или по требованию. Вы всегда получаете последнюю версию приложения без необходимости проверять наличие обновлений или запускать команды для их установки. Если обновление по какой-то причине не удалось или вызвало проблемы, то snap-пакет автоматически откатывается к предыдущей стабильной версии, сохраняя ваши данные и настройки. Таким образом, вы не рискуете потерять работоспособность приложения или важную информацию.
Изоляция: snap-пакеты работают изолированно от системы и других приложений. Они не зависят от системных библиотек или компонентов, а содержат все необходимые зависимости внутри себя. Это означает, что вы можете устанавливать разные версии одного и того же приложения или разные приложения, использующие одни и те же библиотеки, без конфликтов или ошибок. Кроме того, snap-пакеты имеют ограниченный доступ к системным ресурсам, таким как файлы, сеть, аудио и т.д. Вы можете контролировать, какие разрешения выдаются snap-пакетам, и изменять их по своему усмотрению.
Одинаковое поведение на разных дистрибутивах: snap-пакеты работают одинаково на любом дистрибутиве Linux, поддерживающем snapd. Вы не нуждаетесь в специальных адаптациях или настройках для разных версий или вариантов Linux. Вы можете быть уверены, что ваше приложение будет работать так же, как вы ожидаете, на любом устройстве с Linux.
Удобство разработки и публикации: snap-пакеты легко создавать и публиковать с помощью инструмента Snapcraft. Вы можете использовать разные языки программирования и фреймворки для разработки своего приложения и упаковывать его в snap-пакет с минимальными изменениями. Вы можете также легко тестировать и отлаживать свое приложение в разных каналах и на разных дистрибутивах. Вы можете публиковать свое приложение в Snap Store, где оно будет доступно для миллионов пользователей Linux.
Недостатки snap-пакетов
Snap-пакеты также имеют некоторые недостатки, которые нужно учитывать:
Большой размер: snap-пакеты имеют больший размер, чем традиционные пакеты для Linux, потому что они содержат все зависимости внутри себя. Это может занимать больше места на диске и потреблять больше трафика при загрузке или обновлении.
Медленная скорость запуска: snap-пакеты запускаются медленнее, чем традиционные пакеты для Linux, потому что они требуют дополнительного времени для монтирования и проверки целостности. Это может быть заметно при запуске сложных или ресурсоемких приложений.
Ограниченный доступ к системным ресурсам: snap-пакеты имеют ограниченный доступ к системным ресурсам, таким как файлы, сеть, аудио и т.д. Это повышает безопасность и изоляцию, но также может приводить к проблемам с функциональностью или интеграцией с другими приложениями. Например, некоторые snap-пакеты могут не иметь доступа к вашему домашнему каталогу или к вашему принтеру. Вы можете изменять разрешения для snap-пакетов, но это может повысить риск нарушения безопасности или стабильности.
Возможные проблемы совместимости: snap-пакеты могут вызывать проблемы совместимости с некоторыми системными компонентами или другими приложениями. Например, некоторые snap-пакеты могут не работать правильно с AppArmor или SELinux, системами безопасности Linux. Также некоторые snap-пакеты могут не поддерживать темы или иконки, используемые в вашем рабочем окружении.
Способы установки snap-пакетов
Существует два основных способа установки snap-пакетов на Linux: через командную строку или через графический интерфейс Snap Store.
Чтобы установить snap-пакет через командную строку, вам нужно сначала убедиться, что на вашей системе установлен и запущен демон snapd. Snapd уже предустановлен и готов к работе на следующих дистрибутивах:
Ubuntu
Linux Mint
Debian
Fedora
Solus
Zorin OS
Для других дистрибутивов вам нужно установить snapd вручную, следуя инструкциям на этой странице.
После того, как вы установили и запустили snapd, вы можете использовать команду snap для установки и управления snap-пакетами.
Например, чтобы установить snap-пакет hello-world, вы можете выполнить следующую команду:
sudo snap install hello-world
Чтобы запустить установленный snap-пакет, вы можете использовать команду snap run или просто ввести имя пакета:
snap run hello-world
# или
hello-world
Чтобы обновить все установленные snap-пакеты, вы можете использовать команду snap refresh:
sudo snap refresh
Чтобы удалить snap-пакет, вы можете использовать команду snap remove:
sudo snap remove hello-world
Чтобы посмотреть список всех установленных snap-пакетов, вы можете использовать команду snap list:
Чтобы поискать доступные для установки snap-пакеты, вы можете использовать команду snap find:
Чтобы получить больше информации о конкретном snap-пакете, вы можете использовать команду snap info:
Чтобы изменить разрешения или конфигурацию для конкретного snap-пакета, вы можете использовать команды snap connect, snap disconnect или snap set:
Для более подробной информации о командах и опциях snap вы можете использовать команду snap help или посмотреть эту страницу.
Чтобы установить snap-пакет через графический интерфейс Snap Store, вам также нужно сначала убедиться, что на вашей системе установлен и запущен демон snapd.
Затем вам нужно установить приложение Snap Store, если оно еще не установлено на вашей системе. Вы можете скачать его из этой страницы или выполнить следующую команду:
sudo snap install snap-store
После того, как вы установили приложение Snap Store, вы можете запустить его из меню или панели задач вашего рабочего окружения. Вы увидите главный экран Snap Store, где вы можете просматривать и устанавливать snap-пакеты разных категорий, таких как разработка, игры, серверы и т.д.
Чтобы установить snap-пакет из Snap Store, вам нужно найти его по имени или ключевому слову в поисковой строке или выбрать его из списка рекомендованных или популярных пакетов. Затем вам нужно нажать на кнопку Установить и ввести свой пароль, если потребуется. После того, как установка завершится, вы можете запустить snap-пакет из меню или панели задач вашего рабочего окружения.
Чтобы обновить все установленные snap-пакеты из Snap Store, вам нужно нажать на значок обновления в правом верхнем углу экрана и подождать, пока все обновления будут загружены и установлены. Вы также можете обновлять отдельные snap-пакеты, выбирая их из списка установленных приложений и нажимая на кнопку Обновить.
Чтобы удалить snap-пакет из Snap Store, вам нужно выбрать его из списка установленных приложений и нажать на кнопку Удалить. Затем вам нужно подтвердить свое действие и ввести свой пароль, если потребуется.
Чтобы получить больше информации о конкретном snap-пакете из Snap Store, вам нужно выбрать его из списка доступных или установленных приложений и нажать на его название или значок. Вы увидите подробную страницу snap-пакета, где вы можете прочитать описание, отзывы, разрешения и другие детали.
В этой статье мы рассказали вам о snap-пакетах — новом формате пакетов для Linux, который предлагает ряд преимуществ по сравнению с традиционными пакетами. Snap-пакеты обеспечивают автоматическое обновление, изоляцию, одинаковое поведение на разных дистрибутивах и удобство разработки и публикации приложений для Linux.
Однако snap-пакеты также имеют некоторые недостатки, такие как большой размер, медленная скорость запуска, ограниченный доступ к системным ресурсам и возможные проблемы совместимости.
Если вы хотите попробовать snap-пакеты на своей Linux-системе, вы можете легко установить их через командную строку или через графический интерфейс Snap Store. Вы можете найти тысячи snap-пакетов разных категорий и жанров в Snap Store или создать свой собственный snap-пакет с помощью инструмента Snapcraft.
Мы надеемся, что эта статья была полезна и интересна для вас.
Snap-пакеты в Linux. Что это и как с ними работать

Пакетная система Snap была созданная компанией Canonical и изначально появилась в дистрибутиве Ubuntu Linux. Ее смысл заключается в том, что в пакет с приложением входит полный набор компонентов, необходимых для запуска данного приложения. Такие пакеты можно устанавливать в систему не заботясь о зависимостях, так как все зависимости уже включены в пакет.
Snap пакеты также называют «снапами».
Так как идея Snap пакетов имеет множество преимуществ, снапы быстро стали популярными и теперь используются не только в Ubuntu, но и в других дистрибутивах Linux: Debian, openSUSE, Arch Linux, Gentoo, Fedora и др.
Что такое Snap-пакет
Мы привыкли устанавливать приложения из DEB и RPM пакетов. Такие пакеты содержат саму программу, но не включают зависимости, которые требуются для запуска данного приложения.
Snap-пакет — это пакет, который помимо готовой сборки самого приложения, включает в себя все необходимые зависимости и может работать (почти) в любом дистрибутиве Linux.
Когда вы устанавливаете в систему приложение из Snap-пакета, то установка не влияет на другие пакеты и приложения. То есть такое приложение работает в своей «программной среде», но при этом оно может взаимодействовать с другими программами в системе.
Система управления Snap-пакетами поддерживает автоматическое обновление установленных в системе Snap-пакетов.
Установка поддержки Snap
Для управления Snap-пакетами в Linux используется демон snapd. Для его установки необходимо установить пакет — snapd.
Пользователь использует клиент snap для управления пакетами. Клиент snap входит в состав пакета snapd.
Установка поддержки Snap в Ubuntu Linux
В новых версиях Ubuntu поддержка Snap уже включена. Если это не так, то для установки Snap в Ubuntu Linux выполните команду:
sudo apt install snapd
Аналогично выполняется установка в Debian, Linux Mint, Elementary OS и других Ubuntu/Debian-based дистрибутивах.
Установка поддержки Snap в Fedora
sudo dnf install snapd sudo ln -s /var/lib/snapd/snap /snap
После установки выйдите и войдите в систему.
Установка поддержки Snap в Arch Linux
sudo yaourt -S snapd sudo systemctl enable --now snapd.socket
Работа со Snap-пакетами
Установка пакетов
Для установки пакетов используется команда snap install имя_пакета
Пример установки графического редактора GIMP из Snap-пакета:
snap install gimp
После ввода команды будет открыто окно для ввода пароля, так как требуются привилегии root-пользователя. Или используйте sudo:
sudo snap install gimp
Обновление пакетов
Для обновления пакетов используется команда snap refresh
Обновление всех установленных пакетов:
snap refresh
Обновление одного пакета:
snap refresh gimp
Удаление пакетов
Для удаления пакетов используется команда snap remove имя_пакета
snap remove gimp
Просмотр установленных пакетов
Для просмотра списка установленных пакетов используется команда snap list
snap list
Поиск пакетов
Для поиска пакетов используется команда snap find запрос
snap find gimp
Поиск выполняется не только по имени пакета, но и по описанию, поэтому можно использовать произвольный запрос:
snap find "photo editor"
Информация о пакете
Для получения информации о каком-либо пакете используется команда snap info имя_пакета
snap info gimp
Откат обновления
Если по каким-то причинам вы хотите отменить обновления, которые были выполнены над каким-либо Snap-пакетом, то можно использовать команду snap revert имя_пакета , чтобы вернуть пакет к предыдущей версии.
snap revert gimp
Временно отключить пакет
Чтобы временно отключить пакет используется команда snap disable имя_пакета
snap disable gimp
Чтобы снова сделать пакет доступным используется команда snap enable имя_пакета :
snap enable gimp
Запуск Snap-пакетов
Для запуска Snap-пакета можно использовать команду snap run имя_пакета
snap run gimp
Также приложения, установленные через Snap, можно запускать через главное меню вашего дистрибутива или лаунчер. Но данная функциональность может зависеть от конкретной системы.
Заключение
Мы кратко рассказали о том, что представляют из себя Snap-пакеты и как с ними работать. Snap-пакеты не единственные представители подобного типа пакетов в Linux. Также популярны пакеты AppImage и Flatpak.
Ubuntu snap – что это такое и с чем его едят?
Относительно недавно в Ubuntu появился новый инструмент — снапы (от англ. snap), но что это такое и как их использовать знают далеко не все пользователи.
Введение в снапы
Представим вполне реальную ситуацию. Пользователь устанавливает самую новую версию Ubuntu, пусть это будет версия 16.04 — именно в ней и появились впервые снапы по умолчанию. По определенным причинам пользователь отключает обновления. Такая ситуация не надумана. Мы все знаем, что после обновления системы Ubuntu, к сожалению, не всегда работает корректно и даже не всегда загружается.
Пользователя все устраивает и он спокойно себе использует дистрибутив некоторое время. Через несколько лет пользователь хочет установить новую версию приложения, например, браузера и обнаруживает, что он не может этого сделать.
Почему? Да потому что его дистрибутив устарел. для установки приложения нужны новые версии библиотек, а для их установки нужно обновить уже установленные пакеты. Иногда процесс настолько масштабный, что приходится обновлять дистрибутив. А ведь мы знаем, что пользователь не хочет этого делать по ряду причин, да и это опасно: система может быть разрушена нарушения связей между программами и библиотеками.
Вторая ситуация. Пусть у пользователя самая новая версия дистрибутива (на данный момент — это 18.10) — чтобы никто не упрекнул нас в надуманности ситуации. Мы знаем, что у традиционных пакетов есть зависимости и конфликты. Иногда нельзя установить то или иное приложение, поскольку его библиотеки конфликтуют с библиотеками уже установленными в системе.
Обе проблемы настолько обширны, что разработчики Ubuntu изобрели снапы. Все мы знакомы с понятием пакета. Пакет содержит саму программу, а также различные вспомогательные файлы — документацию, ресурсы (картинки, например), файлы локализации, сценарии Но пакет не содержит всего, что нужно для работы этой программы в системе. Например, если программе для работы нужна библиотека GL, то просто в пакете «прописывается» зависимость — нужно установить пакет для работы этого пакета. При установке программы менеджер пакетов (apt) производит разрешение зависимостей — устанавливает все необходимые для работы этой программы пакеты.
С одной стороны, такой подход позволяет экономить место на диске. Ведь одну и ту же библиотеку не нужно устанавливать несколько раз. С другой стороны, это порождает уже описанные ранее проблемы.
Снап — это решение всей головной боли, как пользователя, так и разработчика приложения. Снап можно считать таким пакетом, в котором содержится не только программа, но и все необходимые для ее работы библиотеки. Получается, что все, что нужно для работы программы содержится в снапе.