Una volta avviato il kernel viene eseguito il processo di init
Init è il padre di tutti i processi, il suo ruolo principale consiste nel gestire il lancio di tutti i programmi necessari per rendere il sistema attivo, creando i processi a partire dal suo file di configurazione: /etc/inittab.
Nell'inittab vengono definite le directory con gli script di avvio per i diversi runlevel (stati del sistema, in cui possono girare determinati programmi), il runlevel di default, altri script e comandi che vengono eseguiti al boot o in condizioni particolari.Ogni sistema Unix gestisce con file e procedure diverse il processo di boot, ma tutti si basano su Init e il suo file di configurazione
inittab
. Per cui basta analizzare questo file e capirne la logica per poter capire come viene caricato il sistema ed intervenire dove necessario in caso di problemi.A secondo del RunLevel oltre a procedure comuni verranno poi eseguire le procedure esistenti nelle cartelle /etc denominate rcX.d dove al posto di X ci sara' il numero di runlevel
In sostanza per esempio, visto che 5 e' runlevel di default alla fine verra' eseguito tutto cio' che e' presente in /etc/rc5.d ( avviato i processi che iniziano con S e killati-disattivati i processi che iniziano con K )
Esempio del contenuto della cartella rc5.d in (Linux Mint)
totale 20
drwxr-xr-x 2 root root 4096 2008-10-01 11:54 .
drwxr-xr-x 142 root root 12288 2008-10-01 08:59 ..
lrwxrwxrwx 1 root root 22 2008-06-27 14:28 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root 14 2008-06-27 14:28 K20apmd -> ../init.d/apmd
lrwxrwxrwx 1 root root 23 2008-06-27 14:28 K20nvidia-kernel -> ../init.d/nvidia-kernel
lrwxrwxrwx 1 root root 21 2008-06-27 14:28 K99laptop-mode -> ../init.d/laptop-mode
-rw-r--r-- 1 root root 556 2008-04-19 07:05 README
lrwxrwxrwx 1 root root 16 2008-06-23 09:27 S01apport -> ../init.d/apport
lrwxrwxrwx 1 root root 19 2008-06-23 09:27 S01policykit -> ../init.d/policykit
lrwxrwxrwx 1 root root 17 2008-06-23 09:27 S05vbesave -> ../init.d/vbesave
lrwxrwxrwx 1 root root 15 2008-06-23 09:27 S10acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root 18 2008-06-23 09:27 S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx 1 root root 34 2008-06-23 09:27 S10xserver-xorg-input-wacom -> ../init.d/xserver-xorg-input-wacom
lrwxrwxrwx 1 root root 15 2008-06-23 09:27 S11klogd -> ../init.d/klogd
lrwxrwxrwx 1 root root 23 2008-06-23 09:27 S12915resolution -> ../init.d/915resolution
lrwxrwxrwx 1 root root 14 2008-06-23 09:27 S12dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root 13 2008-06-24 13:57 S16ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root 22 2008-06-23 09:27 S18avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root 16 2008-06-23 09:27 S19cupsys -> ../init.d/cupsys
lrwxrwxrwx 1 root root 20 2008-06-23 09:47 S20atieventsd -> ../init.d/atieventsd
lrwxrwxrwx 1 root root 18 2008-06-23 09:27 S20festival -> ../init.d/festival
lrwxrwxrwx 1 root root 22 2008-06-23 09:27 S20hotkey-setup -> ../init.d/hotkey-setup
lrwxrwxrwx 1 root root 17 2008-06-23 09:27 S20makedev -> ../init.d/makedev
lrwxrwxrwx 1 root root 19 2008-06-23 09:27 S20powernowd -> ../init.d/powernowd
lrwxrwxrwx 1 root root 15 2008-06-23 09:27 S20rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root 15 2008-06-23 09:27 S20samba -> ../init.d/samba
lrwxrwxrwx 1 root root 17 2008-06-24 10:03 S20vboxdrv -> ../init.d/vboxdrv
lrwxrwxrwx 1 root root 24 2008-06-24 10:03 S20virtualbox-ose -> ../init.d/virtualbox-ose
lrwxrwxrwx 1 root root 17 2008-07-29 17:02 S20winbind -> ../init.d/winbind
lrwxrwxrwx 1 root root 16 2008-06-23 09:27 S24dhcdbd -> ../init.d/dhcdbd
lrwxrwxrwx 1 root root 13 2008-09-09 13:43 S24hal -> ../init.d/hal
lrwxrwxrwx 1 root root 19 2008-06-23 09:27 S25bluetooth -> ../init.d/bluetooth
lrwxrwxrwx 1 root root 20 2008-06-23 09:27 S25pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root 13 2008-06-23 10:15 S30gdm -> ../init.d/gdm
lrwxrwxrwx 1 root root 17 2008-06-23 09:27 S89anacron -> ../init.d/anacron
lrwxrwxrwx 1 root root 13 2008-06-23 09:27 S89atd -> ../init.d/atd
lrwxrwxrwx 1 root root 14 2008-06-23 09:27 S89cron -> ../init.d/cron
lrwxrwxrwx 1 root root 24 2008-06-23 15:00 S90binfmt-support -> ../init.d/binfmt-support
lrwxrwxrwx 1 root root 17 2008-06-23 09:27 S98usplash -> ../init.d/usplash
lrwxrwxrwx 1 root root 18 2008-06-23 09:27 S99rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root 19 2008-06-23 09:27 S99rmnologin -> ../init.d/rmnologin
Approfondimenti:
RunLevel
Linux utilizza il metodo, che si basa su differenti runlevel, astrazioni software per indicare diversi stati della macchina in cui possono girare diversi programmi.
In genere su Linux sono utilizzati i seguenti livelli:
Runlevel 0 :
/etc/rc.d/rc0.d
Questo runlevel avvia la sequenza di arresto del sistema (shutdown)Runlevel 1:
/etc/rc.d/rc1.d
Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato.Runlevel 2:
/etc/rc.d/rc2.d
Rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing.Runlevel 3:
/etc/rc.d/rc3.d
In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi.Runlevel 4:
/etc/rc.d/rc4.d
Inutilizzato. Può essere dedicato ad usi personaliRunlevel 5:
/etc/rc.d/rc5.d
E' il runlevel predefinito quando si vuole avviare Linux in modalità graficaRunlevel 6:
/etc/rc.d/rc6.d
Il runlevel 6 è quello di reboot.Lo script
/etc/rc.d/rc
gestisce quali processi far partire a seconda del runlevel, andando ad analizzare le singole directory /etc/rc.d/rc#.d.In queste directory esistono una serie di symlink con nomi del tipo S12syslog o K65identd che puntano a degli script con nomi tipo /etc/rc.d/init.d/syslog o /etc/rc.d/init.d/identd.
/etc/rc.d/rc a seconda della directory corrispondente al runlevel da caricare fa partire tutti gli script che iniziano con S e fa chiudere tutti quelli che iniziano con K, eseguendoli nell'ordine indicato dal numero presente nei nomi dei file.
Gli script che di fatto permettono di gestire l'avvio o lo stop di un servizio sono quindi nella directory
/etc/rc.d/init.d/
e possono essere utilizzati direttamente dall'utente per gestire i singoli processi.Per esempio: /etc/rc.d/init.d/httpd start fa partire il server Web e /etc/rc.d/init.d/stop lo fa stoppare.
Se abbiamo il file (link a ../init/httpd ) /etc/rc.d/rc3.d/S85httpd, quindi, avremo un server web avviato quando la macchina è al run-level3 (runlevel di default per un server, che non ha bisogno di Xwindows).
Se vogliamo evitare che venga avviato un server web, bastera rinominare il file, sostituendo la K
alla S:
mv /etc/rc.d/rc3.d/S85httpd /etc/rc.d/rc3.d/K85httpd
Nel fare queste operazioni va sempre considerato il numero dopo la prima lettera, che determina l'ordine di esecuzione degli script.
Approfondimenti tratti e integrati da: http://openskill.info/topic.php?ID=25
Roberto Lissandrin