9-bo‘lim
Paket boshqaruvi
apt va dpkg, paket ichida nima bor, sozlama fayllarining taqdiri va xavfsizlik yangilanishlari.
Ushbu bo‘lim mundarijasi
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 #
| Vazifa | Buyruq |
|---|---|
| Omborni yangilash | apt update |
| Paket o'rnatish | apt install nginx |
| Yangilash | apt upgrade |
| Qidirish | apt search / apt-cache policy |
Bitta .deb faylni o'rnatish | dpkg -i fayl.deb |
| Fayl qaysi paketdan | dpkg -S /yo'l |
| Paketda qaysi fayllar | dpkg -L paket |
apt update va apt upgrade - ikki xil ishBu ikkisini chalkashtirish klassik xato.
| Buyruq | Nima qiladi |
|---|---|
apt update | Faqat ro'yxatni yangilaydi - hech nima o'rnatilmaydi |
apt upgrade | Ro'yxatga qarab paketlarni yangilaydi |
apt full-upgrade | Kerak 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.
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.
dpkg-deb -I salom_1.0.0_all.deb | sed 's/^ //' \
| grep -E '^(Package|Version|Architecture|Depends|Section):'
Package: salom
Version: 1.0.0
Architecture: all
Depends: bash
Section: utils
dpkg-deb -c salom_1.0.0_all.deb | awk '{print $1, $6}'
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 fayl | Vazifasi |
|---|---|
control | Nomi, versiyasi, bog'liqliklari, tavsifi |
conffiles | Qaysi fayllar sozlama hisoblanadi |
preinst, postinst | O'rnatishdan oldin/keyin ishlaydigan skript |
prerm, postrm | O'chirishdan oldin/keyin |
md5sums | Fayllarning 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:
| Qoida | Sabab |
|---|---|
| Faqat rasmiy omborlardan o'rnating | Ular imzolangan va kuzatiladi |
Tasodifiy saytdagi .deb ni o'rnatmang | U sizning serveringizda root |
| Yangi ombor qo'shishdan oldin o'ylang | Ombor barcha paketlarni almashtira oladi |
curl ... | sudo bash - eng yomoni | Kod 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 #
dpkg -i salom_1.0.0_all.deb 2>&1 | tail -2
dpkg -l salom | tail -1
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:
| Kod | Ma'no |
|---|---|
ii | O'rnatilgan va sozlangan - normal holat |
iU | Ochilgan, lekin sozlanmagan |
rc | O'chirilgan, lekin sozlamalari qolgan |
iF | Sozlash yarim yo'lda to'xtagan |
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
salom Husanboy
dpkg -L salom | grep -v '^/\.$'
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?":
dpkg -i salom_1.0.0_all.deb >/dev/null 2>&1
dpkg -S /usr/local/bin/salom
salom: /usr/local/bin/salom
dpkg -S - "bu fayl nima uchun bu yerda?"Serverda notanish fayl ko'rsangiz, birinchi savol - u qaysi paketdan kelgani.
| Javob | Ma'no |
|---|---|
paket: /yo'l | Paketdan kelgan - normal |
no path found matching pattern | Hech 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.
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
--- 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.
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
--- sozlama:
ls: cannot access '/etc/salom/salom.conf': No such file or directory
--- holat:
dpkg-query: no packages found matching salom
| Buyruq | Dastur | Sozlama | Holat |
|---|---|---|---|
apt remove / dpkg -r | O'chadi | Qoladi | rc |
apt purge / dpkg -P | O'chadi | O'chadi | Yo'q |
apt autoremove | Keraksiz bog'liqliklar | - | - |
rc holatidagi paketlar jimgina to'planadiYillar 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:
dpkg -l | awk '$1 == "rc" {print $2}'
Va tozalash:
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:
| Vaziyat | dpkg nima qiladi |
|---|---|
| Siz o'zgartirmagansiz | Jimgina yangi versiya bilan almashtiradi |
| Siz o'zgartirgansiz, paketda ham o'zgargan | So'raydi |
| Siz o'zgartirgansiz, paketda o'zgarmagan | Sizniki qoladi |
Yangilanish vaqtida shunday savol chiqishi mumkin:
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 #
head -1 /etc/apt/sources.list
deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware
Satr to'rt qismdan iborat:
| Qism | Misolda | Ma'no |
|---|---|---|
| Tur | deb | Ikkilik paketlar (deb-src - manba kodi) |
| Manzil | http://http.kali.org/kali | Ombor URL manzili |
| Nashr | kali-rolling | Distributiv versiyasi (noble, bookworm) |
| Komponentlar | main contrib ... | Litsenziya bo'yicha bo'limlar |
Ubuntu Server da bu odatda shunday ko'rinadi:
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'chirmangUchta ombordan har biri boshqa vazifani bajaradi:
| Ombor | Nima keladi |
|---|---|
noble | Nashr paytidagi asl versiyalar - o'zgarmaydi |
noble-updates | Xato tuzatishlari |
noble-security | Xavfsizlik 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.
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Sozlama /etc/apt/apt.conf.d/50unattended-upgrades da:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Mail "[email protected]";
| Sozlama | Nima uchun shunday |
|---|---|
Faqat -security | Boshqa yangilanishlar ilovani buzishi mumkin |
Automatic-Reboot "false" | Server o'zi qayta yuklanmasin |
Mail | Nima yangilangani haqida xabar keladi |
Ba'zi yangilanishlar (yadro, glibc, systemd) faqat qayta
yuklashdan keyin kuchga kiradi.
Buni tekshirish:
| Buyruq | Nima ko'rsatadi |
|---|---|
ls /var/run/reboot-required | Fayl bor bo'lsa - qayta yuklash kerak |
cat /var/run/reboot-required.pkgs | Qaysi paketlar sababli |
needrestart | Qaysi 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.
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
salom set on hold.
salom
0
hold - vaqtinchalik chora, doimiy yechim emasQotirilgan paket xavfsizlik yangilanishlarini ham olmaydi.
Shuning uchun:
| Amaliyot | Izoh |
|---|---|
hold sababini hujjatlashtiring | Aks holda uni hech kim yechmaydi |
| Muddat belgilang | "Ilova 2.0 chiqqach yechiladi" |
apt-mark showhold ni tekshiruvga qo'shing | Unutilgan 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 #
dpkg-query -f '${binary:Package}\n' -W | wc -l | awk '{print ($1 > 100) ? "yuzdan ortiq paket" : "kam paket"}'
yuzdan ortiq paket
| Savol | Buyruq |
|---|---|
| Barcha paketlar | dpkg-query -W -f='${Package}\n' |
| Qo'lda o'rnatilganlar | apt-mark showmanual |
| Keraksiz bo'lib qolganlar | apt autoremove --dry-run |
| Qaysi paket ko'p joy egallaydi | dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn | head |
| O'rnatish tarixi | less /var/log/apt/history.log |
Yangi serverda birinchi kuni paketlar ro'yxatini saqlab qo'ying:
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.
DEBIAN/controlbilan minimal.debpaket yasang.dpkg-deb -Iva-cbilan uning ichini ko'ring.- Paketni o'rnating va
dpkg -lholatini o'qing. dpkg -Lvadpkg -Sbilan fayllarni ikki tomondan tekshiring.conffilesqo'shing varemovedan keyin sozlama qolishini ko'ring.purgebilan to'liq o'chiring.rcholatidagi paketlarni qidiring.sources.listsatrining to'rt qismini nomlang.apt-mark holdvaunholdni sinab ko'ring.- Paketlar ro'yxatini faylga saqlang.
Xulosa #
aptqaror qabul qiladi,dpkgbajaradi.apt updatefaqat ro'yxatni yangilaydi - hech nima o'rnatmaydi..debichidacontrol,conffilesva root huquqida ishlaydigan skriptlar bor.- Ombor qo'shish = o'sha tashkilotga serverda root berish.
iinormal,rc- o'chirilgan, lekin sozlamasi qolgan.removesozlamani qoldiradi,purge- o'chiradi.rcpaketlar jimgina to'planadi va eski sozlamani qaytaradi.- Yangilanishdagi konfiguratsiya savolida avval
D(farq) ni ko'ring. -securityomborini hech qachon o'chirmang.holdxavfsizlik yangilanishini ham to'xtatadi - sababini hujjatlang.
Keyingi bo'limda jarayonlarni ko'ramiz: ps, signallar va
osilib qolgan dasturni to'g'ri to'xtatish.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.