9-bo‘lim

Paket boshqaruvi

apt va dpkg, paket ichida nima bor, sozlama fayllarining taqdiri va xavfsizlik yangilanishlari.

🕑 21 daqiqa o‘qish 📄 1 444 so‘z 👁 1 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Ikki daraja: dpkg va apt
  2. Paket ichida nima bor
  3. O'rnatish va ro'yxat
  4. remove va purge farqi
  5. Sozlama fayllari nima uchun alohida
  6. Ombor manbalari
  7. Xavfsizlik yangilanishlari
  8. Versiyani qotirib qo'yish
  9. Serverga nima o'rnatilgan
  10. Xulosa

Serverga dasturni "yuklab olib o'rnatmaysiz". Uni paket menejeri o'rnatadi: u bog'liqliklarni hal qiladi, imzoni tekshiradi, fayllarni ro'yxatga oladi va keyin ularni izsiz o'chira oladi.

Ikki daraja: dpkg va apt #

Paket boshqaruvining ikki qatlami apt Omborlardan qidiradi va yuklab oladi - bog'liqliklarni o'zi hal qiladi GPG imzosini tekshiradi - yangilanishlarni rejalashtiradi .deb faylni uzatadi dpkg Bitta .deb faylni ochadi va fayllarni joyiga qo'yadi Ro'yxatni yuritadi: qaysi fayl qaysi paketdan - bog'liqlikni HAL QILMAYDI Fayl tizimi /usr/bin /etc /usr/lib /usr/share/doc /var/lib/dpkg/status - hamma narsaning ro'yxati
apt qaror qabul qiladi, dpkg bajaradi
VazifaBuyruq
Omborni yangilashapt update
Paket o'rnatishapt install nginx
Yangilashapt upgrade
Qidirishapt search / apt-cache policy
Bitta .deb faylni o'rnatishdpkg -i fayl.deb
Fayl qaysi paketdandpkg -S /yo'l
Paketda qaysi fayllardpkg -L paket
apt update va apt upgrade - ikki xil ish

Bu ikkisini chalkashtirish klassik xato.

BuyruqNima qiladi
apt updateFaqat ro'yxatni yangilaydi - hech nima o'rnatilmaydi
apt upgradeRo'yxatga qarab paketlarni yangilaydi
apt full-upgradeKerak bo'lsa paketlarni o'chiradi ham

apt update siz apt install eski versiyani o'rnatishga urinadi va "paket topilmadi" deb xato beradi.

Shuning uchun ibora doim juft: apt update && apt install ....

full-upgrade (eski nomi dist-upgrade) esa serverda ehtiyotkorlik talab qiladi - u ishlab turgan paketni o'chirib yuborishi mumkin.

Paket ichida nima bor #

Buni tushunishning eng yaxshi usuli - o'zimiz paket yasash.

Terminal
dpkg -P salom >/dev/null 2>&1

mkdir -p qurish/DEBIAN qurish/usr/local/bin qurish/etc/salom
cat > qurish/DEBIAN/control <<'EOF'
Package: salom
Version: 1.0.0
Architecture: all
Maintainer: Husanboy Qodirov <[email protected]>
Depends: bash
Section: utils
Priority: optional
Description: Oddiy salomlashuv dasturi
 Sinov uchun yaratilgan minimal paket.
EOF
printf '/etc/salom/salom.conf\n' > qurish/DEBIAN/conffiles
printf '#!/bin/bash\necho "Salom, ${1:-dunyo}!"\n' > qurish/usr/local/bin/salom
chmod 755 qurish/usr/local/bin/salom
printf 'til=uz\n' > qurish/etc/salom/salom.conf
dpkg-deb --build --root-owner-group qurish salom_1.0.0_all.deb >/dev/null

.deb fayl - bu ikki qismdan iborat arxiv: metama'lumot (DEBIAN/ katalogi) va fayllar daraxti.

Terminal
dpkg-deb -I salom_1.0.0_all.deb | sed 's/^ //' \
    | grep -E '^(Package|Version|Architecture|Depends|Section):'
Natija
Package: salom
Version: 1.0.0
Architecture: all
Depends: bash
Section: utils
Terminal
dpkg-deb -c salom_1.0.0_all.deb | awk '{print $1, $6}'
Natija
drwxr-xr-x ./
drwxr-xr-x ./etc/
drwxr-xr-x ./etc/salom/
-rw-r--r-- ./etc/salom/salom.conf
drwxr-xr-x ./usr/
drwxr-xr-x ./usr/local/
drwxr-xr-x ./usr/local/bin/
-rwxr-xr-x ./usr/local/bin/salom
DEBIAN/ dagi faylVazifasi
controlNomi, versiyasi, bog'liqliklari, tavsifi
conffilesQaysi fayllar sozlama hisoblanadi
preinst, postinstO'rnatishdan oldin/keyin ishlaydigan skript
prerm, postrmO'chirishdan oldin/keyin
md5sumsFayllarning nazorat summasi
postinst - paket root huquqida kod ishga tushiradi

.deb o'rnatilganda uning postinst skripti root huquqida bajariladi. Hech qanday cheklov yo'q.

Shuning uchun:

QoidaSabab
Faqat rasmiy omborlardan o'rnatingUlar imzolangan va kuzatiladi
Tasodifiy saytdagi .deb ni o'rnatmangU sizning serveringizda root
Yangi ombor qo'shishdan oldin o'ylangOmbor barcha paketlarni almashtira oladi
curl ... | sudo bash - eng yomoniKod ham tekshirilmaydi, ham root

Ombor qo'shish - bu "men bu tashkilotga serverimda root huquqini beraman" degani. Shu ma'noda o'ylab qaror qiling.

O'rnatish va ro'yxat #

Terminal
dpkg -i salom_1.0.0_all.deb 2>&1 | tail -2
dpkg -l salom | tail -1
Natija
Unpacking salom (1.0.0) ...
Setting up salom (1.0.0) ...
ii  salom          1.0.0        all          Oddiy salomlashuv dasturi

Birinchi ustundagi ikki harf - paketning holati:

KodMa'no
iiO'rnatilgan va sozlangan - normal holat
iUOchilgan, lekin sozlanmagan
rcO'chirilgan, lekin sozlamalari qolgan
iFSozlash yarim yo'lda to'xtagan
Terminal
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
salom Husanboy
dpkg -L salom | grep -v '^/\.$'
Natija
Salom, Husanboy!
/etc
/etc/salom
/etc/salom/salom.conf
/usr
/usr/local
/usr/local/bin
/usr/local/bin/salom

Teskari savol - "bu fayl qayerdan keldi?":

Terminal
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
dpkg -S /usr/local/bin/salom
Natija
salom: /usr/local/bin/salom
dpkg -S - "bu fayl nima uchun bu yerda?"

Serverda notanish fayl ko'rsangiz, birinchi savol - u qaysi paketdan kelgani.

JavobMa'no
paket: /yo'lPaketdan kelgan - normal
no path found matching patternHech qaysi paketdan emas

Ikkinchi javob har doim ham yomon emas: /etc dagi sizning sozlamalaringiz, /var/www dagi sayt fayllari ham paketdan emas.

Lekin /usr/bin yoki /usr/sbin da paketga tegishli bo'lmagan fayl topilsa - buni tekshirish kerak.

remove va purge farqi #

Bu farq serverda haqiqiy ahamiyatga ega.

Terminal
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
dpkg -r salom >/dev/null 2>&1
echo "--- ikkilik fayl:"; ls /usr/local/bin/salom 2>&1
echo "--- sozlama:";    ls /etc/salom/salom.conf 2>&1
echo "--- holat:";      dpkg -l salom | tail -1
Natija
--- ikkilik fayl:
ls: cannot access '/usr/local/bin/salom': No such file or directory
--- sozlama:
/etc/salom/salom.conf
--- holat:
rc  salom          1.0.0        all          Oddiy salomlashuv dasturi

Dastur o'chdi, sozlama qoldi, holat rc bo'ldi.

Terminal
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
dpkg -P salom >/dev/null 2>&1
echo "--- sozlama:"; ls /etc/salom/salom.conf 2>&1
echo "--- holat:";   dpkg -l salom 2>&1 | tail -1
Natija
--- sozlama:
ls: cannot access '/etc/salom/salom.conf': No such file or directory
--- holat:
dpkg-query: no packages found matching salom
BuyruqDasturSozlamaHolat
apt remove / dpkg -rO'chadiQoladirc
apt purge / dpkg -PO'chadiO'chadiYo'q
apt autoremoveKeraksiz bog'liqliklar--
rc holatidagi paketlar jimgina to'planadi

Yillar davomida serverda o'nlab rc paket to'planib qoladi. Ularning fayllari /etc ni ifloslantiradi va eski sozlamalar yangi o'rnatishda qayta ishlatilib, kutilmagan xatti-harakat beradi.

Ularni topish:

Terminal
dpkg -l | awk '$1 == "rc" {print $2}'

Va tozalash:

Terminal
dpkg -l | awk '$1 == "rc" {print $2}' | xargs -r sudo dpkg -P

Nima uchun bu muhim: siz apt remove nginx qilib, keyin apt install nginx qilsangiz, eski nginx.conf qaytib keladi - siz esa yangi standart sozlamani kutgan bo'lasiz.

Sozlama fayllari nima uchun alohida #

conffiles da sanab o'tilgan fayllar maxsus muomala ko'radi:

Vaziyatdpkg nima qiladi
Siz o'zgartirmagansizJimgina yangi versiya bilan almashtiradi
Siz o'zgartirgansiz, paketda ham o'zgarganSo'raydi
Siz o'zgartirgansiz, paketda o'zgarmaganSizniki qoladi
Yangilanishdagi "Configuration file ... " savoli

Yangilanish vaqtida shunday savol chiqishi mumkin:

Natija
Configuration file '/etc/nginx/nginx.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it?
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation

Hech qachon ko'r-ko'rona Y bosmang - sizning sozlamangiz yo'qoladi.

To'g'ri tartib: avval D bilan farqni ko'ring. Odatda N (o'zingiznikini saqlash) to'g'ri javob, keyin esa yangi versiyadagi foydali o'zgarishlarni qo'lda ko'chirasiz.

Avtomatik yangilanishda bu savol chiqmasligi kerak - shuning uchun unattended-upgrades standart holda sozlama fayllariga tegmaydi.

Ombor manbalari #

Terminal
head -1 /etc/apt/sources.list
Natija
deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware

Satr to'rt qismdan iborat:

QismMisoldaMa'no
TurdebIkkilik paketlar (deb-src - manba kodi)
Manzilhttp://http.kali.org/kaliOmbor URL manzili
Nashrkali-rollingDistributiv versiyasi (noble, bookworm)
Komponentlarmain contrib ...Litsenziya bo'yicha bo'limlar

Ubuntu Server da bu odatda shunday ko'rinadi:

Natija
deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe
deb http://security.ubuntu.com/ubuntu noble-security main restricted universe
noble-security qatorini hech qachon o'chirmang

Uchta ombordan har biri boshqa vazifani bajaradi:

OmborNima keladi
nobleNashr paytidagi asl versiyalar - o'zgarmaydi
noble-updatesXato tuzatishlari
noble-securityXavfsizlik yangilanishlari

Ba'zan "server barqaror bo'lsin" degan niyat bilan updates o'chiriladi. Agar shu bilan birga security ham o'chsa - server ochiq zaifliklar bilan qolib ketadi.

security har doim yoqiq bo'lishi kerak.

Xavfsizlik yangilanishlari #

Serverda faqat xavfsizlik yangilanishlarini avtomatik o'rnatish - eng yaxshi muvozanat.

Terminal
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Sozlama /etc/apt/apt.conf.d/50unattended-upgrades da:

Natija
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Mail "[email protected]";
SozlamaNima uchun shunday
Faqat -securityBoshqa yangilanishlar ilovani buzishi mumkin
Automatic-Reboot "false"Server o'zi qayta yuklanmasin
MailNima yangilangani haqida xabar keladi
Yadro yangilangach qayta yuklash kerak

Ba'zi yangilanishlar (yadro, glibc, systemd) faqat qayta yuklashdan keyin kuchga kiradi.

Buni tekshirish:

BuyruqNima ko'rsatadi
ls /var/run/reboot-requiredFayl bor bo'lsa - qayta yuklash kerak
cat /var/run/reboot-required.pkgsQaysi paketlar sababli
needrestartQaysi xizmatlarni qayta ishga tushirish kerak

Ikkinchisi muhimroq: ko'p hollarda butun serverni qayta yuklash shart emas, faqat bir necha xizmatni qayta ishga tushirish yetarli.

needrestart Ubuntu 22.04 dan boshlab standart o'rnatilgan va apt upgrade dan keyin o'zi ishga tushadi.

Versiyani qotirib qo'yish #

Ba'zan paket yangilanmasligi kerak - masalan ilova aniq versiyaga bog'langan.

Terminal
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
apt-mark hold salom
apt-mark showhold
apt-mark unhold salom >/dev/null
apt-mark showhold | wc -l
Natija
salom set on hold.
salom
0
hold - vaqtinchalik chora, doimiy yechim emas

Qotirilgan paket xavfsizlik yangilanishlarini ham olmaydi.

Shuning uchun:

AmaliyotIzoh
hold sababini hujjatlashtiringAks holda uni hech kim yechmaydi
Muddat belgilang"Ilova 2.0 chiqqach yechiladi"
apt-mark showhold ni tekshiruvga qo'shingUnutilgan hold topiladi

Eng ko'p uchraydigan xato: kimdir bir yil oldin paketni qotirib qo'ygan, sababini hech kim eslamaydi, va paket o'shandan beri yangilanmagan.

Serverga nima o'rnatilgan #

Terminal
dpkg-query -f '${binary:Package}\n' -W | wc -l | awk '{print ($1 > 100) ? "yuzdan ortiq paket" : "kam paket"}'
Natija
yuzdan ortiq paket
SavolBuyruq
Barcha paketlardpkg-query -W -f='${Package}\n'
Qo'lda o'rnatilganlarapt-mark showmanual
Keraksiz bo'lib qolganlarapt autoremove --dry-run
Qaysi paket ko'p joy egallaydidpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn | head
O'rnatish tarixiless /var/log/apt/history.log
Serverni "toza" saqlash

Yangi serverda birinchi kuni paketlar ro'yxatini saqlab qo'ying:

Terminal
dpkg-query -W -f='${Package}\n' > /root/paketlar-boshlangich.txt

Bir necha oydan keyin diff bilan solishtirsangiz, nima qo'shilganini aniq ko'rasiz - jumladan siz o'rnatmagan narsalarni ham.

Bu 5-bo'limdagi setuid ro'yxati bilan bir xil g'oya: boshlang'ich holatni yozib oling, keyin farqni kuzating.

Amaliy topshiriq
  1. DEBIAN/control bilan minimal .deb paket yasang.
  2. dpkg-deb -I va -c bilan uning ichini ko'ring.
  3. Paketni o'rnating va dpkg -l holatini o'qing.
  4. dpkg -L va dpkg -S bilan fayllarni ikki tomondan tekshiring.
  5. conffiles qo'shing va remove dan keyin sozlama qolishini ko'ring.
  6. purge bilan to'liq o'chiring.
  7. rc holatidagi paketlarni qidiring.
  8. sources.list satrining to'rt qismini nomlang.
  9. apt-mark hold va unhold ni sinab ko'ring.
  10. Paketlar ro'yxatini faylga saqlang.

Xulosa #

  • apt qaror qabul qiladi, dpkg bajaradi.
  • apt update faqat ro'yxatni yangilaydi - hech nima o'rnatmaydi.
  • .deb ichida control, conffiles va root huquqida ishlaydigan skriptlar bor.
  • Ombor qo'shish = o'sha tashkilotga serverda root berish.
  • ii normal, rc - o'chirilgan, lekin sozlamasi qolgan.
  • remove sozlamani qoldiradi, purge - o'chiradi.
  • rc paketlar jimgina to'planadi va eski sozlamani qaytaradi.
  • Yangilanishdagi konfiguratsiya savolida avval D (farq) ni ko'ring.
  • -security omborini hech qachon o'chirmang.
  • hold xavfsizlik yangilanishini ham to'xtatadi - sababini hujjatlang.

Keyingi bo'limda jarayonlarni ko'ramiz: ps, signallar va osilib qolgan dasturni to'g'ri to'xtatish.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.