snap — что это и зачем
snap — система упаковки и установки приложений от Canonical, разработанная как альтернатива apt. Каждый snap — самодостаточный пакет со своими зависимостями, изолированный от системы через AppArmor. Используется на Ubuntu для Firefox, Chromium, microk8s и многих desktop-приложений.
snap
snap — система упаковки и установки приложений от Canonical, разработанная как альтернатива apt. Каждый snap — самодостаточный пакет со своими зависимостями, изолированный от системы через AppArmor. Используется на Ubuntu для Firefox, Chromium, microk8s и многих desktop-приложений.
Что это в одном абзаце
Идея snap простая: вместо того, чтобы программа полагалась на конкретные версии библиотек в системе (как .deb через apt), snap несёт все зависимости внутри себя. Это контейнер с приложением, который можно установить на любой Ubuntu, Debian, Fedora и Arch — везде получится одинаковая работающая программа. Платой становится больший размер пакетов и скорость запуска.
sudo snap install firefox # поставить snap
sudo snap refresh # обновить все snap-ы
sudo snap list # список установленных
sudo snap remove firefox # удалить
sudo snap info firefox # подробности (каналы, ревизии)
snap-ы качаются из централизованного каталога Snap Store (snapcraft.io), управляемого Canonical.
Из чего состоит экосистема snap
snapd— фоновый демон, который скачивает, ставит и обновляет snap-ы. Идёт в Ubuntu по умолчанию.snap— CLI-утилита для управления.- Snap Store — каталог пакетов на
snapcraft.io. Любой может опубликовать snap. - Каналы (channels) — ветки разработки:
stable/candidate/beta/edge. По умолчанию ставитсяstable. - Snapcraft — инструмент для разработчиков, упаковывающий приложение в snap (yaml-конфиг, рецепт сборки).
Установленные snap-ы лежат в /snap/<имя>/<ревизия>/ как смонтированные squashfs-образы. После каждого обновления старая ревизия некоторое время хранится — для отката (sudo snap revert <name>).
Чем snap отличается от apt
| Свойство | apt | snap |
|---|---|---|
| Источник пакетов | репозитории Debian/Ubuntu | Snap Store (Canonical) |
| Изоляция | нет | AppArmor + cgroups |
| Зависимости | общие системные | свои внутри пакета |
| Размер пакета | компактный | крупный (десятки–сотни МБ) |
| Скорость запуска | мгновенно | заметная задержка |
| Автообновления | через unattended-upgrades | принудительные, по умолчанию |
| Привязка к релизу Ubuntu | да | нет |
| Подходит для серверов | ✅ | ⚠️ (не всегда) |
Главные плюсы snap:
- Универсальность — один пакет работает на 24.04, 22.04, 20.04 и даже Fedora.
- Изоляция — snap не может беспрепятственно лезть в
~/Documentsили сеть — нужны явные интерфейсы (home,network,removable-media). - Свежесть — Firefox в snap обновляется быстрее, чем в apt-репозиториях LTS.
- Откат — старые ревизии хранятся,
snap revertвозвращает прошлую версию одной командой.
Минусы:
- Размер диска — каждый snap несёт свои библиотеки, плюс хранит несколько ревизий.
- Скорость холодного старта — squashfs-образ нужно смонтировать, AppArmor-профиль загрузить.
- Принудительные обновления — это политика Canonical: snap-ы обновляются автоматически, без полноценного off-switch. Можно отложить через
snap refresh --hold, но не насовсем. - Сообщество — часть Linux-комьюнити критикует snap за централизацию (один Snap Store, контролируемый Canonical) — отсюда популярность flatpak как децентрализованной альтернативы.
snap vs flatpak
flatpak — третья пакетная система на Ubuntu. Концептуально похожа на snap (изоляция, самодостаточные пакеты), но:
- flatpak децентрализован — по умолчанию каталог Flathub, но можно подключать любые «remote»-репозитории.
- flatpak ориентирован на desktop — для серверных демонов почти не используется.
- flatpak не ставится в Ubuntu по умолчанию — нужен
sudo apt install flatpak. - Изоляция — через bubblewrap, не AppArmor.
На Ubuntu всё чаще ставят оба: snap для системного (Firefox, Chromium) + flatpak для прочего desktop-софта (часто более «свежего» в Flathub).
Когда snap уместен на сервере
Большинство серверного админства использует snap избирательно:
microk8s— самый популярный snap для серверов: лёгкий Kubernetes одной командойsudo snap install microk8s --classic.certbot— рекомендованный официально способ установки сертбота (apt-репозиторий устарел).lxd— управление контейнерами LXC.docker— есть snap-вариант, но в проде обычно ставят из официального apt-репозитория Docker.
Когда snap не ставят на сервер: для production-демонов с предсказуемым SLA. Принудительные обновления + неожиданные изменения профилей AppArmor — риск, который не оправдан, если есть apt-альтернатива.
Грабли snap
/homeснаружи snap-ов — snap-приложения по умолчанию видят только~/snap/<name>/. Чтобы открыть файл из другого места, нужно либо переместить его, либо разрешить интерфейсhome(sudo snap connect <name>:home).- Запуск из контейнера/Docker — snap почти невозможно запустить внутри контейнера: snapd требует systemd-окружения с cgroups.
- Принудительные обновления — даже если ваш скрипт деплоя ожидает фиксированную версию microk8s, snap может обновить её без спроса. Решение —
sudo snap refresh --hold microk8s. - Loop-устройства — каждый smonted snap появляется как
/dev/loopNи вdf. Это нормально, но забивает вывод.
Частые вопросы
Что такое snap в Ubuntu
Это система упаковки приложений в самодостаточные пакеты, разработанная Canonical. snap-пакет несёт все зависимости внутри себя и работает изолированно через AppArmor. На Ubuntu используется по умолчанию для Firefox, Chromium, microk8s и многих других программ — параллельно с обычным apt.
Чем snap отличается от apt
apt ставит пакеты .deb в систему, разделяя зависимости с другими пакетами; snap ставит самодостаточный контейнер с собственными зависимостями. Snap изолирован, обновляется автоматически, работает на разных дистрибутивах, но занимает больше места и медленнее стартует. apt быстрее, компактнее и привязан к релизу Ubuntu.
Где snap-приложения хранят файлы
Установленные snap-ы лежат в /snap/<имя>/<ревизия>/ как смонтированные squashfs-образы. Пользовательские данные snap-приложений — в ~/snap/<имя>/<ревизия>/. Чтобы snap-программа увидела ваш ~/Documents, нужно подключить интерфейс home: sudo snap connect <name>:home.
Можно ли отключить автообновления snap
Полностью — нет, политика Canonical не позволяет. Можно отложить: sudo snap refresh --hold (на всё) или sudo snap refresh --hold <package> (на конкретный пакет, до 90 дней). Можно установить расписание: sudo snap set system refresh.timer=02:00-04:00,sat.
Как удалить snap полностью с Ubuntu
sudo apt purge snapd удалит сам демон и снимет все установленные snap-ы. Для чистоты — добавьте /etc/apt/preferences.d/nosnap.pref с Pin: package snapd / Pin-Priority: -1, чтобы snap не вернулся при следующих обновлениях. Учтите: на чистой Ubuntu Firefox без snap придётся ставить из стороннего репозитория Mozilla.
snap или flatpak — что лучше
Для системного ПО на Ubuntu — snap (он встроен, и Canonical следит за каталогом). Для desktop — часто flatpak: каталог Flathub шире, обновления свежее, изоляция на bubblewrap некоторым кажется проще. На практике на Ubuntu Desktop ставят оба и выбирают пакет по доступности в каталоге.
Что почитать
- apt — традиционный пакетный менеджер Ubuntu, антипод snap. Для серверов почти всегда выбирают его.
- демон в Linux — snapd работает как фоновой демон через systemd; знание systemd помогает в отладке проблем с обновлениями.
- apt update и apt upgrade — практический гайд по управлению apt-пакетами; параллельно с ним работают и snap-ы.