Od Linux kernela do systemd targeta: kako sustav zaista pokreće Linux
Linux kernel u izvršnoj formi sastoji se od velikog broja datoteka.
Dvije grupe datoteka su ključne za njegovo funkcioniranje:
Glavna kernel datoteka – sadrži sve osnovne dijelove kernela, osim loadable modula.
Bootloader učitava ovu datoteku pri pokretanju sustava i od tog trenutka kernel preuzima potpunu kontrolu nad radom sustava.
Kernel datoteka se obično nalazi u direktoriju /boot.
Kernel moduli – to su dodatne funkcionalnosti kernela koje nisu dio glavne kernel datoteke.
Obično se pohranjuju u /lib/modules, s poddirektorijima za različite verzije kernela instalirane na sustavu.
Module se učitava i uklanja po potrebi.
Kompilacija i konfiguracija kernela
Prvi korak u izradi novog kernela je precizno identificiranje hardvera.
Da bismo znali koji su driveri i moduli potrebni, moramo jasno odrediti koje hardverske komponente sustav ima.
To možemo provjeriti kroz:
dokumentaciju hardvera
postojeće konfiguracijske datoteke kernela
vizualni pregled komponenti
specijalizirane alate poput lshw
Praktično pravilo prilikom konfiguracije kernela je da, ako nismo sigurni treba li neka opcija, bolje je uključiti je.
Suvišne funkcionalnosti malo usporavaju kompilaciju i zauzimaju prostor na disku, dok neiskorišteni moduli ne troše memoriju niti CPU tijekom rada sustava.
Bolje je napraviti malo “deblji” kernel nego riskirati da sustav uopće ne radi.
Kada znamo hardver i svrhu kernela (desktop, server, ugrađeni sustav), možemo početi s konfiguracijom.
U usporedbi s običnim softverom, kernel nudi puno više opcija.
Komandom make help unutar izvornog direktorija kernela dobivamo popis svih build targeta.
Opcije se mijenjaju s novim verzijama kernela.
Nakon konfiguracije, kernel se kompajlira i instalira.
Instalacija uključuje kopiranje kernel datoteke u /boot, instalaciju modula, generiranje inicijalnog RAM filesystema, ažuriranje bootloadera (npr. GRUB) i na kraju restart sustava.
Pokretanje Linuxa i systemd
Danas većina Linux sustava koristi systemd kao init sustav koji upravlja korisničkim prostorom i servisima.
Naziv je u skladu s Unix konvencijom dodavanja slova “d” na daemon.
Systemd je kompatibilan sa starijim SysV init i Upstart skriptama i postao je standard kod većine distribucija.
Osnovni koncept u systemdu je “unit” ili jedinica.
Jedinice predstavljaju resurse sustava i servise, poput servisa, soketa, uređaja, mountova i targeta.
Systemd podržava napredne mehanizme kao što su aktivacija putem soketa, D-Bus aktivacija, aktivacija po uređajima ili putanjama, snapshot sustava, upravljanje mountovima i automountima, paralelno pokretanje servisa, upravljanje ovisnostima kroz transakcije i kompatibilnost sa starijim SysV init skriptama.
Iako systemd zadržava kompatibilnost sa starijim init sustavima, postoje značajne razlike u arhitekturi.
Najvažnija je zamjena klasičnih runlevela s targetima.
Od runlevela do systemd targeta
Klasični Linux sustavi koristili su runlevele od 0 do 6.
Svaki runlevel predstavljao je unaprijed definirano stanje sustava s određenim servisima.
Systemd je to zamijenio target jedinicama čija imena završavaju s .target.
Targeti grupiraju druge jedinice prema ovisnostima.
Radi kompatibilnosti, systemd još uvijek ima alias-e za runlevele koji mapiraju na moderne targete.
To se može provjeriti s systemctl
list-unit-files | grep runlevel.
Ti aliasi postoje samo zbog starijih skripti; unutarnje, systemd radi isključivo s target jedinicama.
Zbog toga se korištenje runlevel komande ne preporučuje na sustavima s systemdom.
Bolje je koristiti systemctl list-units --type=target za pregled aktivnih targeta i stanja sustava.
Zadani target i prilagodba sustava
Zadani target u koji sustav pokreće možemo provjeriti komandom systemctl get-default.
Na grafičkim radnim stanicama to je obično graphical.target, koji ovisi o multi-user.target, sukobljava se s rescue modom i paralelno pokreće display manager.
Ovisnosti između targeta određuju sve servise potrebne za stabilan grafički rad.
Prilagodba sustava znači promijeniti koji target je zadani prilikom pokretanja.
Npr. sudo systemctl set-default multi-user.target se često koristi na serverima da se isključi grafičko sučelje i smanji potrošnja resursa.
Praktične razlike između SysV init i systemd
Iako systemd podržava SysV init skripte, postoje važne razlike:
systemd upravlja servisima isključivo preko systemctl
Samo servisi pokrenuti od systemda se mogu nadzirati i kontrolirati
Pri gašenju sustava se zaustavljaju samo aktivni systemd servisi
Standardni input za servise se preusmjerava na /dev/null
Servisi ne nasljeđuju varijable korisničkog okruženja
Svaki servis ima definirano vrijeme pokretanja
Ovisnosti starih init skripti tumače se iz LSB headera
Ove razlike čine systemd predvidljivijim, sigurnijim i lakšim za debug, ali zahtijevaju promjenu navika administratora.
Targeti kao moderni runleveli
Targeti su hijerarhijski i mogu ovisiti jedni o drugima.
Definiraju logička stanja sustava, a ne rigidne numeričke razine.
Primjeri:
multi-user.target – tekstualni multi-user sustav
graphical.target – dodaje grafičko sučelje
rescue.target – minimalni recovery mod
emergency.target – najniža razina za troubleshooting
Ova hijerarhija čini konfiguraciju fleksibilnijom, ali i apstraktnijom od starog sustava runlevela.
Zaključak
Linux startup se znatno promijenio – od jednostavnih runlevela do sofisticiranog target-based modela systemda.
Razumijevanje odnosa između kernela i njegovih modula, kompilacije i instalacije kernela, systemd jedinica i targeta te legacy runlevela i modernih targeta ključno je za svakog ozbiljnog Linux administratora.
Systemd može djelovati komplicirano u početku, ali nudi pouzdanost, brže pokretanje sustava, bolje upravljanje ovisnostima i snažnu kontrolu u runtime-u.
Njegovo savladavanje više nije opcija, već nužna vještina za moderne Linux sustave.


