Sei sulla pagina 1di 7

Servizi e manutenzione di

sistemi open-source Processo di avvio del sistema

Processo di Init

RunLevel
Avvio e arresto del sistema Esercizi

Ing. Andrea Alimonda

15/04/2007 Servizi e manutenzione di sistemi open source 1 15/04/2007 Servizi e manutenzione di sistemi open source 2

Avvio del sistema Avvio e arresto del sistema


Come si arresta il sistema?
Uno degli aspetti più importanti e potenti di Linux è il metodo
immediatamente
utilizzato per avviare e arrestare il sistema operativo. # shutdown -h now [Invio] Oppure: # init 0 [Invio]
Al momento dell'avvio Linux carica i programmi in ordine specifico Programmando ora e minuti
e configurabile e, successivamente, potete liberamente cambiare i # shutdown -h ore:minuti [Invio]
file di configurazione che controllano il processo di avvio oltre ai file
Come si riavvia?
di configurazione per i programmi eseguiti in fase di avvio. # shutdown -r now [Invio] Oppure: # init 6 [Invio] oppure reboot
In modo simile, l'arresto del sistema interrompe i processi in modo Programmando ora e minuti
organizzato e configurabile, anche se la personalizzazione di # shutdown -r ore:minuti [Invio]
questo processo è raramente necessaria.
È possibile fermare l'arresto o il riavvio del sistema dopo averne dato il comando?
La comprensione del funzionamento dei processi di avvio e di Per poter farlo, occorre impartire il comando:
arresto non solo vi consente di personalizzare in modo semplice # shutdown -c
Linux, ma vi aiuta a determinare la fonte esatta della maggior parte ma questa operazione di annullamento avrebbe successo esclusivamente qualora il
comando shutdown fosse stato impartito mediante l'indicazione esatta del tempo di
dei problemi legati all'avvio o allo spegnimento del sistema.
esecuzione dello stesso:
DA SEGNALARE I COMANDI halt o poweroff PER SPEGNERE IL SISTEMA

15/04/2007 Servizi e manutenzione di sistemi open source 3 15/04/2007 Servizi e manutenzione di sistemi open source 4

1
vmlinuz e initrd
Il processo di avvio
L’immagine del kernel è in un file presente nella directory /boot che si
Di seguito sono riportate le fasi principali del processo di avvio per chiama vmlinuz- (per esempio: vmlinuz-2.6.0-xx).
un sistema x86: Di solito per evitare di riscrivere lilo.conf viene creato un link simbolico
Il sistema BIOS (Basic Input/Output System) controlla il sistema e vmlinuz
avvia il boot loader della prima fase nel file MBR del disco fisso Oltre al kernel, viene caricata in memoria anche l'immagine RAM disk
primario. iniziale. Tale immagine si chiama initrd ed e' utilizzata dal kernel per
caricare in memoria tutti i driver non compilati all'interno del kernel stesso
Il boot loader della prima fase viene caricato in memoria e consente che sono necessari per avviare il sistema.
di avviare il boot loader della seconda fase dalla partizione /boot Una delle prime cose che fa il kernel di Linux e' quella di commutare il
Il boot loader di seconda fase carica il kernel in memoria, che a suo processore da modalità reale a modalità protetta
turno carica tutti i moduli e monta la partizione root di sola lettura. In questa modalità non e' possibile accedere direttamente alla memoria e
Il kernel trasferisce il controllo del processo di avvio al programma all'hardware del PC ma occorre passare attraverso delle chiamate al
/sbin/init. sistema operativo
Il programma /sbin/init carica tutti i servizi e gli strumenti user- Una volta configurati tutti i dispositivi, il kernel smonta l'immagine del disco
space e monta tutte le partizioni specificate in /etc/fstab. initrd, crea il dispositivo root, monta la partizione di root in sola lettura e
libera la memoria.
L'utente viene presentato con un prompt di login per il sistema di Il kernel controlla l’hardware presente perché tra un avvio e l'altro la
Linux appena installato. configurazione potrebbe anche cambiare, percio' scandaglia il PC alla
ricerca delle varie periferiche presenti
15/04/2007 Servizi e manutenzione di sistemi open source 5 15/04/2007 Servizi e manutenzione di sistemi open source 6

Messaggi Fase iniziale BSD-style & SysV-style


[ 1] Linux version 2.2.18 (root@khufu) (gcc version 2.95.2 20000220 (Debian GNU/Linux)) #11 Sun
La modalita’ di avvio seguita dal processo init diverge secondo 2 schemi adottati in
Mar 4 19:54:27 CET 2001 Detected 497435 kHz processor. alternativa dalle varie distribuzioni:
[2] Console: colour VGA+ 80x25 BSD-style:
Calibrating delay loop... 992.87 BogoMIPS
[3] Memory: 63120k/65472k available (1040k kernel code, 416k reserved, 852k data, 44k init) L’avvio è gestito tramite un unico script /etc/rc che in ultimo lancia le getty per
Dentry hash table entries: 8192 (order 4, 64k) effettuare il login o il sistema X-windows con il login grafico
Buffer cache hash table entries: 65536 (order 6, 256k) Vantaggi: semplice e veloce
Page cache hash table entries: 16384 (order 4, 64k)
[4] CPU serial number disabled. Svantaggi: scarsa flessibilità
[5] Intel machine check architecture supported. Adottato (con variazioni) da slackware
[6] Intel machine check reporting enabled on CPU#0
SysV-style
Questa prima parte è la fase di probing hardware
Si fonda sui run-levels
La visualizzazione di questi messaggi può essere messa in pausa temporaneamente
per leggere piu' facilmente cio' che viene scritto a video premendo i tasti CTRL-S. Il processo init esamina il file /etc/inittab che specifica quale sia il run-level di
default
Per scorrere la pagine in alto ed in basso si possono premere i tasti Shift-PageUp
(Maiusc-Pag Su) e Shift-PageDown (Maiusc-Pag giu). Per uscire dalla pausa occorre Vantaggi: Flessibilità e scalabilità
premere i tasti CTRL-Q. Svantaggi: Complesso e non velocissimo
I messagi che appaiano si possono rivedere con il commando dmesg Adottato dalla maggior parte delle distribuzioni
Nel seguito tratteremo il SysV-style
15/04/2007 Servizi e manutenzione di sistemi open source 7 15/04/2007 Servizi e manutenzione di sistemi open source 8

2
Runlevels Run level

Prima di affrontare l’avvio del sistema, e’ necessario comprendere il concetto


Runlevel 0
di runlevel o livello di funzionamento.
Il sistema e’ in stato shutdown e richiede il riavvio manuale
Altri sistemi operativi hanno solo due runlevels: sistema funzionante e
sistema spento. Linux, invece, ha normalmente 7 diversi livelli di da parte dell’utente. Questo stato del sistema può anche
funzionamento, essere chiamato usando i comandi halt o powerdown.
Un runlevel e’ una configurazione software del sistema che permette
l’esistenza solo di un gruppo selezionato di processi.
Runlevel 1
Questo livello di funzionamento, anche noto come modalità
0 Il sistema è spento
amministrativa, pone il sistema in modalità single-user. Ciò
1 Modalità mono- utente (solitamente root)
consente all’utente root, di accedere al sistema e impedisce
2 Modalità multi-utente, senza supporto di rete
a chiunque altro di accedervi. A questo livello si ha
3 Modalità multi-utente, con supporto di rete
l’accesso tramite un solo terminale, comunemente
4 Non impiegato o variabile a seconda delle distro Linux
impiegato per ricompilare il kernel e svolgere analoghi
5 Modalità multi-utente, con supporto di rete e ambiente X
compiti amministrativi.
6 Shutdown e riavvio

15/04/2007 Servizi e manutenzione di sistemi open source 9 15/04/2007 Servizi e manutenzione di sistemi open source 10

Run level Run level in UBUNTU


Runlevel 2
Livello in modalità multi-utente, permette a più utenti di accedere al sistema
contemporaneamente. Sono lanciati i processi in background (demoni) e sono montati gli
eventuali filesystem addizionali (il filesystem root, comunque, e’ sempre montato). Non è
0 : System Halt
in esecuzione NFS (Network File System). 1 : Single user
Runlevel 3
Livello detto anche network mode, e’ identico al livello 2 con il supporto di rete abilitato. 2 : Full multi-user - X mode (Default)
Runlevel 4
Livello definito in modo variabile dai produttori di sistemi Linux. Spesso e’ inutilizzato. 3-5 : Same as 2
Runlevel 5
Livello detto anche hardware state. E’ disponibile il prompt dei comandi e gli utenti sono 6 : System Reboot
abilitati a collegarsi e scollegarsi all’ambiente grafico X.
Runlevel 6
Questo livello esegue lo shutdown e il reboot automatico, cioè lo stesso effetto che si
otterrebbe passando al runlevel 0 e poi riavviando la macchina manualmente. E’ chiamato
riavvio a caldo (warm boot) perché la corrente elettrica continua ad alimentare l’hardware.
Al contrario del runlevel 0 che è un riavvio a freddo (cold boot) perché l’alimentazione
elettrica viene tolta.

15/04/2007 Servizi e manutenzione di sistemi open source 11 15/04/2007 Servizi e manutenzione di sistemi open source 12

3
init Inittab

Ogni entry del file segue la seguente sintassi:


Init è il padre di tutti i processi,
il suo ruolo principale consiste nel gestire il lancio di tutti i id: runlevels: action: process
programmi necessari per rendere il sistema attivo
ESEMPIO 1: 2345: respawn: /sbin/mingetty tty1
creare i processi a partire dal suo file di configurazione:
ID - Sequenza di 4 caratteri o meno che identifica in modo univoco la entry. Per quanto
/etc/inittab.
riguarda le entry relative alle getty, l'id deve corrispondere al suffisso della getty
Nell'inittab vengono definite le directory con gli script di avvio stessa.
per i diversi runlevel (stati del sistema, in cui possono girare RUNLEVELS - La lista dei run level per cui questa entry e' valida.
determinati programmi), il runlevel di default, altri script e ACTIONS - La modalità con cui viene eseguito il comando vero e proprio.
comandi che vengono eseguiti al boot o in condizioni particolari. Le action principali:
respawn: Ri-esegue il comando se termina. Tipicamente usato per i getty sulla console.
wait: Esegue lo script o il comando ed aspetta la sua conclusione prima di procedere.
Analizzare e comprendere la logica di questo file è molto utile once: Esegue il comando una sola volta quando il sistema entra nel runlevel configurato
per conoscere un sistema Linux con cui si ha poca familiarità: di boot: Esegue il processo durante il boot ed ignora la entry relativa al runlevel
fatto, analizzando i comandi e gli script che vengono eseguiti è PROCESS - Il comando o script che effettivamente viene lanciato.
possibile ricostruire tutto il processo di start-up del sistema
15/04/2007 Servizi e manutenzione di sistemi open source 13 15/04/2007 Servizi e manutenzione di sistemi open source 14

Esempio inittab di Fedora inittab

Esempio tipico di una distribuzione RedHat Linux. Su altri sistemi Unix questo file può
cambiare nella forma (ma non nella sintassi).
Qui si gestisce effettivamente quali servizi e programmi lanciare ai diversi
# inittab This file describes how the INIT process should set up
runlevel. La chiave è il programma rc che viene invocato con il numero di
# the system in a certain run-level. runlevel desiderato
#[...]
# Default runlevel. The runlevels used by RHS are: l0:0:wait:/etc/rc.d/rc 0
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode l1:1:wait:/etc/rc.d/rc 1
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) l2:2:wait:/etc/rc.d/rc 2
# 3 - Full multiuser mode l3:3:wait:/etc/rc.d/rc 3
# 4 - unused l4:4:wait:/etc/rc.d/rc 4
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this) l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
id:5:initdefault:

Run level di default. Se è 5 il sistema parte in modalità grafica. Se è 3 in modalità


testuale. Non usare 6 o 0 per evitare che il sistema non parte del tutto!

15/04/2007 Servizi e manutenzione di sistemi open source 15 15/04/2007 Servizi e manutenzione di sistemi open source 16

4
Richiamo dei processi dagli script rc /etc/rcX.d

contenuto della dir /etc/rc2.d e, in generale, di tutte le altre /etc/rcX.d. è del


al runlevel che ci interessa esaminare, il secondo, viene invocata tipo:
l'azione "wait", che indica ad init di avviare il processo ed
attenderne la terminazione S10sysklogd S20anacron S20gpm S20makedev S50proftpd S99rmnologin
il processo che viene avviato è /etc/init.d/rc con un "2" S12kerneld S20apmd S20inetd S20postgresql S89cron S14ppp S20exim
come argomento. S20logoutd S20xfs S91apache
rc è altro che uno script di shell, che, dopo opportuni controlli ed Come vedete, ogni file ha il nome composto da tre parti: una S o una K
accorgimenti, si porta nella directory /etc/rcX.d e ne esegue (in questo caso solo una S!) che indicano se il processo deve essere avviato
gli script contenuti. (S = start) o interrotto (K = kill), un numero, che indica la priorità con cui
Alla "X" che abbiamo utilizzato va comuque sostituito l'argomento questi devono essere avviati ed il nome del processo.
passato come opzione al comando rc: quindi, nel caso del Vediamo un esempio: l'avvio di gpm (il demone che gestisce il mouse) è
runlevel 2, rc si porterà nella directory /etc/rc2.d. precedente all'avvio di apache, visto che gpm ha un id numerico 20 contro il
91 di apache.
L'id numerico qui riportato non ha comunque nulla a che fare con il PID che
il programma si vedrà assegnato dal sistema: il numero che qui precede il
nome del programma è utilizzato per definire al priorità con la quale vengono
avviati i processi!
15/04/2007 Servizi e manutenzione di sistemi open source 17 15/04/2007 Servizi e manutenzione di sistemi open source 18

System V continuazione del file inittab

# Trap CTRL-ALT-DELETE
A ogni runlevel e' assegnata una dir contenente una serie di script di init ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Comandi abbinati ai messaggi mandati dall'UPS


pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown
Cancelled"

Inizializzazione dei terminali. Basta aggiungere qui nuove righe


(mingetty tty7, tty8 ...) per aumentare il numero di console usabili da tastiera
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
……..
Al runlevel 5 esegue il comando prefdm
x:5:respawn:/etc/X11/prefdm -nodaemon

15/04/2007 Servizi e manutenzione di sistemi open source 19 15/04/2007 Servizi e manutenzione di sistemi open source 20

5
System V System V

Si può forzare un cambiamento di runlevel con il comando telinit Al termine dell'avvio del sistema, è possibile accedere
Ed es: telinit 1 commuta al runlevel 1 come root ed eseguire gli stessi script per avviare e
telinit e’ un link simbolico a /sbin/init per cui si puo’ anche scrivere: interrompere i servizi.
init 1
Per esempio il comando
Utilizzando il comando "diff" si possono vedere le differenze fra le
directory diff /etc/rc2.d /etc/rc1.d /etc/init.d/httpd stop
Nessuno degli script che avvia e arresta realmente i servizi si trova interrompe Server Apache (web server).
nella directory /etc/rc.d/rc5.d/. Tutti i file in /etc/rc.d/rc5.d/ sono link Altro esempio:
simbolici diretti a script che si trovano nella directory /etc/rc.d/init.d/. I
link simbolici sono utilizzati in ciascuna delle directory rc per fare in /etc/init.d/networking restart
modo che i runlevel possano essere riconfigurati creando, riavvia i servizi di rete.
modificando ed eliminando i link simbolici senza influire sugli script a
cui fanno riferimento.

15/04/2007 Servizi e manutenzione di sistemi open source 21 15/04/2007 Servizi e manutenzione di sistemi open source 22

Alla fine del processo di init Alla fine del processo di init

Dopo che il comando init è andato avanti attraverso la directory


appropriata rc per la ricerca del runlevel, lo script /etc/inittab crea un Nel runlevel 5 /etc/inittab esegue uno script chiamato
processo /sbin/mingetty per ciascuna console virtuale (prompt di /etc/X11/prefdm. Lo script prefdm esegue il display
login) di ogni runlevel. manager X preferito — gdm, kdm,o xdm, in base al
I runlevel da 2 a 5 hanno le sei console virtuali, mentre il runlevel 1, contenuto del file /etc/sysconfig/desktop/.
(in modalità utente singolo), dispone di una sola console virtuale, i
Una volta terminato, il sistema è operativo sul runlevel 5,
runlevel 0 e 6 non ne hanno alcuna.
mostrando anche una schermata di login
Il processo /sbin/mingetty apre delle linee di comunicazione per i
dispositivi tty, ne imposta la modalità, visualizza il prompt di login, NB: su Ubuntu gdm viene lanciato direttamente dalla
riceve il nome dell'utente e inizializza il processo di login per directory del runlevel
quell'utente.
Per passare da una consolle all’altra tenere premuti i tasti:
CTRL + ALT + Fn
dove n corrisponde alla consolle che si vuole utilizzare

15/04/2007 Servizi e manutenzione di sistemi open source 23 15/04/2007 Servizi e manutenzione di sistemi open source 24

6
Demoni o servizi Esercizio 1
I programmi avviati automaticamente all’avvio del sistema, sono detti
demoni o servizi: caratteristica fondamentale, a differenza dei Loggarsi nella consolle tty 2
normali programmi, è che i demoni sono normalmente in esecuzione
per tutta una sessione di lavoro dall’avvio allo shutdown.
Passare alla modalità singolo-utente digitando
il relativo comando.
Il motivo è semplice: questi programmi, infatti, devono sempre essere
in ascolto per soddisfare eventuali richieste provenienti dall’utente o
Verificare cosa accade nelle altre consolle
dall’esterno, nel caso la macchina sia in rete Verificare se sono presenti i processi getty
Lo stato in cui normalmente questo programma si trova è detto Ritornare alla modalità grafica multi-utente
"sleep", le risorse occupate dal demone, quindi, risultano minime con il relativo comando

15/04/2007 Servizi e manutenzione di sistemi open source 25 15/04/2007 Servizi e manutenzione di sistemi open source 26

Esercizio 2 Esercizio 3

Modificare il runlevel 3 in modo che non faccia partire Modificare il file inittab in modo che al boot
la modalità grafica il sistema parta in modalità multiutente senza
Suggerimento: interfaccia grafica
Il servizio che fa partire la modalità grafica è: gdm Una volta individuate le modifiche da
Dare il comando apportare, prima di effettuare il reboot,
init 3 chiedete conferma al docente
per passare al runlevel corrispondente Effettuate un reboot per verificare la
funzionalità voluta
Ripristinate inittab come era in precedenza

15/04/2007 Servizi e manutenzione di sistemi open source 27 15/04/2007 Servizi e manutenzione di sistemi open source 28