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
.debpaketdan 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.
snap buyruqlari
Qidirish va o'rnatish
snap find Snap Store’dagi mavjud paketlardan qidiradi — bu Snap olamidagi apt search ekvivalenti.
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
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
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
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
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:
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 |
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:
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 |
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:
Uni butunlay o'chirib bo'lmasa ham, yangilanish oynasini cheklash mumkin:
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.
2-qadam. Band qilingan disk joyini baholang.
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.
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:
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:
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
- Tizimingizda nechta snap va nechta
.debpaket o'rnatilganini aniqlash uchunsnap listvadpkg -l | wc -lchiqishini solishtiring. snap info core22(yoki tizimingizda mavjud boshqa snap) chiqishidanconfinementqatorini toping va nega u aynan shu darajaga o'rnatilganini tushuntiring.- Navbatdagi rejalashtirilgan avtomatik yangilanish vaqtini
snap refresh --timebilan 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