Production’da yangilanishlar: xavfsiz va oldindan aytib bo'ladigan yangilash siyosati
Oldingi maqolalarda apt, dpkg va Snap orqali paketlarni o'rnatish, yangilash va boshqarish ko'rib chiqildi. Ish stantsiyasida apt upgrade ni istalgan paytda ishga tushirish kam xavfli — eng yomon holatda brauzerni qayta ishga tushirasiz. Production serverda esa aynan shu buyruqning og'irligi boshqacha: noto'g'ri paytda qo'llangan, sinovdan o'tmagan yangilanish xizmatni to'xtatishi, konfiguratsiyani buzishi yoki qayta yuklashni majburiy qilishi mumkin — va bularning hammasi foydalanuvchilarga real, ko'zga ko'rinadigan ta’sir qiladi.
Bu maqola yangi buyruq haqida emas — u allaqachon biladigan apt/dpkg buyruqlaringizni qachon, qanday tartibda va qanday ehtiyot choralari bilan qo'llash kerakligi haqida. Unda xavfsizlik patch’i va kattaroq versiya yangilanishi o'rtasidagi farq, buni xavfsiz avtomatlashtiradigan vositalar va yangilanish haqiqatan qo'llangandan keyin nimani tekshirish kerakligi ko'rib chiqiladi.
Xavfsizlik yangilanishlari va oddiy yangilanishlar: nega ular bir xil emas
Ubuntu repozitoriysi ikki alohida yangilanish oqimini ajratadi:
- xavfsizlik yangilanishlari —
noble-securitykabi alohida repozitoriydan keladi, aniqlangan muayyan zaiflikni bartaraf etadi va dasturning tashqi xatti-harakatini deyarli o'zgartirmaydi; bu apt-cache policy chiqishida alohida manba sifatida ko'rinadigan qatlam; - oddiy versiya yangilanishlari (feature/point yangilanishlar) —
noble-updatesdan keladi va yangi imkoniyat, o'zgargan sukut bo'yicha sozlama yoki kutubxonaning yangiroq asosiy versiyasini olib kelishi mumkin.
Bu farq amalda muhim: xavfsizlik yangilanishini kechiktirish tizimni ma’lum zaiflik oldida ochiq qoldirish degani, shuning uchun u odatda iloji boricha tez, ko'pincha avtomatik qo'llanadi. Oddiy versiya yangilanishi ko'proq o'zgarish olib keladi, shuning uchun u odatda production’ga yetib borishidan oldin staging muhitida sinab ko'riladi.
-s (simulate) hech narsani o'zgartirmasdan qaysi paketlar yangilanishini ko'rsatadi. Ro'yxatdagi har bir paket uchun apt-cache policy <package> u noble-security dan yoki noble-updates dan kelayotganini ko'rsatadi.
Faqat xavfsizlik yangilanishlarini qo'llash
Ba’zan production serverda faqat xavfsizlik patch’larini darhol qo'llash, qolgan hammasini esa navbatdagi rejalashtirilgan texnik xizmat oynasiga qoldirish kerak bo'ladi. Buni faqat fayl nomi bo'yicha ajratish ishonchli emas — Ubuntu 24.04 da apt va repozitoriylar maqolasida tasvirlangan standart ubuntu.sources fayli noble, noble-updates va noble-security ni bitta faylda birlashtiradi, shuning uchun odatda ko'rsatish mumkin bo'lgan alohida "faqat xavfsizlik" fayli bo'lmaydi.
Filtrlash aslida fayl bo'yicha emas, manbaning kelib chiqishi (origin) bo'yicha amalga oshadi — quyida ko'riladigan unattended-upgrades vositasi aynan shunday ishlaydi. U qaysi paketlarni qo'llashini haqiqatan ishga tushirishdan oldin ko'rish uchun:
--dry-run hech narsa o'rnatmaydi; -d (debug) qaysi paket qaysi origin’dan tanlanganini batafsil ko'rsatadi. Bu apt-get flag'larini qo'lda filtrlashga urinishdan ancha ishonchli, rasman qo'llab-quvvatlanadigan yo'l.
unattended-upgrades: xavfsizlik patch’larini avtomatlashtirish
unattended-upgrades — tizimni belgilangan repozitoriylardan (odatda faqat xavfsizlik) jadval asosida mustaqil yangilab borish uchun Ubuntu’ning rasmiy paketi. Uni quyidagicha o'rnating:
Asosiy konfiguratsiya /etc/apt/apt.conf.d/50unattended-upgrades da turadi:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";
Allowed-Originsqaysi manbalar avtomatik yangilanishga loyiq ekanini belgilaydi — sukut bo'yicha odatda faqat-securityqatlami;-updatesfaqat administratorning ataylab qilgan tanlovi bilan qo'shiladi;Automatic-Rebootagar yangilanish talab qilsa, tizim o'zini avtomatik qayta yuklashi kerakmi-yo'qmi, shuni boshqaradi.
Danger
Automatic-Reboot "true" — production serverda ehtiyotkorlik bilan ishlatiladigan sozlama: kernel patch’i o'rnatilgach, u mashinani so'ramasdan qayta yuklashi mumkin. Agar bu serverda uzoq davom etadigan jarayonlar yoki xizmatdagi ko'rinadigan uzilishni minimal darajada ushlab turish muhim bo'lsa, buni false qoldiring va qayta yuklashni quyida ko'rib chiqiladigan usul bilan rejalashtirilgan texnik xizmat oynasida qo'lda bajaring. Agar avtomatik qayta yuklash haqiqatan kerak bo'lsa ham, uni Automatic-Reboot-Time yordamida aniq, trafik kam bo'lgan vaqtga (masalan, tunga) bog'lang.
Yoqilgan yoki yoqilmaganini tekshiring:
Ikkinchi buyruq odatda shuni ko'rsatadi:
1 yoqilgan, 0 o'chirilgan degani. Bu fayl har kuni ishlaydigan, systemd timer orqali boshqariladigan mexanizmni yoqadi. U ruhan keyinroq Cron asoslari maqolasida ko'riladigan rejalashtirish tushunchasiga o'xshaydi, lekin faqat apt ga xos.
Qayta yuklashni talab qiladigan yangilanishlar
Kernel, glibc yoki ayrim asosiy kutubxonalar yangilanganda o'zgarish faqat qayta yuklashdan keyin to'liq kuchga kiradi — shu orada ishlab turgan jarayon xotirada kodning eski nusxasini saqlab turadi. Ubuntu buni maxsus belgi fayli bilan bildiradi:
Agar mavjud bo'lsa:
Agar mavjud bo'lmasa, cat "No such file or directory" deb xabar beradi — bu yaxshi belgi, ya’ni hozir qayta yuklash talab qilinmaydi. Aynan qaysi paket bu talabni keltirib chiqarganini ko'rish uchun:
Tip
Bu ikki faylni monitoringingizga ulang — kunlik cron tekshiruvi yoki mavjud monitoring vositasi orqali. Bu production server qayta yuklashga muhtojligini qo'lda unutib qo'ymaslikning oddiy va ishonchli usuli.
Qayta yuklash talab qilinganda uni darhol bajarish o'rniga rejalashtirish standart amaliyot:
+5 qayta yuklash 5 daqiqadan keyin bo'lishini bildiradi va ulangan foydalanuvchilarga ogohlantirish xabari yuboriladi. Uni bekor qilish uchun:
Qaysi xizmatlarni qayta ishga tushirish kerak: needrestart
Kerneldan tashqari, ko'p paket yangilanishlari (masalan, openssl ning yangi versiyasi) faqat shu kutubxonadan foydalanayotgan ishlab turgan jarayon qayta ishga tushirilgandan keyin to'liq kuchga kiradi — aks holda jarayon kutubxonaning eski nusxasini xotirada saqlab turaveradi. Buni qo'lda kuzatish amalda qiyin, shuning uchun needrestart dan foydalaning:
Namunaviy chiqish:
Bu /proc fayl tizimi maqolasida ko'rilgan g'oyaning to'g'ridan-to'g'ri amaliy qo'llanishi: needrestart /proc/*/maps dan eski, o'chirilgan, lekin hali murojaat qilinayotgan kutubxona nusxalarini qidiradi va qaysi jarayon hali ham ularga bog'liq ekanini aniqlaydi.
Warning
Ko'p .deb paketlarining o'rnatish skriptlari yangilanish paytida tegishli xizmatni avtomatik qayta ishga tushiradi, lekin bu har doim ham kafolatlanmagan — ayniqsa yangilangan paket qaysi xizmat unga bog'liqligini bevosita bilmaydigan oddiy kutubxona bo'lsa. Har qanday yangilanishdan keyin muntazam ravishda needrestart ni ishga tushirish eskirgan kutubxona bilan hali ham ishlayotgan xizmatni aniqlashning ishonchli usuli.
apt-mark hold: yangilanishni ataylab o'tkazib yuborish
apt va repozitoriylar maqolasida ko'rilgan apt-mark hold production’da alohida ahamiyat kasb etadi: agar ilovangiz muayyan versiyaga (masalan, ma’lumotlar bazasi drayveriga) bog'liqligi tasdiqlangan bo'lsa, o'sha paketni ataylab joriy versiyasida saqlab qolishingiz mumkin:
Bu sozlama unattended-upgrades bilan birga ham hurmat qilinadi — hold qilingan paketni avtomatik yangilanishlar ham o'tkazib yuboradi. Lekin uni cheksiz muddatga unutib qoldirish xavfli: hold qilingan paket xavfsizlik patch’larini ham olmay qo'yadi, shuning uchun hold qilingan paketlar ro'yxatini vaqti-vaqti bilan ko'rib chiqing:
Asosiy versiyani yangilash: do-release-upgrade
Bir Ubuntu LTS versiyasidan keyingisiga o'tish (masalan, 22.04 dan 24.04 ga) apt upgrade/full-upgrade bilan bajarilmaydi — buning uchun maxsus vosita, do-release-upgrade ishlatiladi, chunki bu amal yuzlab paketlarni almashtiradi va konfiguratsiya formati o'zgarishlarini ham o'z ichiga olishi mumkin.
Danger
do-release-upgrade — bu modulda ko'rib chiqilgan eng og'ir va eng keng ta’sirli amal. Uni hech qachon production serverda tayyorgarliksiz to'g'ridan-to'g'ri ishga tushirmang:
- avval snapshot yoki to'liq zaxira nusxa oling (disk darajasida yoki bulut provayderingizning VM snapshot vositasi orqali);
- avval uni bir xil konfiguratsiyali staging serverda to'liq sinab ko'ring;
- jarayon davomida SSH ulanishi uzilib qolsa, zaxira kirish yo'lini (masalan, konsolga kirish) tayyorlab qo'ying —
do-release-upgradeodatda buni o'zi so'raydi; - jarayonni faqat rejalashtirilgan, yetarlicha uzun texnik xizmat oynasida boshlang — u bir necha soat davom etishi mumkin;
- biror narsa noto'g'ri ketsa, tayyorlangan zaxira nusxadan tiklash eng ishonchli "rollback" strategiyasi, chunki qisman yangilangan tizimni ortga qaytarishga urinish ko'pincha ishonchsiz.
Amaliy vaziyat: haftalik yangilanish tekshiruvi
Muammo. Siz kichik production serverni boshqarasiz va har hafta uning xavfsizlik holatini qo'lda ko'rib chiqib, kerak bo'lganda yangilanishlarni rejalashtirilgan oynada qo'llaysiz.
1-qadam. Qanday yangilanishlar mavjudligini ko'ring (hali hech narsa o'zgarmaydi).
Listing... Done
nginx/noble-security 1.24.0-2ubuntu7.1 amd64 [upgradable from: 1.24.0-2ubuntu7]
openssl/noble-security 3.0.13-0ubuntu3.4 amd64 [upgradable from: 3.0.13-0ubuntu3.3]
Ikkala paket ham noble-security dan keladi — ya’ni bular kechiktirilmasligi kerak bo'lgan xavfsizlik patch’lari.
2-qadam. O'zgarishni simulyatsiya qiling.
3-qadam. Yangilanishni qo'llang.
4-qadam. Qayta yuklash kerakmi-yo'qmi, tekshiring.
5-qadam. Qaysi xizmatlarni qayta ishga tushirish kerakligini tekshiring.
Tekshiring:
Bo'sh natija har bir mavjud yangilanish muvaffaqiyatli qo'llanganini tasdiqlaydi.
Xulosa. Haftalik tekshiruv beshta qisqa buyruqdan iborat, lekin ularning tartibi muhim: nima o'zgarishini ko'ring, uni qo'llang, so'ng qayta yuklash yoki xizmatni qayta ishga tushirish kerakmi, tekshiring — hech qachon "yangiladim va unutdim" emas.
Keng tarqalgan xatolar
Yangilanishdan keyin xizmatni qayta ishga tushirishni unutish
Paket yangilangan, lekin ishlab turgan jarayon kutubxonaning eski nusxasidan foydalanishda davom etmoqda — tashqaridan hammasi joyida ko'rinishi mumkin, aslida esa xizmat hali ham eski, ehtimol zaif kod bilan ishlayapti. Har bir yangilanishdan keyin needrestart ni muntazam odatga aylantiring.
unattended-upgrades ni yoqib, keyin uni boshqa hech qachon tekshirmaslik
Avtomatik yangilanishlar sozlangandan keyin ular aslida nimani qo'llayotganini hech qachon ko'rib chiqmaslik — jumladan /var/log/unattended-upgrades/unattended-upgrades.log ni hech qachon tekshirmaslik — muammoni kerak bo'lganidan ancha kech aniqlashga olib keladi.
Asosiy versiyani zaxira nusxasiz yangilash
do-release-upgrade ni oldindan snapshot olmasdan ishga tushirish, agar jarayon uzilib qolsa yoki konfiguratsiya nomuvofiqligiga duch kelsa, tizimni ishlamaydigan holatda qoldirish xavfini tug'diradi va tayyorlangan zaxira nusxasiz ishonchli qaytish yo'li bo'lmaydi.
Hold qilingan paketni butunlay unutib qo'yish
Hold qilingan paket xavfsizlik patch’larini olmaydi. apt-mark showhold ni vaqti-vaqti bilan tekshirmaslik tizimni asta-sekin ma’lum zaifliklar oldida ochiq qoldiradi.
Mashqlar
- Tizimingizda nechta yangilanish kutib turganini
apt list --upgradablebilan ko'ring, so'ng har bir paketning kelib chiqishiniapt-cache policy <package>bilan aniqlab, xavfsizlik yangilanishlarini oddiylaridan ajrating. - Tizimingizda avtomatik yangilanishlar yoqilgan-yoqilmaganini
systemctl status unattended-upgrades.servicevacat /etc/apt/apt.conf.d/20auto-upgradesbilan tekshiring. cat /var/run/reboot-required 2>/dev/nullva (agar o'rnatilgan bo'lsa)sudo needrestartni ishga tushiring va tizimingiz hozir qayta yuklash yoki xizmatni qayta ishga tushirishni talab qiladimi, aniqlang — bu buyruqlar faqat tekshiradi, hech narsani o'zgartirmaydi.
Mashqni bajardim deyish uchun: har bir mashq uchun xavfsizlik yangilanishini oddiysidan aniq ajrata olishingiz, tizimingiz hozir qayta yuklashni talab qiladimi-yo'qmi, aniq ayta olishingiz va har qanday asosiy versiya yangilanishidan oldin zaxira nusxa nega zarurligini asoslab bera olishingiz kerak.
Xulosa
Production serverni yangilash boshqa joylardagi kabi aynan o'sha apt upgrade buyrug'idan foydalanadi, lekin uning atrofidagi yondashuv butunlay boshqacha: xavfsizlik yangilanishlarini oddiylaridan ajratish, avtomatlashtirishni (unattended-upgrades) ataylab sozlash, qayta yuklash yoki xizmatni qayta ishga tushirish kerakligini tekshirish, hold qilingan paketlarni boshqarish va asosiy versiyaga o'tishdan oldin doim zaxira nusxa olish. Bularning hammasi bitta maqsadga xizmat qiladi: yangilanishlarni kutilmagan uzilishlar manbai emas, oldindan aytib bo'ladigan jarayonga aylantirish.
Bu modul Debian/Ubuntu ekotizimida paketning butun hayot siklini qamrab oldi — asosiy tushunchalardan apt/dpkg juftligiga, Snap’ga va nihoyat production yangilanish siyosatigacha. Keyingi maqola — RPM, YUM va DNF xuddi shu g'oyalarni RHEL oilasida (Rocky Linux, AlmaLinux, Fedora) qanday ko'rinishini ko'rib chiqadi. Bu aralash muhitda ishlaydigan har bir kishi uchun zarur bilim.
Manbalar
- Ubuntu Server hujjatlari: avtomatik yangilanishlar (
unattended-upgrades): https://ubuntu.com/server/docs/automatic-updates - Ubuntu Server hujjatlari: paketlarni boshqarish: https://ubuntu.com/server/docs/package-management
- Debian Wiki: UnattendedUpgrades: https://wiki.debian.org/UnattendedUpgrades
- Ubuntu qo'llanma sahifasi:
do-release-upgrade(8): https://manpages.ubuntu.com/manpages/noble/man8/do-release-upgrade.8.html - Ubuntu Launchpad: needrestart: https://launchpad.net/ubuntu/+source/needrestart
- Linux man-pages:
apt-get(8): https://man7.org/linux/man-pages/man8/apt-get.8.html