Il processo tradizionale di avvio (boot) prevede i seguenti passi:
Successivamente al caricamento di init vengono compiuti i seguenti passi:
La seconda parte del processo di avvio avviene in maniera diversa a seconda della distribuzione.
In particolare:
I due bootloader (caricatori del sistema operativo) più comunemente usati con Linux sono LILO (Linux Loader) e GNU GRUB (GRand Unified Bootloader):
lilo
Il file di configurazione di init è /etc/inittab: esso contiene informazioni sul runlevel di default, sul numero di terminali da attivare, sul trap della combinazione di tasti ctrl-alt-del ecc.
Un runlevel consiste nella definizione dello stato di un sistema mediante l'indicazione di quali programmi devono essere eseguiti (eventualmente, in quale ordine) e di quali servizi devono essere attivati.
Tradizionalmente, vengono individuati i seguenti runlevel:
Per sapere qual è il runlevel corrente si può impartire il comando runlevel
(che mostra anche il runlevel precedente, oppure N
se questo è assente).
$ runlevel
N 2
Per passare da un runlevel ad un altro si può usare il comando telinit
.
Gli script di avvio/terminazione dei servizi (o, in generale, dei programmi) da eseguire quando si entra o esce in un determinato runlevel sono posti nella directory /etc/init.d (Debian) o /etc/rc.d/init.d (RedHat).
Si tratta di script impostati in modo da poter essere invocati anche manualmente per avviare (parametro start
), terminare (parametro stop
), riavviare (parametro restart
) un servizio (oppure, con il parametro reload
, fargli rileggere il file di configurazione).
$ sudo /etc/init.d/apache2 start
* Starting web server apache2 [ OK ]
$ sudo /etc/init.d/apache2 reload
* Reloading web server config apache2 [ OK ]
$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 [ OK ]
$ sudo /etc/init.d/apache2 stop
* Stopping web server apache2 [ OK ]
Le varie distribuzioni mettono a disposizione "scorciatoie" per invocare questi script, come service
e invoke-rc.d
.
Cosa esattamente avviare quando il sistema entra in un particolare runlevel è determinato dai link simbolici presenti nella directory di quel runlevel.
I link simbolici hanno un nome che inizia per S (start) o per K (kill), più un numero che indica la priorità (utile se si vuole garantire che un determinato servizio parta solo dopo un altro).
$ ls /etc/rc2.d/
K74bluetooth S11klogd S20hotkey-setup S20samba S89anacron S99rc.local
README S12dbus S20incron S22consolekit S89atd S99rmnologin
S05vbesave S12hal S20makedev S23ntp S89cron S99stop-readahead
S10acpid S16ssh S20nvidia-kernel S24avahi-daemon S91apache2
S10powernowd.early S19cupsys S20postfix S24dhcdbd S98usplash
S10sysklogd S20apmd S20powernowd S30gdm S99acpi-support
S10xserver-xorg-input-wacom S20apport S20rsync S65firestarter S99laptop-mode
La configurazione dei runlevel può essere fatta:
La configurazione dei vari servizi può essere agevolmente effettuata con chkconfig, strumento tipico dei sistemi RedHat ma portato anche su Ubuntu.
$ sudo chkconfig --add verysimplewebserver
Adding system startup for /etc/init.d/verysimplewebserver ...
$ sudo chkconfig --del verysimplewebserver
Removing any system startup links for /etc/init.d/verysimplewebserver ...
$ sudo chkconfig --level 234 verysimplewebserver on
Adding system startup for /etc/init.d/verysimplewebserver ...
$ chkconfig --list | grep verysimplewebserver
verysimplewebserver 1:none 2:on 3:on 4:on 5:none 6:none S:none
Sotto Ubuntu, con l'opzione --dryrun
si può vedere quali comandi verrebbero eseguiti.
Gli script relativi ai servizi contengono delle informazioni, sotto forma di commento, che vengono utilizzate per sapere quali sono i livelli di priorità di default.
Le prime righe dello script httpd di un sistema Fedora 8:
#!/bin/bash
# httpd Startup script for the Apache HTTP Server
# chkconfig: - 85 15
Le prime righe dello script apache2 di un sistema Ubuntu 7.10:
#!/bin/sh -e
[snip]
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
I sistemi moderni (specialmente desktop e laptop) hanno bisogno di gestire la sequenza di avvio:
Sono state studiate diverse forme moderne di gestione della sequenza di avvio:
Nei sistemi che usano Upstart, la configurazione di init viene fatta attraverso i file presenti nella directory /etc/event.d.
Per spegnere il sistema si deve impartire il comando shutdown
.
$ sudo shutdown -h now # spegne il sistema immediatamente
$ sudo shutdown -r now # riavvia il sistema dopo averlo spento
$ sudo shutdown -t 10 # spegne il sistema dopo 10 secondi
Per altre opzioni interessanti, si veda shutdown(8)
.
Sono normalmente a disposizione anche le forme sintetiche halt
, reboot
e poweroff
.
find
).