Bosh sahifa Wiki Init

Init

InitUnix-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

Kernel:

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:

  • 0 — halt;
  • 1 — single-user;
  • 2–5 — distributivga xos multi-user rejimlar;
  • 6 — reboot.

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:

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:

  1. yangi loginlarni to‘xtatadi;
  2. service’larga SIGTERM yoki stop command yuboradi;
  3. timeoutdan keyin majburan yopadi;
  4. filesystemni sync va unmount qiladi;
  5. swapni o‘chiradi;
  6. 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:

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_root orqali 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