10.5. Gli script init

Gli script in /etc/init.d si suddividono in due categorie:

Tutti gli script si trovano in /etc/init.d, dove sono raccolti anche gli script per il passaggio da un runlevel all'altro. Gli script vengono lanciati attraverso un link simbolico da una delle sottodirectory tra /etc/init.d/rc0.d e /etc/init.d/rc6.d. In tal modo si ha maggior chiarezza e si evita di dover duplicare gli script per poterli usare, ad esempio, in runlevel differenti. Dal momento che ogni script può fungere sia da script d'avvio che di arresto, essi devono supportare sia il parametro start che stop. Inoltre, gli script accettano le opzioni restart, reload, force-reload e status; le funzioni delle opzioni sono riassunte nella tabella Table 10.2, “Rassegna delle opzioni degli script init”.

Table 10.2. Rassegna delle opzioni degli script init

Opzione

Significato

start

Avviare servizio

stop

Fermare servizio

restart

Fermare e riavviare servizio, se il servizio era già in esecuzione; altrimenti, avviare servizio

reload

Ricarica la configurazione del servizio senza fermarlo e riavviarlo

force-reload

Ricarica la configurazione del servizio se il servizio supporta questa operazione; altrimenti come restart

status

Mostra stato attuale

I link che trovate nelle singole sottodirectory dei runlevel servono quindi solo alla allocazione dei singoli script a determinati runlevel. Per creare ed eliminare dei link, ci si serve di insserv (ovv. del link /usr/lib/lsb/install_initd ) durante l'installazione o disinstallazione dei pacchetti del caso; cfr. la pagina di manuale di insserv .

Segue una breve descrizione dei primi script di caricamento, degli ultimi script di arresto nonché dello script di controllo:

boot

Viene eseguito allo avvio del sistema ed avviato direttamente da init. Non dipende dal runlevel di default e viene eseguito soltanto una volta: essenzialmente, vengono montati i file system proc e pts, attivato blogd (ingl. “Boot Logging Daemon”) e, dopo l'installazione di un nuovo sistema o un'aggiornamento, viene inizializzata una configurazione di base.

blogd è un cosiddetto demone che viene inizializzato dallo script boot e rc prima di tutti gli altri, e dopo aver svolto la sua funzione (p.es. invocare gli sottoscript) viene terminato. Questo demone scrive i propri messaggi nel file di log /var/log/boot.msg, se /var è stata montata con accesso in lettura e scrittura oppure memorizza temporaneamente nel buffer tutti i dati visualizzati sullo schermo, finché /var non venga montata con accesso in lettura e scrittura. Per ulteriori informazioni su blogd consultate la relativa pagina di manuale con man blogd.

A questo script è allocata anche la directory /etc/init.d/boot.d; tutti gli script di questa directory che comincino con la lettera S vengono automaticamente eseguiti all'avvio del sistema. Si esegue una verifica dei file system, si eliminano tutti i file superflui sotto /var/lock e viene configurata la rete per il dispositivo di loopback, se previsto. Inoltre viene impostata l'ora del sistema.

In caso di errori gravi durante la verifica e riparazione automatica dei file system, l'amministratore del sistema dovrà inserire la password di root e risolvere manualmente il problema. Alla fine, viene eseguito lo script boot.local .

boot.local

Qui potete inserire dei comandi che desideriate eseguire al caricamento del sistema, prima che il sistema entri in uno dei runlevel. Questa funzione può essere paragonata all'AUTOEXEC.BAT.

boot.setup

Impostazioni fondamentali da eseguire durante il passaggio dal modo a utente singolo ad un altro runlevel. Qui vengono caricate la mappatura della tastiera e la configurazione della console.

halt

Questo script viene eseguito solo quando si entra nel runlevel 0 o 6. Viene avviato sotto il nome halt o reboot. A seconda del modo in cui viene lanciato halt, si ha il riavvio o il spegnimento del sistema.

rc

Il primo script della serie ad essere avviato quando si effettua il passaggio tra un runlevel e l'altro. Esso esegue gli script di arresto del runlevel attuale e quelli di avvio del runlevel nuovo.

10.5.1. Aggiungere script di inizializzazione

Potete anche aggiungere degli script di inizializzazione vostri. Se avete delle domande sul formato, denominazione e struttura degli script di inizializzazione seguite le indicazioni della bozza dell'LSB e quelle riportate nelle pagine di manuale di init, init.d e insserv. In questo contesto sono di sicuro interesse anche le pagine di manuale di startproc e killproc.

[Warning]Generare propri script init

Degli errori negli script di inizializzazione possono bloccare l'intero sistema. Siate pertanto molto cauti quando generate degli script e verificatene il corretto funzionamento prima di utilizzarli nel modo multiutente. Per informazioni di base sull'uso degli script di inizializzazione dei runlevel, consultate la sezione Section 10.3, “I runlevel”.

Se per un vostro programma o un vostro servizio (ingl. service) create uno script di inizializzazione, utilizzate come modello il file /etc/init.d/skeleton. Salvate questo file con il nuovo nome ed editate la designazione dei nomi di programma o di file e percorsi, e aggiungete all'occorrenza proprie sezioni di script necessarie ad eseguire correttamente il comando di inizializzazione.

Editate il blocco obbligatorio INIT INFO all'inizio del file:

Example 10.1. Un INIT INFO minimale

### BEGIN INIT INFO
# Provides:          FOO
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Description:       Start FOO to allow XY and provide YZ
### END INIT INFO

Nel primo rigo dell'intestazione INFO indicate dopo Provides: il nome del programma o servizio che deve essere amministrato da questo script di inizializzazione. Required-Start: e Required-Stop: contengono i servizi che devono essere avviati o terminati prima di lanciare o terminare il servizio o programma in questione. Questi dati vengono processati per ottenere la sequenza degli script di inizializzazione e di arresto nelle directory dei runlevel. Indicate i runlevel nei quali la vostra applicazione debba essere avviata o terminata in modo automatico accanto a Default-Start: e Default-Stop: . Infine inserite una breve descrizione della vostra applicazione accanto a Description:.

Con il comando insserv <nome del nuovo script> create i link che da /etc/init.d/ puntano verso le relative directory dei runlevel (/etc/init.d/rc?.d/). insserv analizza automaticamente le indicazioni dell'intestazione dello script di inizializzazione e archivia i link per gli script di avvio e di arresto nelle relative directory dei runlevel. La sequenza di esecuzione corretta degli script di avvio e di arresto, all'interno di un runlevel, viene garantita da insserv sempre in base alla numerazione degli script. Come strumento di configurazione grafico per la creazione dei link avete a vostra disposizione l'editor dei runlevel di ; vd. la sezione Section 10.6, “L'editor dei runlevel editor di YaST” .

Se volete integrare nei vostri runlevel uno script che si trova già sotto /etc/init.d/ dovete creare - tramite insserv o l'editor dei runlevel di - dei link che puntano alle relative directory dei runlevel ed abilitare il servizio. Al prossimo avvio del sistema verranno applicate le vostre modifiche e lanciato in modo automatico il nuovo servizio.