Що таке snap та як ними керувати

Snap – це система розповсюдження програм для Linux, створена компанією Canonical. Вона забезпечує зручний спосіб встановлення, оновлення та управління застосунками, гарантуючи сумісність із різними дистрибутивами та підвищуючи безпеку завдяки ізоляції. Нижче розглянемо як працює система, її складові, а також основні переваги й недоліки порівняно з традиційними deb-пакетами.

Що таке snap-пакети?

Для користувача Linux, snap – це, в першу чергу, формат пакетів, за допомогою яких розповсюджуються програми.

Snap-пакети – це самодостатні архіви, що містять застосунок разом з усіма необхідними бібліотеками та залежностями. Це дозволяє програмі працювати незалежно від конфігурації системи, що значно спрощує розповсюдження програмного забезпечення та знижує ризики їх несумісності з дистрибутивом.

Основні компоненти системи snap

Окрім snap-пакетів для роботи системи потрібні ще декілька компонентів:

  1. snapd – це сервіс-демон, який відповідає за управління snap-пакетами. Він встановлює, оновлює та видаляє пакети, а також забезпечує ізольоване середовище (sandbox), що підвищує безпеку роботи застосунків.
  2. Джерела snap-пакетів — репозиторії, звідки пакети можуть завантажуватися. Основним є Snap Store, однак адміністратори або організації можуть використовувати власні сховища для розповсюдження snap-додатків.

Рівень ізоляції

Snap-пакети ізольовані від системи, але можуть отримувати доступ до її ресурсів через інтерфейси, дозволи, змінні середовища та спеціальні механізми безпеки. Управління цим процесом здійснюється через snapd, який контролює виконання та взаємодію snap-додатків.

Рівень ізоляції snap-пакету визначає ступінь його відокремлення від системи користувача. Розробники або пакувальники snap-пакетів можуть налаштовувати рівень ізоляції, щоб загалом визначити, наскільки широкий доступ до системних ресурсів необхідний застосунку.

Для опублікованих snap-пакетів існує два рівні ізоляції:

  • Strict (жорстка ізоляція) – використовується більшістю snap-пакетів. Такі пакети працюють у повній ізоляції, маючи лише мінімальний рівень доступу, який вважається безпечним за замовчуванням. Внаслідок цього snap-пакети не можуть отримувати доступ до файлів, мережі, процесів чи інших системних ресурсів без явного запиту на доступ через спеціальні інтерфейси.
  • Classic (класична ізоляція) – надає доступ до системних ресурсів так само, як традиційні пакети. Щоб запобігти зловживанням, публікація пакету з класичною ізоляцією потребує ручного схвалення, а для його встановлення необхідно використовувати параметр –classic у командному рядку.

Є ще один режим корисний під час процесу розробки:

  • Devmode (режим розробки) – спеціальний режим для розробників і створювачів snap-пакетів. Snap у цьому режимі працює як строго ізольований пакет, але має повний доступ до системних ресурсів. При цьому він генерує налагоджувальні повідомлення, що допомагають виявити відсутні інтерфейси. Для встановлення snap-пакету в цьому режимі використовується аргумент –devmode.

Snap-пакети в режимі devmode:

  • Не можуть бути опубліковані у стабільному каналі.
  • Не відображаються в результатах пошуку.
  • Не оновлюються автоматично.

Як працює система snap

Розглянемо поверхнево як працює система snap на етапах встановлення та запуску програм:

Встановлення snap-додатка

Коли ви запускаєте команду для встановлення (наприклад, sudo snap install vlc), snapd надсилає запит до онлайн-репозиторію, де розміщені snap-пакети (Snap Store). Він перевіряє, чи існує потрібна версія додатка, і відправляє метадані разом з посиланням на сам пакет.

Після підтвердження наявності пакету, snapd завантажує його. Snap-пакет являє собою єдиний файл, який містить усі необхідні компоненти: виконувані файли, бібліотеки, ресурси та конфігураційні файли. Завантаження може відбуватися з використанням різних каналів оновлень (stable, candidate, beta, edge), що дозволяє встановити потрібну версію додатка.

Після завантаження система перевіряє цілісність пакету, щоб упевнитися, що файл не пошкоджений і не був змінений. Цей етап важливий для забезпечення безпеки, адже програма повинна відповідати заявленим характеристикам та не містити шкідливого коду.

Після того snap-пакет розпаковується в спеціально відведену директорію (як правило, це частина файлової системи, що виділена для snap-додатків /var/lib/snapd/snaps/) і монтується як файлова система squashfs. Під час розпакування встановлюються всі компоненти додатка. Також snapd налаштовує символьні посилання, які дозволяють системі “бачити” додаток, як звичайну програму, що полегшує її запуск.

Залежно від типу ізоляції (strict, devmode або classic), snapd застосовує відповідні політики безпеки.

Після встановлення snap-додаток реєструється в системному меню, і створюються всі необхідні ярлики та асоціації для зручного запуску програми користувачем.

Запуск snap-додатка

Коли ви запускаєте snap-додаток (наприклад, через меню чи з командного рядка), система звертається до snapd для ініціації процесу запуску.

Snapd створює або підтверджує існування ізольованого середовища (sandbox), в якому буде працювати додаток. Це може бути контейнер або подібний механізм ізоляції, який забезпечує контроль доступу до системних ресурсів.

Перед запуском додатку snapd встановлює всі необхідні змінні середовища, посилається на потрібні бібліотеки (що знаходяться в snap-пакеті) та налаштовує права доступу відповідно до режиму ізоляції.

Після налаштування середовища запускається основний процес додатку. Snapd стежить за цим процесом, забезпечуючи, наприклад, автоматичне оновлення чи перезапуск у разі збоїв, якщо така функціональність передбачена.

Незважаючи на ізоляцію, snap-додаток може взаємодіяти із певними ресурсами системи, якщо на це є дозвіл через політику безпеки. Це можуть бути, наприклад, доступ до файлів користувача, мережеві з’єднання або використання пристроїв, якщо це дозволено налаштуваннями.

Автоматичні оновлення

Сервіс snapd регулярно перевіряє наявність оновлень для встановлених snap-пакетів. Якщо знаходиться нова версія, система автоматично завантажує та встановлює її, що гарантує користувачеві актуальність програмного забезпечення.

Незалежність від системних бібліотек

Оскільки snap-пакети включають усі необхідні залежності, вони не залежать від специфічних версій бібліотек, встановлених у системі. Це дозволяє одному пакету працювати на різних дистрибутивах Linux без додаткової налаштування.

Якщо бути точним, snap-пакети зазвичай включають всі необхідні залежності всередині самого пакету, але іноді можуть використовувати й додаткові залежності, які не включені безпосередньо в пакет. Це може бути необхідно для розширених функцій або сумісності з іншими програмами, або для зменшення ваги окремого пакету. В таких випадках через систему управління правами snapd можуть бути надані додаткові дозволи для доступу до зовнішніх бібліотек або ресурсів, що не входять в сам пакет.

Канали (Channels) в Snap

Канали в Snap — це механізм, який дозволяє керувати різними версіями пакету, які можуть бути доступні для користувачів. Канали дають можливість розробникам публікувати різні варіанти одного і того ж пакету в залежності від його стабільності, цілей і потреб користувачів. Вони дають більше контролю над тим, яка версія пакету буде доступна в конкретний момент.

Основні типи каналів:

  • Stable (Стабільний канал): Канал, де зберігаються стабільні та тестовані версії пакету, які рекомендовані для звичайних користувачів. За умовчанням, коли ви встановлюєте пакет без вказання каналу, він буде встановлений з цього каналу.
  • Candidate (Кандидат): Канал для останніх версій, які знаходяться на фінальній стадії тестування. Пакети в цьому каналі можуть містити нові функції, але вони можуть бути менш стабільними порівняно зі стабільним каналом.
  • Beta (Бета): Канал для тестових версій пакету, що містять нові функції або виправлення, які можуть бути ще не стабільними. Призначений для користувачів, які хочуть отримати нові функції раніше, але готові до можливих помилок.
  • Edge: Канал для найновіших, розробницьких версій пакету. Ці версії пакету є найбільш експериментальними та можуть містити значні помилки, але вони дають найшвидший доступ до нових функцій.

Канали дозволяють працювати з різними версіями одного пакету, наприклад, LTS (Long-Term Support) версії Node.js або інші версії програм.

Користувачі можуть вибрати відповідний канал в залежності від того, чи хочуть вони стабільність або доступ до нових функцій.

Де використовуються snap-пакети

Snap-пакети знаходять застосування у багатьох сферах:

  • Настільні застосунки: Різноманітні редактори коду, офісні програми, графічні редактори та інше програмне забезпечення.
  • Серверні застосунки: Деякі серверні рішення та утиліти доступні як snap-пакети, що спрощує їхнє розгортання.
  • Пристрої Інтернету Речей (IoT): Snap-пакети використовують і у вбудованих системах завдяки їхній універсальності та ізольованості.

Плюси та мінуси snap-пакетів

Snap не є традиційною системою управління пакетами в Linux (й не замінює їх), тому її часто порівнюють із форматами deb та rpm. У цьому порівнянні можна виділити основні переваги та недоліки snap-пакетів.

Плюси snap-пакетів

  • Простота встановлення: Як правило, всі залежності включені в пакет, що знижує ризик конфліктів і проблем сумісності.
  • Автоматичні оновлення: Snapd забезпечує постійне оновлення застосунків без додаткових зусиль з боку користувача.
  • Універсальність: Один і той же snap-пакет можна встановити на різних дистрибутивах Linux.
  • Підвищена безпека (strict confinement): За замовчуванням застосунки працюють в ізольованому середовищі, що обмежує їх доступ до критичних системних ресурсів.

Мінуси snap-пакетів

  • Розмір пакетів: Оскільки всі залежності включені в snap-пакет, їх розмір може бути значно більшим, ніж у традиційних deb-пакетів.
  • Швидкість запуску: Додатковий рівень ізоляції може уповільнити запуск деяких застосунків.
  • Обмежена інтеграція з системою: У режимі strict застосунки можуть мати обмеження у доступі до системних ресурсів, що іноді ускладнює їх використання. Використання режиму –classic знімає ці обмеження, але зменшує рівень безпеки.

Оскільки режим classic дозволяє застосункам отримувати майже повний доступ до системи, тому встановлювати такі пакети слід лише з довірених джерел.

Підтримка Snap у різних дистрибутивах Linux

Snap-пакети офіційно підтримуються Canonical та широко використовуються в дистрибутивах на базі Ubuntu. Проте підтримка в інших дистрибутивах варіюється — деякі інтегрують Snap за замовчуванням, інші дозволяють його встановити вручну, а деякі взагалі відмовилися від Snap.

Дистрибутиви з вбудованою підтримкою Snap

Ці системи постачаються зі встановленим snapd та підтримують Snap “з коробки”:

  • Ubuntu (починаючи з 16.04)
  • Ubuntu-based дистрибутиви (Kubuntu, Xubuntu, Lubuntu, Ubuntu MATE тощо)
  • Zorin OS
  • Pop!_OS
  • KDE Neon

У цих дистрибутивах Snap встановлений за замовчуванням, а деякі програми доступні тільки у форматі Snap (наприклад, Firefox у Ubuntu 22.04+).

Дистрибутиви з можливістю встановлення Snap

Snap не встановлений за замовчуванням, але його можна легко додати вручну:

  • Debian
  • Fedora
  • Arch Linux
  • Manjaro
  • OpenSUSE
  • Gentoo

Дистрибутиви, які не підтримують Snap або обмежують його

Деякі дистрибутиви відкрито відмовилися від Snap через політику Canonical щодо централізованого Snap Store та обмежену гнучкість:

  • Linux Mint – вимкнув Snap за замовчуванням через примусове використання Snap у Ubuntu. Його можна встановити вручну, але потрібно спочатку дозволити встановлення, видаливши обмеження:
    sudo rm /etc/apt/preferences.d/nosnap.pref
    sudo apt update
    sudo apt install snapd
  • Elementary OS – орієнтується на Flatpak, хоча Snap можна встановити вручну.
  • Devuan – як і Linux Mint, блокує Snap за замовчуванням.
  • Void Linux – не підтримує snapd через власну філософію незалежності.

Основні команди для роботи зі snap-пакетами

Розглянемо основні команди для керування snapd та snap-пакетами.

Встановлення та налаштування Snap

Перед використанням Snap потрібно переконатися, що snapd встановлений. Щоб перевірити це:

snap version

Команда виведе версію snapd, клієнта та середовища виконання.

Встановлення snapd (якщо відсутній) для різних дистрибутивів:

# Debian, Ubuntu
sudo apt install snapd

# Fedora
sudo dnf install snapd

# Arch Linux
sudo pacman -S snapd
sudo systemctl enable --now snapd

# OpenSUSE
sudo zypper install snapd
sudo systemctl enable --now snapd

Увімкнення Snap (для Arch, OpenSUSE, Manjaro)

sudo systemctl start snapd
sudo systemctl enable snapd

Пошук та встановлення Snap-пакетів

Пошук доступного пакету в Snap Store

snap find <назва>

Наприклад, шукаємо VLC:

snap find vlc

Встановлення Snap-пакету

sudo snap install <назва>

Приклад:

sudo snap install vlc

Встановлення з аргументами

–classic – зняття ізоляції для традиційного доступу до системи (наприклад, для VS Code).

sudo snap install code --classic

–devmode – режим розробки (без обмежень, але з відладкою).

sudo snap install <пакет> --devmode

Встановлення конкретної версії пакету

sudo snap install <пакет> --channel=<версія>

Приклад встановлення LTS-версії Node.js:

sudo snap install node --channel=18/stable

Управління встановленими Snap-пакетами

Перегляд списку встановлених Snap-пакетів

snap list

Перегляд деталей встановленого пакету

snap info <пакет>

Приклад:

snap info vlc

Оновлення всіх snap-пакетів

sudo snap refresh

Оновлення конкретного пакету

sudo snap refresh <пакет>

Приклад:

sudo snap refresh vlc

Переключення на іншу версію пакету

sudo snap refresh <пакет> --channel=<версія>

Наприклад, оновлюємо Node.js до версії 20 LTS:

sudo snap refresh node --channel=20/stable

Відкат до попередньої версії Snap-пакету

sudo snap revert <пакет>

Приклад:

sudo snap revert vlc

Керування доступом та дозволами

Перегляд доступних інтерфейсів для snap-пакету

snap connections <пакет>

Наприклад, для VLC:

snap connections vlc

Підключення інтерфейсу вручну

sudo snap connect <пакет>:<інтерфейс> :<інтерфейс>

Приклад: надаємо VLC доступ до домашньої папки:

sudo snap connect vlc:home

Відключення інтерфейсу

sudo snap disconnect <пакет>:<інтерфейс>

Приклад:

sudo snap disconnect vlc:home

Запуск Snap-пакетів

Запуск встановленого Snap-додатку

snap run <пакет>

Приклад запуску VLC:

snap run vlc

Або просто ввести назву:

vlc

Видалення Snap-пакетів

Видалення конкретного Snap-пакету

sudo snap remove <пакет>

Приклад:

sudo snap remove vlc

Зазвичай після видалення пакету залишаються його конфігураційні файли. Їх можна видалити командою:

rm -rf ~/snap/<пакет>

Приклад для VLC:

rm -rf ~/snap/vlc

Повне видалення Snap з системи

Якщо потрібно повністю позбутися Snap:

Для Debian/Ubuntu:

sudo apt purge snapd

Додатково можна очистити залишки

rm -rf ~/snap /var/snap /var/lib/snapd /var/cache/snapd /usr/lib/snapd

Для Fedora:

sudo dnf remove snapd
sudo rm -rf ~/snap /var/snap /var/lib/snapd /var/cache/snapd /usr/lib/snapd

Для Arch Linux:

sudo pacman -Rns snapd
sudo rm -rf ~/snap /var/snap /var/lib/snapd /var/cache/snapd /usr/lib/snapd

Таким чином, ви зможете повністю видалити snap-систему зі свого комп’ютера.

Керування Snap-сервісами

Перевірка статусу snapd

systemctl status snapd

Запуск snapd (якщо зупинений)

sudo systemctl start snapd

Додавання Snap до автозавантаження

sudo systemctl enable snapd

Зупинка Snap (при потребі)

sudo systemctl stop snapd

Висновок

Snap-пакети — це зручний формат для розповсюдження програмного забезпечення в Linux, який забезпечує автоматичні оновлення та додатковий рівень безпеки завдяки ізоляції. Вони мають переваги в простоті встановлення та універсальності, але можуть мати більший розмір і впливати на швидкість запуску програм.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *