Inserisci Infobox

Init e runlevels

Init, i runlevel e la gestione dei servizi da avviare al boot.

Init
Autore: al - Ultimo Aggiornamento: 2004-05-23 16:05:49 - Data di creazione: 2004-05-23 16:05:49
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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 creare 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.

Il primo script lanciato da inittab è (su RedHat Linux) /etc/rc.d/rc.sysinit: che esegue varie operazioni tra cui:
Impostazioni di alcuni path generali nella variabile $PATH; Configurazione dell'ambiente di rete;
Avvio swap per la memoria virtuale;
Impostazione del nome dell'host;
Check del filesystem root;
Check delle quote di spazio assegnate agli utenti, se previste;
Mount del filesystem root in modalità scrittura/lettura;
Preparazione del sistema per caricamento dei moduli;
Check delle dipendenze dei moduli;
Check di tutti i filesystem ed eventuali riparazioni;
Mount di tutti i filesystem;
Pulizia di file di supporto al boot e di processi non più attivi;
Umount dell'initrd;
Impostazione dell'orologio;
Attivazione dello swapping;
Inizializzazione delle porte seriali;
Caricamento Moduli;
Attivazione dei servizi del runlevel.

Durante la fase di file system check, se si trovano errori che non possono essere riparati automaticamente è possibile che il processo di boot si blocchi. In questo caso viene richiesta la password di root e si può da shell fare un file system check manuale. Verificare su quale partizione il kernel si è fermato e scrivere (si considera che la partizione sia /dev/hda5 e abbia ext2 come file system): fsck.ext2 /dev/hda5.
Rispondere SI a tutte le lugubri domande sulla correzione di file danneggiati.

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.

I run level Linux
Autore: al - Ultimo Aggiornamento: 2002-10-05 12:15:20 - Data di creazione: 2002-10-05 12:15:20
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Nel mondo Unix ci sono 2 principali approcci al processo di startup del sistema: quello usato da Unix System V e quello, meno complesso ma meno flessibile, usato dai BSD Unix.
Linux utilizza il primo 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 personali
Runlevel 5: /etc/rc.d/rc5.d E' il runlevel predefinito quando si vuole avviare Linux in modalità grafica
Runlevel 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.

Questa è una logica comune a tutti gli Unix derivati da System V, possono cambiare i nomi dei runlevel, e in certi casi la funzione, ma non la logica di questra struttura di boot.

Comandi e strumenti per gestire i servizi da avviare al boot
Autore: al - Ultimo Aggiornamento: 2003-05-08 14:22:08 - Data di creazione: 2003-05-08 14:22:08
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

La struttura di gestione dei processi e degli script da avviare al boot sulla base delle directory /etc/rc.* permette di stabilire cosa eseguire e cosa no con una logica ben precisa anche se non particolarmente semplice.
Su tutti gli Unix esistono tool, testuali o grafici, che permettono di gestire più facilmente quali servizi avviare al boot.

Per esempio, su distribuzioni RedHat, utilizzando il comando ntsysv è possibile accedere ad un tool grafico (su interfaccia testuale) dedicato.
I processi identificati da un asterisco (*) e dal nome del servizio indicano che il processo verrà attivato al boot, altrimenti i processi identificati solo dal nome del servizio e da una casella vuota indicano i processi che non verranno fatti partire.
Alternativamente si può usare il comando serviceconf su interfaccia grafica o il comando shell chkconfig.
In genere tutti gli strumenti "all purpose" di amministrazione della macchina prevedono una parte di gestione del boot. Su AIX si può usare smitty, su Suse Linux Yast, su Mandrake Linux Drake ecc.
Anche sotto XWindow sono disponibili svariati programmi per eseguire questa funzione.

A prescindere dallo strumento usato, è molto importante disattivare, nella fase di boot, l'avvio di tutti i processi e servizi non utilizzati, sia per evitare sprechi delle risorse del sistema che per ragioni di sicurezza.

/etc/inittab
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2004-05-23 16:06:35 - Data di creazione: 2004-05-23 16:06:35
Tipo Infobox: PATH - Skill: 3- INTERMEDIATE

/etc/inittab e' il file di configurazione di init, il primo processo che viene lanciato al boot, dopo il caricamento del kernel.
Esso contiene gli script che vengono lanciati per l'inizializzazione del sistema, configurazioni come il runlevel di default e alcune impostazioni come i comandi abbinati ad una sequenza di tasti oppure ai messaggi inviati dall'UPS.
Analizzare e comprendere la logica di questo file è molto utile per conoscere un sistema Unix con cui si ha poca familiarità: di fatto, analizzando i comandi e gli script che vengono eseguiti è possibile ricostruire tutto il processo di start-up del sistema.

Ogni entry del file segue la seguente sintassi:
id:runlevels:action:process

ID - Sequenza di 4 caratteri o meno che identifica in modo univoco la entry. Per quanto riguarda le entry relative alle getty, l'id deve corrispondere al suffisso della getty stessa.     1:2345:respawn:/sbin/mingetty tty1

RUNLEVELS - La lista dei run level per cui questa entry e' valida.

ACTIONS - La modalita' con cui viene eseguito il comando vero e proprio. 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.
once: Esegue il comando una sola volta quando il sistema entra nel runlevel configurato
boot: Esegue il process durante il boot ed ignora la entry relativa al runlevel
                    
PROCESS - Il comando o script che effettivamente viene lanciato.

Vediamo un esempio tipico di una distribuzione RedHat Linux. Su altri sistemi Unix questo file può cambiare nella forma (ma non nella sintassi).
[neo@dido neo]$ cat /etc/inittab
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#[...]
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
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!
id:5:initdefault:

Lancio dello script /etc/rc.d/rc.sysinit, che imposta vari settaggi d'ambiente
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

Qui si gestisce effettivamente quali servizi e programmi lanciare ai diversi runlevel. La chiave è il programma rc che viene invocato con il numero di runlevel desiderato
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

Ad ogni boot viene eseguito il comando update
ud::once:/sbin/update

Comando abbinato alla sequenza di tasti CTRL-ALT-DELETE per riavviare il sistema con i 3 tasti magici. Da disattivare su macchine con la tastiera fisicamente accessibile in luoghi non controllati
# Trap CTRL-ALT-DELETE
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
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Al runlevel 5 esegue il comando prefdm
x:5:respawn:/etc/X11/prefdm -nodaemon

Gestire servizi con service
Autore: homer - Ultimo Aggiornamento: 2003-12-08 23:03:25 - Data di creazione: 2003-12-08 23:03:25
Tipo Infobox: TIPS - Skill: 2- JUNIOR

Il comando service permette di gestire l'avvio, il riavvio o lo stop di un servizio senza dover digitare il percorso completo dello script relativo.

Nelle distribuzioni Linux Red Hat e derivate, è possibile utilizzare il comando service per gestire manualmente i servizi di sistema. Per esempio, volendo controllare lo stato del servizio dhcp server è sufficiente utilizzare il comando service dhcpd start anzichè /etc/r.cd/init.d/dhcpd start.

Service non è altro che uno script shell che permette di gestire le classiche operazioni che si compiono in merito ad un servizio, tipicamente: avviarlo, fermarlo, riavviarlo e verificarne lo stato.

Alcuni esempi di utilizzo:
[root@Enigma root]# service mysqld start
Starting MySQL:8                                            [  OK  ]

Start di MySql server
[root@Enigma root]# service mysqld restart
Stopping MySQL:                                            [  OK  ]
Starting MySQL:                                            [  OK  ]

MySql viene riavviato
[root@Enigma root]# service mysqld status
mysqld (pid 3580) is running...

In questo caso viene visualizzato lo stato del server con relativo Process Identifier
[root@Enigma root]# service mysqld stop
Stopping MySQL:                                            [  OK  ]

Il server viene fermato

Tramite le opzioni di service vi è la possibilità visualizzare lo stato, oppure eseguire il restart, anche di tutti i servizi contemporaneamente.

Avvio in modalità testo o grafica
Autore: al - Ultimo Aggiornamento: 2002-10-08 16:19:01 - Data di creazione: 2002-10-08 16:19:01
Tipo Infobox: TIPS - Skill: 3- INTERMEDIATE

Durante l'installazione di Linux o altri Unix viene solitamente chiesto all'utente se si desidera, dopo il boot, avere un'interfaccia testuale (la shell) o visualizzare il login grafico su una finestra Xwindows.
In genere su un server ha sempre senso avere un'interfaccia solo testuale (init 3) e su una workstation di solito si lavora in modalità grafica (init5).

Per cambiare questa impostazione basta agire su /etc/inittab
La parola chiave initdefault indica il runlevel di default:
Per avviare il sistema in modalità testuale: id:3:initdefault
Per avviare il sistema in modalità grafica: id:5:initdefault
NON inserire valori come 0 o 6 (halt, reboot)! Il sistema non riuscirebbe mai a partire correttamente.

runlevel
Autore: homer - Ultimo Aggiornamento: 2005-06-21 16:15:11 - Data di creazione: 2004-05-15 13:50:02
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Visualizza il runlevel attuale in cui gira il sistema e quello precedente.

La sintassi:
runlevel [utmp]

Il comando runlevel, ricava i dati dal file /var/run/utmp e visualizza sullo standard output il runlevel corrente e quello precedente. Qualora non esista il file utmp, o non venga trovato il record relativo, viene visualizzato il messaggio unknown. Esempio:
root@Joker:~# runlevel
N 3

In questo caso, il runlevel corrente è il 3, mentre N sta a significare che non vi erano precedenti runlevel, ovvero che la macchina è stata avviata direttamente al terzo.

Cosa serve per rifare il proprio Unix? Essere root e un vi.
Autore: al - Ultimo Aggiornamento: 2002-10-08 15:53:31 - Data di creazione: 2002-10-08 15:53:31
Tipo Infobox: TIPS - Skill: 1- NOVICE

Perchè Unix, nato agli arbori degli anni settanta del secolo scorso è ancora un sistema operativo diffuso, utilizzato e vitale nelle sue varianti, Linux incluso?
Perchè Unix è in grado di radunare una folta schiera di utenti e amministratori fieri e fanatici della propria unixità?
Le spiegazioni sono tante, quasi tutte legate alla natura stessa del sistema operativo e a come è stato inizialmente sviluppato.
Uno dei motivi da non sottovalutare è che di fatto TUTTO su Unix è in ultima analisi riconducibile ad un file di testo ASCII che si può editare con un comune editor di testi.

Basta essere root ed avere un vi e il proprio Unix diventa un libro aperto che si può riscrivere:
- I sorgenti del kernel e del software sono liberamente accessibili e modificabili (questo vale per Unix opensource, come Linux, *BSD, Hurd ecc.)
- Il padre di tutti i processi si configura con inittab, un normale testo con una logica ben precisa.
- Gli script di startup sono generalmente comuni script shell, che richiamano altri script e costruiscono il boot del sistema.

Di fatto si può decidere di far fare al proprio sistema esattamente quello che si vuole.
Certo, per essere in grado di modificare il proprio Unix come si vuole lo si deve conoscere bene, ma una volta capita la logica molte operazioni sono quantomeno "controllabili" e diagnosticabili con relativa semplicità.

chkconfig
Autore: neo - Ultimo Aggiornamento: 2002-10-17 16:27:29 - Data di creazione: 2002-10-17 16:27:29
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

chkconfig e' una comoda utility per modificare o controllare i servizi che partono al boot del sistema per ogni livello.

visualizza lo status per i singoli livelli tutti i servizi oppure per il singolo servizio
chkconfig --list [name]
Aggiunge un servizio al managmente tramite chkconfig
chkconfig --add name
Cancella un servizio dall'elenco dei servizi gestiti tramite chkconfig
chkconfig --del name
Modifica lo status del servizio a livelli
chkconfig [--level levels] name

Ogni servizio gestito da chkconfig, contiene all'inizio del file di configurazione  in /etc/init.d le seguenti righe:
[neo@dido neo]$ cat /etc/init.d/random
Alcune informazioni, autore e scopo dello script
#!/bin/bash
#
# random    Script to snapshot random state and reload it at boot time.
#
# Author:       Theodore Ts'o
Configurazioni per chkconfig
La prima sequenza di numeri [2345] indicano i run level in cui il servizio parte il [20] e [80] indicano la priorita' di avvio e spegnimento del servizio
# chkconfig: 2345 20 80
Eventuale descrizione
# description: Saves and restores system entropy pool for higher quality \
#              random number generation.

[....]

Privacy Policy