Init — Unix-like operatsion tizimda kernel ishga tushiradigan birinchi user-space process va system service’larni boshlash mexanizmi.
Init odatda PID 1ga ega.
U boot jarayonini davom ettiradi, service’larni ishga tushiradi, orphan processlarni qabul qiladi va tizimni tartibli o‘chirishga yordam beradi.
“Init” umumiy rolni bildiradi. Turli implementatsiyalar mavjud: System V init, BSD init, Upstart, OpenRC va systemd.
Kernel va init
ni tayyorlagach, init executable’ni ishga tushiradi.
Kernel command line orqali boshqa init ko‘rsatilishi mumkin.
Init topilmasa yoki ishga tushmasa, kernel panic yuz berishi mumkin.
PID 1 xususiyati
PID 1 oddiy processdan farqli semantikaga ega.
Vazifalari:
- orphan childlarni qabul qilish;
- zombie processlarni
wait()bilan yig‘ish; - signalni ehtiyotkor boshqarish;
- system shutdown;
- service lifecycle.
PID 1 tugasa, tizim ishlashni davom ettira olmaydi.
SysV init
System V init runlevel modelidan foydalanadi.
Runlevel tizimning umumiy holatini bildiradi.
Keng tarqalgan an’anaviy ma’nolar:
Aniq mapping distributivga bog‘liq.
/etc/inittab
Klassik SysV init konfiguratsiyasi /etc/inittab faylida bo‘lgan.
Unda:
- default runlevel;
- console getty;
- respawn process;
- boot script;
- Ctrl+Alt+Delete
kabi yozuvlar mavjud.
Zamonaviy distributivlar undan foydalanmasligi mumkin.
Init script
Service’lar shell scriptlar orqali boshqarilgan.
Odatdagi katalog:
/etc/init.d/
Script amallari:
- start;
- stop;
- restart;
- reload;
- status.
Runlevel kataloglaridagi symbolic linklar qaysi service qachon ishlashini belgilagan.
Start va kill linklar
SysV runlevel katalogida:
S20network
K80service
kabi linklar bo‘lgan.
S start, K stopni bildiradi.
Raqam tartibni belgilaydi.
Bu dependency’ni bilvosita tartib bilan boshqargan.
Single-user mode
Single-user rejim minimal service va administrator shell bilan maintenance uchun ishlatiladi.
Qo‘llanishlar:
- filesystem repair;
- password recovery;
- config tuzatish;
- disk maintenance.
Fizik kirish huquqi bo‘lgan shaxs bu rejimga kira olmasligi uchun bootloader va disk himoyasi kerak.
Getty
Init virtual console yoki serial terminalda getty processni ishga tushiradi.
Getty:
- terminalni sozlaydi;
- login prompt ko‘rsatadi;
- login dasturini chaqiradi;
- session tugasa qayta ishga tushadi.
Bu lokal TTY loginining klassik zanjiri.
Respawn
Init ma’lum process tugasa uni qayta ishga tushirishi mumkin.
Getty va muhim service’lar uchun ishlatilgan.
Process darhol crash qilsa, tez respawn loop tizimga yuk beradi. Zamonaviy init rate limit qo‘llaydi.
Dependency
Eski init scriptlar service dependency’ni:
- raqamli tartib;
- script ichidagi check;
- metadata;
- administrator konfiguratsiyasi
bilan boshqargan.
Parallel boot va dinamik dependency murakkab bo‘lgan.
Upstart
Upstart event-based init tizimi sifatida yaratilgan.
Service’lar aniq runlevel tartibidan tashqari hardware yoki network eventiga javoban ishga tushadi.
Keyinchalik ko‘p Linux distributiv systemdga o‘tgan.
OpenRC
OpenRC dependency-aware init tizimi bo‘lib, shell scriptlarga tayangan holda service boshqaradi.
U systemd bo‘lmagan ayrim distributivlarda ishlatiladi.
Init va service manager alohida komponent bo‘lishi mumkin.
Systemd
Systemd PID 1, service manager va boshqa system komponentlarni birlashtiradi.
U:
- unit dependency;
- parallel startup;
- socket activation;
- cgroup tracking;
- timer;
- journald;
- target
imkoniyatlarini beradi.
Systemd init rolini bajaradi, ammo “init” tushunchasidan kengroq.
Target va runlevel
Systemd targetlar eski runlevellarga o‘xshash umumiy holat beradi.
Misollar:
- rescue;
- multi-user;
- graphical;
- reboot;
- poweroff.
Compatibility symbolic linklar runlevel nomlarini targetga bog‘lashi mumkin.
Shutdown
Init tizim shutdownda:
- yangi loginlarni to‘xtatadi;
- service’larga SIGTERM yoki stop command yuboradi;
- timeoutdan keyin majburan yopadi;
- filesystemni sync va unmount qiladi;
- swapni o‘chiradi;
- reboot yoki poweroff qiladi.
Quvvatni to‘g‘ridan-to‘g‘ri uzish data yo‘qolishiga sabab bo‘lishi mumkin.
Orphan va zombie
Parent process tugasa child initga yoki subreaperga o‘tadi.
Init child tugaganda exit statusni yig‘adi.
Containerda application PID 1 bo‘lib, bu vazifani bajarmasa zombie processlar yig‘ilishi mumkin.
Emergency shell
Boot service dependency yoki filesystem xatosida init emergency shellga o‘tishi mumkin.
Bu minimal muhitda:
- log;
- mount;
- config;
- unit;
- disk
tekshiriladi.
Root filesystem read-only bo‘lishi mumkin.
Xavfsizlik
Init va service scriptlar yuqori huquqda ishlaydi.
Himoya:
- root-owned config;
- writable bo‘lmagan script;
- absolute path;
- service user;
- environment nazorati;
- minimal dependency;
- audit.
Init konfiguratsiyasidagi xato butun tizim bootiga ta’sir qiladi.
Diagnostika
Boot init bosqichida to‘xtasa:
- kernel init path;
- root filesystem;
- PID 1 log;
- service dependency;
- config syntax;
- failed mount;
- timeout;
- emergency target;
- console
tekshiriladi.
Boot dependency
Service ishga tushishi uchun faqat tartib emas, kerakli resursning tayyorligi muhim.
Masalan, database process boshlangan bo‘lishi mumkin, ammo hali connection qabul qilmaydi. Init tizimi readiness, socket activation yoki retry orqali buni boshqaradi.
Oddiy “5 soniya kutish” server tezligi va yukiga bog‘liq bo‘lib, ishonchli dependency emas.
Initramfs init
Asosiy root filesystemdan oldin initramfs ichida vaqtinchalik /init ishlaydi.
U:
- disk driverini yuklaydi;
- RAID yoki LVMni faollashtiradi;
- shifrlangan diskni ochadi;
- root filesystemni mount qiladi;
switch_rootorqali haqiqiy initga o‘tadi.
Shu bosqichdagi xato asosiy systemd unitlariga yetib bormaydi.
Container init
Container uchun to‘liq host init tizimi har doim kerak emas. Minimal init signalni applicationga uzatadi va zombie childlarni yig‘adi.
Bitta application process PID 1 vazifalarini to‘g‘ri bajarsa, qo‘shimcha init talab qilinmasligi mumkin.
Bog‘liq tushunchalar
PID 1, Boot, SysV init, Runlevel, Init script, Getty, Systemd, OpenRC, Service manager, Shutdown