Snap (програмне забезпечення)

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Snappy (менеджер пакетів))
Перейти до навігації Перейти до пошуку
snapd
Тип система керування пакунками
Розробник Canonical Ltd.
Операційна система Linux
Мова програмування Go, C, shell, Python, JavaScript, NASL[1]
Ліцензія GNU GPL 3
Репозиторій github.com/snapcore/
Вебсайт snapcraft.io

Snap — система керування пакунками та розгортання програмного забезпечення, розроблена компанією Canonical для операційних систем, котрі використовують ядро Linux та систему systemd init. Пакунки, які називаються snaps, а також інструмент для роботи з ними, snapd, працюють на різноманітних дистрибутивах Linux,[2] і дозволяють розробникам постачати програмне забезпечення напряму до користувачів. Snaps — самодостатні застосунки, які запускаються в режимі пісочниці з опосередкованим доступом до основної системи. Snap початково було випущено для хмарних застосунків,[3] проте згодом його було портовано для пристроїв Інтернету речей,[4][5] а також комп'ютерних[6][7] застосунків.

Функціональність[ред. | ред. код]

Магазин Snap[ред. | ред. код]

Магазин Snap дозволяє розробникам публікувати застосунки, створені як пакунки snap.[8] Усі застосунки, завантажені до магазину Snap, проходять автоматичне тестування, що включає перевірку на шкідливі програмні засоби. Втім, сканування не виявляє усіх проблем. В одному випадку в травні 2018 року два застосунки від одного виробника містили видобувач криптовалюти, який запускався як фоновий процес під час виконання застосунку. Коли проблему було виявлено, Canonical видалила застосунок з магазину Snap та передала права власності Snaps перевіреному сторонньому видавцеві, який заново опублікував Snaps після видалення видобувача.[9][10][11] Хоча режим пісочниці для Snap знижує шкоду від шкідливих застосунків, Canonical радить користувачам встановлювати Snaps лише від видавців, яким користувач довіряє.[12][13]

Універсальні пакунки[ред. | ред. код]

Пакунки snaps — самодостатні, які працюють на багатьох дистрибутивах Linux. Це відрізняє Snaps від традиційних підходів до керування пакунками у Linux, які вимагають підлаштовувати пакунки окремо для кожного дистрибутива.[14][15]

Формат snap — єдиний файл, котрий містить архівовану файлову систему в форматі SquashFS з розширенням .snap. Така файлова система містить застосунок, бібліотеки, від яких він залежить, а також декларативні метадані. Ці метадані зчитує snapd для того, аби налаштувати відповідну безпечну пісочницю для даного застосунку. Після встановлення, snap монтується до основної операційної системи та розархівовується наживо коли файли використовуються.[16][17] Хоча завдяки архівуванню snaps займають менше місця на жорсткому диску, це також означає, що деякі великі застосунки запускаються повільніше.[18][19]

Суттєва відмінність між пакунками Snap та інших форматів універсальних пакунків Linux, таких як Flatpak є те, що Snap підтримує будь-який клас Лінукс-застосунків, таких як комп'ютерні застосунки, серверні інструменти, застосунки для Інтернету речей і навіть системних сервісів, таких як пакет драйверів для принтерів.[8][20][21] Аби забезпечити це, Snap покладається на systemd для таких функцій, як запуск сервісів сокет-активованої системи в Snap.[22] Через це Snap працює найкраще лише на дистрибутивах, які використовують дану систему init.[23]

Налаштовувана пісочниця[ред. | ред. код]

Додатки у форматі Snap запускаються в контейнері з обмеженим доступом до основної системи. Використовуючи Інтерфейси, користувачі можуть надавати додаткові опосередкований доступ до додаткових можливостей основної системи, наприклад записування аудіо, доступ до пристроїв USB, а також записування відео.[24][25][26] Оскільки інтерфейси звертаються до стандартних Linux API, додатки можуть працювати в пісочниці без потреби бути переписаними. Користувацькі додатки також можуть використовувати портали робочого столу XDG, стандартизований API, початково створений проєктом Flatpak для надання користувацьким додаткам у пісочниці доступу до ресурсів основної операційної системи.[27][28] Такі портали зазвичай кращі для користувачів у порівнянні зі стандартними Linux API тому що вони запитують в користувача дозвіл на використання ресурсів, таких як веб-камера, коли додаток їх потребує. Недоліком є те, що додатки та набори інструментів необхідно переписувати аби використовувати з такими новішими API.

Пісочниця Snap також підтримує спільне використання даних та сокетів Unix між Snap'ами.[29] Також можна спільно використовувати бібліотеки та фреймворки додатків між Snap'ами аби зменшити їх об'єм та уникнути повторюваності.[30][31]

Пісочниця Snap значною мірою покладається на безпековий модуль Linux AppArmor висхідного ядра Linux. Оскільки лише один «основний» модуль безпеки Лінукс (LSM) може бути активний,[32] пісочниця Snap є значно менш безпечною коли активний інший основний LSM. Тому в таких дистрибутивах як Fedora, де одразу увімкнено модуль SELinux, пісочниця Snap проявляє себе значно гірше. Хоча Canonical працює з багатьма іншими розробниками та компаніями аби уможливити одночасний запуск кількох LSM, це рішення не з'явиться найближчим часом.[33][32][34]

Пісочниця Snap не дозволяє користувацьким додаткам отримувати доступ до графічного оформлення основної операційної системи аби запобігти проблемам із сумісністю. Для того аби Snap'и використовували графічну тему, її також доведеться помістити в окремий Snap. Багато популярних тем було розміщено розробниками як Snap-пакунки,[35] але деякі теми досі не підтримуються,[36] а нестандартні теми доведеться встановлювати вручну. Якщо тема недоступна як пакунок Snap, користувачам лишається обирати найбільш відповідну з наявних.[37] Зараз розробники працюють над тим, аби стороннім розробникам стало простіше поширювати теми в пакунках Snap та автоматично встановлювати нестандартні теми систем.[38]

Автоматичне та лінеаризоване оновлення[ред. | ред. код]

Кілька разів на день snapd перевіряє наявність оновлень для всіх Snaps, і встановлює їх фоново використовуючи лінеаризовані процеси. Оновлення можна відкликати[39][40] й використовувати дельта-кодування аби знизити обсяг завантажуваних даних.[41][42][43]

Видавці можуть випускати та оновлювати різні версії програмного забезпечення паралельно з використанням каналів. Кожен канал має відповідний трек та ризик, які визначають версію та стабільність програмного забезпечення, яке випускають на даному каналі. Під час встановлення додатку, Snap автоматично обирає канал latest/stable, який автоматично оновлюватиме до нового основного випуску програмного забезпечення коли воно стає доступним. Видавець може створювати додаткові канали аби надавати можливість користувачам користуватися певними основними випусками своїх додатків. Наприклад, канал 2.0/stable дозволяє користувачам продовжувати користуватися версією 2.0, і отримувати лише незначні оновлення без ризику втрати сумісності з попередніми версіями. Коли видавець випускає нову основну версію в новому каналі, користувачі можуть вручну оновитися до наступної обраної версії.[44][45][46][17]

Користувачі можуть встановлювати графік, частоту та своєчасність автоматичних оновлень. Наприклад, така команда перевірятиме на оновлення в останню п'ятницю з 23:00 до 01:00.

$ sudo snap set system refresh.timer=fri5,23:00-01:00

Користувачі також можуть призупинити автоматичні оновлення на певний або невизначений термін.[47][48][49] Оновлення автоматично призупиняються на лімітованому підключенні.[50][51]

Snapcraft[ред. | ред. код]

snapcraft
Файл:Snapcraft green-red hex-small.png
Тип система керування пакунками
Розробник Canonical Ltd.
Операційна система Linux
Мова програмування Python, shell, C++, Go, Dart[52]
Ліцензія GNU GPL 3
Репозиторій github.com/snapcore/snapcraft
Вебсайт snapcraft.io

Snapcraft — інструмент, який дозволяє розробникам пакувати програмне забезпечення у форматі Snap.[53] Він може запускатися на будь-якому дистрибутиві Linux, який має підтримку Snap, macOS[54] та Microsoft Windows.[55] Snapcraft створює пакунки у віртуальній машині використовуючи Multipass,[56] аби результат пакування був однаковий, незалежно від того, на якому дистрибутиві або операційній системі його було створено.[57] Snapcraft підтримує багато інструментів розробки та мов програмування, наприклад Go, Java, JavaScript, Python, C/C++ та Rust. Також він дозволяє імпортування метаданих додатка з різних ресурсів, таких як AppStream, git, текстові скрпти та файли setup.py.[54][58]

Використання[ред. | ред. код]

Snap початково підтримував лише дистрибутив Ubuntu Core, який виористовує лише Snap'и, але в червні 2016 р. його було портовано на різноманітні дистрибутиви Linux як один з форматів універсальних пакунків Linux.[59] Snap вимагає Systemd, який доступний у більшості, але не всіх дистрибутивах Linux. Інші Unix-подібні системи (наприклад, FreeBSD) не підтримуються.[60] ChromeOS не має прямої підтримки Snap, а лише через дистрибутиви Linux з підтримкою Snap, наприклад Gallium OS.[61]

Ubuntu та офіційні деривативи постачаються з попередньо встановленим Snap, як і дистрибутиви на основі Ubuntu, такі як KDE Neon, Solus, та Zorin OS.[62] Тоді як інші офіційни деривативи Ubuntu, такі як Kubuntu, Xubuntu, та Ubuntu MATE також постачали альтернативний формат пакунків Flatpak, Canonical заборонить використовувати інші формати починаючи з Ubuntu 23.04, що означає те, що альтернативні пакунки користувач встановлюватиме самостійно.[63]

Велика кількість визначних компаній з розробки комп'ютерного програмного забезпечення публікують його в Snap Store, наприклад Google,[64] JetBrains,[65] KDE,[66] Microsoft (для лінукс-версій програмного забезпечення, наприклад .NET Core 3.1,[67] Visual Studio Code, Skype,[68] і PowerShell), Mozilla[69] та Spotify.[70] Snaps також застосовуються для середовищ Інтернету речей, від продуктів споживацького класу[71] до корпоративних порталів керування пристроями[72] та мереж супутникового зв'язку.[73][74] Насамкінець, Snap часто використовують розробники серверних додатків, таких як InfluxDB,[75] Kata Containers,[76] Nextcloud[77] і Travis CI.[78]

Сприйняття[ред. | ред. код]

Snap отримав змішані відгуки від спільноти розробників. На рекламному сайті Snap'у, Heroku хвалили можливість автоматичного оновлення Snap'ів оскільки це добре підходить для їхньої політики частих оновлень. Microsoft відмічає простоту користування Snap, осікльки пакувальник базується на YAML, а також незалежність від типу дистрибутива. JetBrains сказали, що Крамниця Snap дає більше популярності їхнім інструментам.[79]

Інші критикували закриту модель Крамниці Snap. Клемент Лефебр (засновник та лідер проєкту Linux Mint[80][81]) написав, що Snap є упередженим та має конфлікт інтересів. Серед обґрунтувань було те, що Snap адмініструється компанією Canonical і прив'язаний до їхньої крамниці, а також що Snap працює краще на Ubuntu, ніж на інших дистрибутивах.[82] Згодом він оголосив, що встановлення Snap буде блокуватися APT на Linux Mint,[83][84] хоча існуватиме інструкція, як обійти це обмеження.[85]

В найновіших версіях Ubuntu, Canonical замінила деякі пакунки виключно на Snap, серед них браузери Chromium та Firefox[86].[87][8] Заміна для браузера Firefox була критично сприйнята користувачами через проблеми з продуктивністю у Snap-версії, особливо під час першого запуску.[86]

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. snapcore · GitHub. GitHub. Процитовано 5 листопада 2022.
  2. snapd package versions - Repology. Repology. Процитовано 20 серпня 2021.
  3. Shuttleworth, Mark (9 грудня 2014). Announcing Ubuntu Core, with snappy transactional updates!. Архів оригіналу за 9 грудня 2014. Процитовано 7 серпня 2020.
  4. Willis, Nathan (28 січня 2015). Ubuntu Core and Snappy. LWN.net. Процитовано 8 серпня 2020.
  5. Canonical unveils Snappy Ubuntu Core, a lightweight operating system for your home - ExtremeTech. www.extremetech.com. Процитовано 8 серпня 2020.
  6. Bhartiya, Swapnil (27 квітня 2015). Is Ubuntu moving away from .deb packages? Here is the complete story. CIO (англ.). Процитовано 8 серпня 2020.
  7. Vaughan-Nichols, Steven J. The future of Linux desktop application delivery is Flatpak and Snap. ZDNet (англ.). Процитовано 8 серпня 2020.
  8. а б в S, James; August 6, ers in Software on; 2019; Pst, 8:53 Am. Why Canonical views the Snap ecosystem as a compelling distribution-agnostic solution. TechRepublic (англ.). Процитовано 5 серпня 2020.
  9. How Canonical Is Improving Ubuntu Linux Security. eWEEK. 29 серпня 2018. Процитовано 8 серпня 2020.
  10. Malware Found on the Ubuntu Snap Store. OMG! Ubuntu! (брит.). 13 травня 2018. Процитовано 19 липня 2020.
  11. Canonical (15 травня 2018). Trust and security in the Snap Store. Snapcraft (англ.). Процитовано 5 серпня 2020.
  12. Packages for Ubuntu. Ubuntu (англ.). Процитовано 7 серпня 2020.
  13. Bogus apps in store. snapcraft.io (амер.). 27 березня 2018. Процитовано 7 серпня 2020.
  14. June 21, Jack Wallen in Open Source on; 2016; Pst, 8:13 Am. Canonical changes the game by announcing universal snap packages. TechRepublic (англ.). Процитовано 8 серпня 2020.
  15. Kepes, Ben (14 червня 2016). Snap! Do the Linux distros finally agree on something?. Computerworld (англ.). Процитовано 8 серпня 2020.
  16. ReadySpace (14 листопада 2019). A technical comparison between the snap and the Flatpak formats. ReadySpace Indonesia (амер.). Процитовано 5 серпня 2020.{{cite web}}: Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання)
  17. а б McKay, Dave. How to Work with Snap Packages on Linux. How-To Geek (амер.). Процитовано 5 серпня 2020.
  18. Squashfs performance effect on snap startup time. snapcraft.io (амер.). 29 жовтня 2019. Процитовано 5 серпня 2020.
  19. McKay, Dave. What You Need to Know About Snaps on Ubuntu 20.04. How-To Geek (амер.). Процитовано 28 липня 2021.
  20. Call for testing: OpenPrinting's printing-stack-snap (Printing in a Snap). snapcraft.io (амер.). 9 березня 2018. Процитовано 5 серпня 2020.
  21. Canonical unveils 6th LTS release of Ubuntu with 16.04. Ubuntu Insights. Canonical Ltd. Процитовано 22 квітня 2016.
  22. Services and daemons.
  23. WSL2- Ubuntu 20.04 Snap store doesn't work due to systemd dependency · Issue #5126 · microsoft/WSL. GitHub (англ.). Процитовано 7 серпня 2020.
  24. Supported interfaces | Snapcraft documentation. Snapcraft (англ.). Процитовано 5 серпня 2020.
  25. Snapcraft confinement & interfaces. ReadySpace China (zh-hans) . 6 червня 2019. Архів оригіналу за 25 листопада 2020. Процитовано 5 серпня 2020.
  26. A guide to snap permissions and interfaces. ReadySpace Hong Kong (амер.). 2 листопада 2018. Архів оригіналу за 19 березня 2020. Процитовано 5 серпня 2020.
  27. Flatpak's XDG-Desktop-Portal Adds Initial Support For Snaps - Phoronix. www.phoronix.com. Процитовано 5 серпня 2020.
  28. Desktop Integration — Flatpak documentation. docs.flatpak.org. Процитовано 5 серпня 2020.
  29. The content interface. Snapcraft (англ.). Процитовано 29 квітня 2020.
  30. Snappy Is Finally Doing Something About Super Large App Sizes. OMG! Ubuntu! (брит.). 11 червня 2017. Процитовано 7 серпня 2020.
  31. Bundling KDE. archive.fosdem.org (англ.). Процитовано 7 серпня 2020.
  32. а б Edge, Jake (20 листопада 2019). LSM stacking and the future. LWN.net. Процитовано 6 серпня 2020.
  33. How Are SNAPS claiming to have no internet plug regulated?. snapcraft.io (амер.). 11 липня 2020. Процитовано 6 серпня 2020.
  34. Johansen, John (3 лютого 2019). Containers with Different Security Modules.
  35. How to use the system GTK theme via the gtk-common-themes snap. snapcraft.io (амер.). 21 лютого 2020. Процитовано 6 серпня 2020.
  36. Kubuntu 20.04 LTS Review | ORDINATECHNIC. www.ordinatechnic.com. Процитовано 19 липня 2020.
  37. How to Change Snap App Theme on Ubuntu (With Examples). OMG! Ubuntu! (брит.). 18 червня 2020. Процитовано 6 серпня 2020.
  38. Automatic theme snap installation notes. snapcraft.io (амер.). 25 травня 2020. Процитовано 6 серпня 2020.
  39. How to revert to a previous version of a snap package? wekan in this case. costales.github.io (en-us) . 8 березня 2017. Процитовано 5 серпня 2020.
  40. A Beginners Guide to Snaps in Linux - Part 1. www.tecmint.com (амер.). Процитовано 5 серпня 2020.
  41. Snapcraft - Snaps are universal Linux packages. Snapcraft.
  42. Willis, Nathan (28 січня 2015). Ubuntu Core and Snappy. Linux Weekly News. Процитовано 7 листопада 2015.
  43. Vaughan-Nichols, Steven J. Ubuntu Snap takes charge of Linux desktop and IoT software distribution. ZDNet.
  44. Controlling snap releases with channels, tracks and branches – Part 1. Ubuntu (англ.). Процитовано 7 серпня 2020.
  45. Controlling snap releases with channels, tracks and branches – Part 2. Ubuntu (англ.). Процитовано 7 серпня 2020.
  46. Prakash, Abhishek (23 квітня 2016). Using Snap Packages In Ubuntu & Other Linux [Complete Guide] (амер.). Процитовано 7 серпня 2020.
  47. Ljubuncic, Igor (15 листопада 2022). Hold your horses, I mean snaps! New feature lets you stop snap updates, for as long as you need. Snapcraft (англ.). Процитовано 2 грудня 2022.
  48. You can finally disable Snap updates. merlijn.sebrechts.be (англ.). 10 листопада 2022. Процитовано 2 грудня 2022.
  49. Ubuntu snap updates will soon be able to be held temporarily and indefinitely. Neowin (англ.). Процитовано 2 грудня 2022.
  50. How To Change Snap Refresh (Update) Schedule. Linux Uprising Blog (en-us) . Процитовано 7 серпня 2020.
  51. Pope, Alan (3 березня 2020). Controlling Snap Updates. YouTube.
  52. GitHub - snapcore/snapcraft: Package, distribute, and update any app for Linux and IoT. GitHub. Процитовано 5 листопада 2022.
  53. Brodkin, Jon. Adios apt and yum? Ubuntu's snap apps are coming to distros everywhere. Ars Technica. Процитовано 13 серпня 2016.
  54. а б Nestor, Marius (30 січня 2019). Canonical Releases Snapcraft 3.1 Snap Creator Tool with Various Improvements. softpedia (англ.). Процитовано 5 серпня 2020.
  55. Nestor, Marius (10 вересня 2019). Ubuntu's Snapcraft Snap Creator Tool Will Soon Get a Windows Installer. softpedia (англ.). Процитовано 8 серпня 2020.
  56. Build options | Snapcraft documentation.
  57. Make your snap development faster. ReadySpace China (zh-hans) . 15 березня 2019. Архів оригіналу за 28 червня 2021. Процитовано 5 серпня 2020.
  58. Using external metadata | Snapcraft documentation. Snapcraft (англ.). Процитовано 5 серпня 2020.
  59. Ubuntu's container-style Snap app packages now work on other Linux distributions. TechCrunch (амер.). 14 червня 2016. Процитовано 8 серпня 2020.{{cite web}}: Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання)
  60. Installing snapd | Snapcraft documentation. Snapcraft (англ.). Процитовано 25 квітня 2022.
  61. Installing snap on GalliumOS | Snapcraft documentation. Snapcraft (англ.). Процитовано 18 серпня 2020.
  62. Installing snapd | Snapcraft documentation. Snapcraft (англ.). Процитовано 5 серпня 2020.
  63. Ubuntu Flavors/Spins Will No Longer Be Able To Install Flatpak By Default. www.phoronix.com (англ.). Процитовано 26 лютого 2023.
  64. Google and Canonical bring Flutter apps to Linux and the Snap Store. VentureBeat (амер.). 8 липня 2020. Процитовано 5 серпня 2020.
  65. Install IntelliJ IDEA on Ubuntu with Snaps – IntelliJ IDEA Blog | JetBrains. JetBrains Blog (амер.). Процитовано 5 серпня 2020.
  66. Month of KDE Applications Snaps – KDE neon Developers' Blog (амер.). Процитовано 5 серпня 2020.
  67. .NET Core 3.1.0 Preview 2, .NET Foundation, 8 листопада 2019, процитовано 8 листопада 2019
  68. Vaughan-Nichols, Steven J. Use Ubuntu's snap to install Skype on any Linux desktop. ZDNet (англ.). Процитовано 8 серпня 2020.
  69. Hoffman, Chris (25 квітня 2016). Mozilla will provide Firefox as a Snap package for Ubuntu, cutting out the middleman. PCWorld (англ.). Процитовано 5 серпня 2020.
  70. Spotify Now Available as a Snap App on Ubuntu. OMG! Ubuntu! (брит.). 30 грудня 2017. Процитовано 5 серпня 2020.
  71. Vaughan-Nichols, Stephen J. (11 травня 2015). Ubuntu jumps into Internet of Things with Acer, GE, and Microsoft. ZDNet. Процитовано 7 листопада 2015.
  72. Sherman, Jordana. Snappy Core unlocks IoT value within the Dell Edge Gateway 5000 Series. Ubuntu Insights. Canonical Ltd. Процитовано 7 листопада 2015.
  73. LimeSDR Mini takes off in satellites. LinuxGizmos.com. 14 березня 2018. Процитовано 5 серпня 2020.
  74. Ubuntu Core 18 released for secure, reliable IoT devices. Ubuntu (англ.). Процитовано 5 серпня 2020.
  75. Install influxdb for Linux using the Snap Store. Snapcraft (англ.). Процитовано 5 серпня 2020.
  76. Nestor, Marius (27 липня 2018). You Can Now Install Kata Containers VM as a Snap on Ubuntu, Other Linux Distros. softpedia (англ.). Процитовано 5 серпня 2020.
  77. Wallen, Jack (27 квітня 2020). How to install Nextcloud with SSL using snap. TechRepublic (англ.). Процитовано 8 серпня 2020.
  78. Install travis-worker for Linux using the Snap Store. Snapcraft (англ.). Процитовано 5 серпня 2020.
  79. SnapCraft homepage. snapcraft.io. Процитовано 23 липня 2021.
  80. Q&A: Clement Lefebvre: The man behind Linux Mint. computerworld.com. Процитовано 31 травня 2023.
  81. Teams. linuxmint.com. Процитовано 7 січня 2020.
  82. Monthly News – June 2019. blog.linuxmint.com. Процитовано 23 жовтня 2019.
  83. Lefèbvre, Clément. Monthly News – May 2020. The Linux Mint Blog. The Mint Team. Процитовано 10 червня 2020.
  84. Linux Mint dumps Ubuntu Snap. ZDNET (англ.). Процитовано 3 грудня 2022.
  85. Anderson, Tim (2 червня 2020). Snapping at Canonical's Snap: Linux Mint team says no to Ubuntu store 'backdoor'. The Register. Situation Publishing. Процитовано 10 червня 2020.
  86. а б Canonical Continues Working On Ubuntu's Firefox Snap Performance. www.phoronix.com (англ.). Процитовано 26 лютого 2023.
  87. Vaughan-Nichols, Steven J. Ubuntu opens the door to talking with Linux Mint about Snap. ZDNet (англ.). Процитовано 8 серпня 2020.

Посилання[ред. | ред. код]