Tarkibga o'tish

Snap paketlari: konteynerlangan, o'zini o'zi yangilaydigan format

apt va repozitoriylar hamda dpkg va bog'liqliklar maqolalarida ko'rilgan .deb modeli bitta farazga tayanadi: paket tizimda allaqachon mavjud bo'lgan umumiy kutubxonalarga (libssl, libc6) bog'liq, shuning uchun u faqat mos kutubxona versiyalari bor joyda to'g'ri ishlaydi. Odatda bu afzallik — disk joyi tejaladi, chunki ko'p dasturlar bitta umumiy kutubxonadan foydalanadi. Lekin ba’zan bu cheklovga aylanadi: agar dastur distributivning rasmiy repozitoriysi hozir taqdim etayotganidan ancha yangi kutubxona versiyasiga bog'liq bo'lsa, uni apt orqali o'rnatish qiyin yoki imkonsiz bo'lib qoladi.

Ubuntu ishlab chiqaruvchisi Canonical bu muammoga boshqacha yondashuv bilan javob berdi: Snap — ilovani deyarli barcha bog'liqliklari bilan birga bitta mustaqil paketga jamlaydigan va distributivning o'z kutubxonalaridan katta darajada mustaqil bo'lgan format. Bu maqola Snap qanday ishlashini, amalda apt dan qanday farq qilishini va production server uchun qachon to'g'ri tanlov bo'lishini — va qachon bo'lmasligini ko'rib chiqadi.

Snap aslida nima

Snap — ilovani unga kerakli kutubxonalar va metama’lumotlar bilan birga jamlaydigan, faqat o'qiladigan, siqilgan fayl tizimi (squashfs) ko'rinishida qurilgan paket formati. .deb fayldan farqli o'laroq, snap tizimning umumiy kutubxonalariga deyarli tayanmaydi — kerakli narsalarning deyarli hammasini o'z ichida olib yuradi. Bu avval ko'rilgan bog'liqlik muammosini boshqacha yo'l bilan aylanib o'tadi: snap bog'liqlikni tizimdan qidirishi shart emas, chunki u allaqachon paket ichiga joylangan.

Bu murosaning ikki tomoni bor:

  • afzallik — snap ostida qaysi distributiv versiyasi ishlayotganidan deyarli mustaqil, upstream’ning yangi versiyalarini tezroq oladi va host tizimning aniq holatidan qat’i nazar har safar bir xil o'rnatiladi;
  • narx — paket hajmi ancha katta (chunki kutubxonalar umumiy ishlatilmay, takrorlanadi), ko'proq disk joyi egallaydi va birinchi ishga tushishi odatda mos .deb paketdan sekinroq, chunki ilova izolyatsiya qatlami ichida ishlaydi.

Snap’larni ishga tushirish va boshqarish uchun fonda ishlaydigan xizmat — snapd kerak. Zamonaviy Ubuntu Server LTS relizlarida snapd odatda oldindan o'rnatilgan bo'ladi.

systemctl is-active snapd
active

snap buyruqlari

Qidirish va o'rnatish

snap find nginx

snap find Snap Store’dagi mavjud paketlardan qidiradi — bu Snap olamidagi apt search ekvivalenti.

sudo snap install core22

Bu misolda core22 — Ubuntu 22.04 asosida qurilgan bazaviy runtime snap; ko'p ilova snap’lari shunga o'xshash "core" snap’ga bog'liq. sudo kerak, chunki snapd tizim darajasida ishlaydi.

O'rnatilgan snap’larni ko'rish

snap list
Name    Version   Rev    Tracking       Publisher   Notes
core22  20240111  1122   latest/stable  canonical✓  base
lxd     5.21.2     28372  5.21/stable    canonical✓  -

Rev — shu snap’ning aniq reviziya (versiya) raqami; Tracking esa u qaysi kanalni kuzatib borayotganini ko'rsatadi (quyida ko'rib chiqiladi).

Yangilash

sudo snap refresh
sudo snap refresh lxd

Birinchi buyruq har bir o'rnatilgan snap’ni, ikkinchisi faqat bittasini yangilaydi. apt upgrade dan farqli o'laroq, snap’lar odatda avtomatik ham yangilanadi, sukut bo'yicha administrator to'g'ridan-to'g'ri boshqarmaydigan jadval asosida. Production serverda bu alohida e’tibor talab qiladigan jihat bo'lib, quyida va Production’da yangilanishlar maqolasida batafsil ko'rib chiqiladi.

Oldingi versiyaga qaytish

sudo snap revert lxd

Snap’ning asosiy afzalliklaridan biri — har bir yangilanishdan keyin oldingi versiyani saqlab qolishi. Shuning uchun yangi versiya muammo tug'dirsa, revert avvalgi ishlaydigan holatga darhol qaytish yo'lini beradi. Bu Production’da yangilanishlar maqolasida ko'rilgan kengroq rollback strategiyasining snap darajasidagi ko'rinishi.

Olib tashlash

sudo snap remove lxd

Sukut bo'yicha snap remove snap ma’lumotlarini butunlay o'chirmaydi — keyinroq qayta o'rnatishingiz ehtimoli uchun oxirgi ikki reviziyani vaqtincha saqlab qoladi. Iz qoldirmasdan to'liq olib tashlash uchun:

sudo snap remove --purge lxd

Confinement: snap qanday izolyatsiya qilinadi

Snap ilovalari oddiy .deb orqali o'rnatilgan dasturdan farqli o'laroq, konteynerlangan, cheklangan huquqli muhitda ishlaydi. Bu izolyatsiya darajasi confinement deb ataladi:

Daraja Ma’nosi
strict To'liq izolyatsiya: ilova faqat interfeys orqali aniq ruxsat berilgan resurslarga (fayllar, tarmoq, qurilmalar) kira oladi
classic Izolyatsiya amalda o'chirilgan; ilova oddiy dastur kabi tizimga to'liq kirish huquqiga ega (masalan, snap install lxd --classic)
devmode Xavfsizlik cheklovlari yumshatilgan, faqat ishlab chiqish va sinov uchun rejim
snap info nginx

Bu chiqishdagi confinement: qatori aynan qaysi daraja qo'llanishini ko'rsatadi. strict rejimidagi snap qaysi tizim resurslariga kira olishi interfeyslar (masalan, network, home, removable-media) orqali belgilanadi; ularni ko'rish va boshqarish uchun:

snap connections nginx

Note

classic confinement bilan o'rnatilgan snap’da izolyatsiya deyarli yo'q. Bu ko'pincha zarur, chunki ayrim ilovalar (IDE, tizim vositasi) haqiqatan fayl tizimiga to'liq kirishni talab qiladi. Lekin bu classic snap oddiy .deb paket bilan deyarli bir xil xavfsizlik xavfini olib yurishini ham anglatadi — uni faqat haqiqatan ishonadigan manbadan o'rnating.

Kanallar: bitta paket uchun bir nechta yangilanish yo'li

Snap Store’dagi har bir paket bir nechta kanal (channel) bo'ylab tarqatiladi. Bu apt dagi bitta qat’iy versiyadan farqli o'laroq, bitta dasturning turli barqarorlik darajalarini bir vaqtda taklif qilish usuli:

Kanal Barqarorlik darajasi
stable Sukut bo'yicha, production uchun tayyor versiya
candidate stable ga o'tkazishdan oldingi oxirgi tekshiruv bosqichi
beta Yangi imkoniyatlar, hali to'liq sinovdan o'tmagan
edge Eng so'nggi tungi build — beqaror bo'lishi mumkin
sudo snap install nginx --channel=candidate

Production server deyarli har doim sukut bo'yicha stable kanalidan foydalanadi; boshqa har qanday kanal sinov muhiti uchun qoldirilgan ataylab qilingan tanlov.

Snap va apt: qachon qaysi birini tanlash

Mezon apt (.deb) Snap
Bog'liqliklar manbasi Tizimdagi umumiy kutubxonalar Paket ichiga joylangan, deyarli mustaqil
Disk sarfi Kichikroq (kutubxonalar umumiy) Kattaroq (kutubxonalar takrorlanadi)
Yangilanishni boshqarish To'liq qo'lda yoki unattended-upgrades orqali Sukut bo'yicha avtomatik; administrator jadvalni cheklashi mumkin
Versiya yangiligi Distributiv repozitoriysi sur’atiga bog'liq Ko'pincha tezroq yangilanadi
Izolyatsiya Yo'q — to'g'ridan-to'g'ri tizimda ishlaydi strict rejimida qisman izolyatsiya qilingan

Amaliy qoida: agar dastur Ubuntu’ning rasmiy repozitoriysida mavjud bo'lsa va uning yangilanish sur’ati sizga mos kelsa, apt ni afzal ko'ring — u yengilroq va yangilanish jadvali ustidan to'liq nazorat beradi. Snap dastur repozitoriyda bo'lmagan yoki juda eskirgan holatlarga yoki izolyatsiyaning o'zi haqiqiy foyda keltiradigan vaziyatlarga mos keladi.

Intervyuda

"Nega jamoa muayyan bir vosita uchun apt o'rniga Snap’ni tanlashi mumkin va bu qaror ularga operatsion jihatdan nimaga tushadi?" — o'rinli intervyu savoli. To'g'ri javob ikkala tomonni ham nomlaydi: upstream relizlarini tezroq olish va hostlar o'rtasida bir xil xatti-harakat evaziga ko'proq disk sarfi, sekinroq birinchi ishga tushish va eng muhimi — production serverda ataylab jadvalga solinishi kerak bo'lgan avtomatik yangilanish mexanizmi. Aks holda u xizmatni oldindan aytib bo'lmaydigan paytda qayta ishga tushiradi.

Production’dagi tashvish: avtomatik yangilanishlar

Snap’ning sukut bo'yicha xatti-harakati — o'rnatilgan paketlarni administrator buyrug'isiz, fonda avtomatik yangilash; tekshiruv odatda kuniga bir necha marta bo'ladi. Ish stantsiyasida bu qulay, lekin production serverda u noqulay paytda kutilmagan xizmat qayta ishga tushishi yoki versiya o'zgarishiga sabab bo'lishi mumkin.

Navbatdagi rejalashtirilgan yangilanish vaqtini tekshiring:

snap refresh --time

Uni butunlay o'chirib bo'lmasa ham, yangilanish oynasini cheklash mumkin:

sudo snap set system refresh.timer=sat,23:00-04:00

Bu avtomatik yangilanishlarni faqat shanba kunlari, soat 23:00 dan 04:00 gacha bo'lgan vaqt bilan cheklaydi. Bu Production’da yangilanishlar maqolasida chuqurroq ko'rib chiqiladigan "texnik xizmat oynasi" (maintenance window) g'oyasining snap darajasidagi amaliy ko'rinishi.

Warning

Agar production serverda Snap ishlatsangiz, avtomatik yangilanish jadvalini ataylab sozlang. Sukut bo'yicha qoldirilsa, xizmat noqulay paytda — masalan, kunduzgi trafik cho'qqisida — qisqa muddatga qayta ishga tushishi mumkin.

Amaliy vaziyat: serverdagi snapd ni tekshirish va cheklash

Muammo. Yangi o'rnatilgan, minimal Ubuntu Server LTS mashinasida snapd resurs sarflayotganini (fondagi xizmat, avtomatik yangilanishlar) payqadingiz va u nega borligini hamda uni qanday boshqarishni tushunmoqchisiz.

1-qadam. snapd ishlayotganini tasdiqlang va nima o'rnatilganini ko'ring.

systemctl is-active snapd
snap list

2-qadam. Band qilingan disk joyini baholang.

du -sh /var/lib/snapd/snaps
1.2G    /var/lib/snapd/snaps

Bu hech narsani o'zgartirmaydigan, faqat o'qiydigan tekshiruv.

3-qadam. Agar snap aslida kerak bo'lmasa (masalan, snap paketidagi ilova ishlatmaydigan minimal server), yangilanish jadvalini cheklash yoki snapd ni butunlay olib tashlashni baholang.

snap list

Agar ro'yxatda faqat tizim talab qiladigan core/bare snap’lar bo'lsa va boshqa haqiqatan ishlatilayotgan narsa bo'lmasa, snapd ni olib tashlashni ko'rib chiqish mumkin:

sudo systemctl stop snapd
sudo apt purge snapd

Danger

snapd ni olib tashlashdan oldin hech qanday muhim narsa unga bog'liq emasligini tasdiqlang — ayrim zamonaviy Ubuntu vositalari (masalan, lxd) faqat snap sifatida tarqatiladi. apt purge snapd dan oldin snap list chiqishini diqqat bilan ko'rib chiqing va agar haqiqatan kerak bo'lgan snap bo'lsa, avval uni muqobili bilan (agar mavjud bo'lsa, .deb versiyasi bilan) almashtiring.

Tekshiring:

which snap

Bo'sh natija (yoki "command not found") snapd va unga bog'liq buyruqlar tizimdan olib tashlanganini tasdiqlaydi.

Xulosa. Snap haqiqatan kerak bo'lganda foydali, lekin har bir serverda majburiy emas. Minimal, tor vazifali serverda uni butunlay olib tashlash resurslarni tejash va yangilanish siyosatini to'liq nazoratda saqlash uchun keng tarqalgan amaliyot.

Keng tarqalgan xatolar

Bitta ilova uchun ham snap, ham apt paketini o'rnatish

Ayrim dasturlar (masalan, nginx) ham apt, ham Snap Store orqali mavjud. Ikkalasini bir vaqtda o'rnatish port ziddiyatlariga yoki aslida qaysi versiya ishlayotgani haqida chalkashlikka olib keladi. Qaysi biri allaqachon o'rnatilganini ko'rish uchun avval dpkg -l va snap list bilan tekshiring.

classic confinement’ga oddiy strict snap kabi ishonish

--classic bilan o'rnatilgan snap’da amalda izolyatsiya yo'q. Uni ishonchsiz manbadan o'rnatish tekshirilmagan, ko'rib chiqilmagan .deb faylni o'rnatish bilan taxminan bir xil xavf tug'diradi.

Production serverda avtomatik yangilanish jadvalini sozlamaslik

Sukut bo'yicha sozlamalarda qoldirilgan snap istalgan paytda, jumladan trafik cho'qqisida ham o'zini yangilashi mumkin. snap set system refresh.timer=... bilan oyna belgilash kutilmagan uzilishlarning oldini olishning oddiy va samarali usuli.

snapd ning resurs sarfini "shunchaki fondagi xizmat" deb hisoblash

snapd hech qanday snap ilovasi faol ishlatilmayotganda ham CPU va xotira sarflaydigan doimiy fon jarayoni sifatida ishlaydi. Resurslari cheklangan kichik serverlarda, haqiqatan kerak bo'lmasa, uni olib tashlash sezilarli farq qilishi mumkin.

Mashqlar

  1. Tizimingizda nechta snap va nechta .deb paket o'rnatilganini aniqlash uchun snap list va dpkg -l | wc -l chiqishini solishtiring.
  2. snap info core22 (yoki tizimingizda mavjud boshqa snap) chiqishidan confinement qatorini toping va nega u aynan shu darajaga o'rnatilganini tushuntiring.
  3. Navbatdagi rejalashtirilgan avtomatik yangilanish vaqtini snap refresh --time bilan aniqlang. Agar bu server production’da bo'lganida, bu vaqt ish soatlariga to'g'ri kelishi mumkinmi, baholang va agar shunday bo'lsa, buning o'rniga qaysi yangilanish oynasini belgilashingizni rejalashtiring (aslida ishga tushirmasdan).

Mashqni bajardim deyish uchun: har bir mashq uchun ko'rib chiqilayotgan jihatda — izolyatsiya, yangilanish xatti-harakati yoki disk sarfi — Snap apt dan qanday farq qilishini aniq tushuntira olishingiz va production serverda Snap’dan foydalanish-foydalanmaslik haqida asosli qaror qabul qila olishingiz kerak.

Xulosa

Snap ilovani va uning bog'liqliklarini distributivning o'z kutubxonalaridan katta darajada mustaqil bo'lgan bitta izolyatsiyalangan paketga jamlaydi. Bu .deb modeliga xos bog'liqlik muammosiga boshqacha yechim, lekin narxi — kattaroq hajm va sukut bo'yicha administratorning to'g'ridan-to'g'ri nazoratidan tashqaridagi yangilanishlar. apt va Snap raqobatchilar emas, balki turli vaziyatlarga mos ikki vosita: tanlov dastur qayerdan kelishiga, qancha izolyatsiya kerakligiga va yangilanishlar qanchalik qattiq nazorat qilinishi kerakligiga bog'liq.

Ikkala format ham — apt orqali qo'lda boshqarilsin yoki Snap orqali avtomatik yangilansin — oxir-oqibat bitta asosiy savolga olib keladi: production serverda yangilanishlarni qachon va qanday xavfsiz qo'llash kerak? Keyingi maqola — Production’da yangilanishlar aynan shu savolga javob beradi.

Manbalar

  • Snapcraft hujjatlari: Snap haqida umumiy ma’lumot: https://snapcraft.io/docs
  • Snapcraft hujjatlari: confinement turlari: https://snapcraft.io/docs/snap-confinement
  • Snapcraft hujjatlari: kanallar: https://snapcraft.io/docs/channels
  • Snapcraft hujjatlari: yangilanishlarni boshqarish: https://snapcraft.io/docs/managing-updates
  • Ubuntu qo'llanma sahifasi: snap(1): https://manpages.ubuntu.com/manpages/noble/man1/snap.1.html