Використання пакетів snap у Linux дозволяє уникнути проблем із залежностями та збоїв у роботі програм. Спочатку розроблені для Ubuntu, тепер вони доступні для багатьох дистрибутивів Linux.
Що таке пакети Snap?
Встановлення програм у Linux раніше могло бути непростим завданням. Часто виявлялося, що необхідна бібліотека або залежність відсутня чи є застарілою. Пошук і встановлення відсутніх ресурсів могло призвести до конфліктів з іншими програмами, що вимагають інших версій тих самих бібліотек. Це створювало нескінченний цикл виправлень та поломок.
З часом ситуація покращилась завдяки сучасним системам керування пакетами, таким як apt, dnf та pacman. Проте, все ще виникають труднощі при встановленні різних версій однієї програми або при використанні програм, що конфліктують через різні версії бібліотек.
Одним із рішень цих проблем є системи пакування та розгортання додатків. Snap є одним з найпоширеніших. Він базується на системі Click, що бере свій початок з ініціативи Ubuntu Touch. Інші популярні системи – AppImage та Flatpak.
Ці системи об’єднують програму зі всіма її залежностями та вимогами в один стиснений файл. Програма запускається у своєрідному міні-контейнері, ізольованому від інших програм. Бібліотеки та інші ресурси, необхідні програмі, доступні лише їй.
Оскільки програми не встановлюються традиційним способом, вони не викликають конфліктів з іншими програмами, що вимагають різних версій тих же ресурсів. Можна навіть запускати програми, що потребують конфліктуючих версій бібліотек, оскільки кожна з них працює у власній пісочниці.
Як же вони працюють, якщо не встановлюються звичайним способом? Файл пакета завантажується, розпаковується та монтується як віртуальна файлова система SquashFS . Потім він представляється вам у вигляді віртуального середовища. Все це відбувається у фоновому режимі. Ви просто отримуєте доступ до встановленої програми.
Звісно, через те, що кожен пакет містить всі необхідні ресурси, вони можуть бути досить великими. Також можливо дублювання ресурсів, таких як MySQL або Apache, які зазвичай встановлюються лише один раз. Якщо два різних snap-додатки потребують одних і тих же ресурсів, кожен з них матиме свою власну копію.
Однак, це є компромісом заради простоти встановлення та усунення проблем із конфліктами ресурсів.
Встановлення snapd
Snappy був представлений в Ubuntu 16.04, тому, якщо ви використовуєте цю або новішу версію, він вже встановлений. На нашій системі Manjaro 18.04 Snappy був встановлений за замовчуванням, але на Fedora 31 нам довелося його встановити.
snap – це як назва файлів пакетів, так і команда для роботи з ними. Демон snapd – це також назва пакета, який потрібно встановити, якщо Snappy ще немає на вашому комп’ютері.
Для встановлення snapd на Fedora введіть команду:
sudo dnf install snapd
Для встановлення на Manjaro, скористайтеся командами:
sudo pacman -Sy snapd
sudo systemctl enable --now snapd.socket
Команда `snap version` покаже версію snap-клієнта, демона snapd та серійний номер програмного забезпечення, а також назву, випуск дистрибутива Linux і версію ядра.
Введіть наступне:
snap version
Встановлення snap-пакетів
Процес встановлення snap-пакетів досить простий. Ви можете використовувати `snap` для пошуку та встановлення потрібних пакетів.
Щоб знайти та встановити редактор зображень GIMP, введіть:
snap find gimp
`snap` знаходить всі збіги з пошуковим запитом “gimp” і повертає результати. Він знайде все, що відповідає або містить в собі пошуковий термін.
Для встановлення потрібного пакету, використовуйте значення зі стовпця “Ім’я”, як показано нижче:
sudo snap install gimp
Під час завантаження відображається відсоток виконання, а ліворуч у вікні терміналу – індикатор прогресу. Після завершення встановлення з’явиться повідомлення про те, що пакет встановлено.
Команда `df` дозволяє перевірити використання різних файлових систем на вашому комп’ютері Linux. Перенаправивши її вивід до `grep` і пошукавши “gimp”, ми отримаємо інформацію саме про щойно встановлений пакет.
Введіть наступне:
df | grep gimp
Це показує, що пакет snap змонтований як файлова система. Точка монтування знаходиться у каталозі `/snap/gimp/252`, де “252” – номер випуску даної версії GIMP.
Файлова система вказана як `/dev/loop18`. Файли циклічних пристроїв використовуються для надання звичайних файлів у вигляді блокових пристроїв. Зазвичай вони використовуються для монтування файлових систем в образах дисків. У цьому випадку вони монтують файлову систему SquashFS у пакеті snap. “18” означає, що це 18-й файл пристрою `/dev/loop`, що використовується на цьому комп’ютері Linux.
За допомогою `df` і параметра `-t (тип)` можна обмежити вивід лише файловими системами SquashFS.
Введіть наступне:
df -t squashfs
У виводі показано змонтовані файлові системи SquashFS. Кожен з них обробляється файлом пристрою `/dev/loop`, і їх 18.
Кожна файлова система змонтована в підкаталозі каталогу `/snap`. Однак це не означає, що на цьому комп’ютері встановлено 18 різних snap-пакетів. Це дистрибутив Ubuntu, тому деякі snap-пакети встановлюються одразу “з коробки”, і ми щойно встановили ще один.
Крім того, при встановленні snapd встановлюються деякі основні snap-пакети, необхідні для роботи інших snap-пакетів.
Команда `snap list` виводить список встановлених snap-пакетів:
snap list
Вивід був дещо широким, тому нижче показано кінець списку.
Ось повний список:
Name Version Rev Tracking Publisher Notes core 16-2.43.3 8689 stable canonical* core core18 20200124 1668 stable canonical* base gimp 2.10.18 252 stable snapcrafters - gnome-3-26-1604 3.26.0.20191114 98 stable/… canonical* - gnome-3-28-1804 3.28.0-16-g27c9498.27c9498 116 stable canonical* - gnome-calculator 3.34.1+git1.d34dc842 544 stable/… canonical* - gnome-characters v3.32.1+git3.b9120df 399 stable/… canonical* - gnome-logs 3.34.0 81 stable/… canonical* - gnome-system-monitor 3.32.1-3-g0ea89b4922 127 stable/… canonical* - gtk-common-themes 0.1-28-g1503258 1440 stable/… canonical* -
Отже, встановлено 10 snap-пакетів, а не 18. Але ці 10 пакетів утворили 18 файлових систем SquashFS. Стовпці таблиці є досить зрозумілими, але ось деякі пояснення:
Ім’я: Назва встановленого snap-пакета.
Версія: Номер версії програмного забезпечення в snap-пакеті.
Rev: Номер версії snap-пакета.
Відстеження: Канал, за яким цей пакет відстежує оновлення. Є чотири варіанти:
Стабільний: Канал за замовчуванням, який містить найбільш стабільні пакети.
Кандидат: Менш стабільний канал, що містить програмне забезпечення-кандидат, яке є повним кодом, але проходить остаточне тестування перед переходом до стабільного каналу.
Бета: Канал з пізнім циклом розробки, але його стабільність не гарантована.
Edge: Канал для тестувальників ранніх збірок. Не рекомендується для важливої роботи або робочих комп’ютерів.
Видавець: Особа, компанія або організація, що випустила snap-пакет. Якщо видавець є перевіреним (і термінал підтримує Unicode), ви побачите зелену галочку біля імені. Якщо ні – зірочку.
Примітки
Тут відображаються будь-які коментарі або додаткова інформація.
Канали snap-пакетів
Використайте опцію `info` для отримання опису snap-пакету.
snap info gtk-common-themes
Ми бачимо, який канал відстежує пакет і версії програмного забезпечення в кожному з чотирьох каналів. Найкраще залишатися на стабільному каналі.
Snap-пакет перевіряє наявність оновлень чотири рази на день на каналі, який він “відстежує”. Якщо ви хочете змінити канал для пакета, використайте параметри `refresh` та `–channel`.
sudo snap refresh gtk-common-themes --channel=beta
Якщо б була доступна нова версія, вона б встановилась. Але в даному випадку її не було. Пакет тепер відстежує бета-канал, і нові бета-версії автоматично завантажуватимуться та оновлюватимуться.
За допомогою параметра `–list` можна перевірити, чи є оновлення для будь-якого snap-пакета.
sudo snap refresh --list
Ви отримаєте повідомлення, чи містить будь-який канал оновлення для snap-пакетів на вашому комп’ютері.
sudo snap refresh gtk-common-themes
Видалення snap-пакету
sudo snap remove gimp
Шпаргалка для snap
Використовувати snap-пакети досить просто, ось список корисних команд:
Для пошуку пакета: `snap find package_name`
Для встановлення пакета: `sudo snap install package_name`
Для перегляду всіх встановлених пакетів: `snap list`
Для отримання інформації про пакет: `snap info package_name`
Для зміни каналу оновлення: `sudo snap refresh package_name –channel=channel_name`
Для перевірки наявності оновлень: `sudo snap refresh –list`
Для примусового оновлення пакета: `sudo snap refresh package_name`
Для видалення пакета: `sudo snap remove package_name`