11.7 Usare rc con FreeBSD

Contributo di Tom Rhodes.

Nel 2002 FreeBSD ha integrato il sistema di inizializzazione rc.d di NetBSD. Gli utenti dovrebbero aver notato i file elencati nella cartella /etc/rc.d. Molti di questi file sono servizi di base che possono essere controllati con opzioni start, stop, e restart. Ad esempio, sshd(8) può essere riavviato con il comando seguente:

# /etc/rc.d/sshd restart

Questa procedura è simile a quella per altri servizi. Naturalmente, i servizi in genere vengono avviati automaticamente in fase di avvio secondo quanto specificato in rc.conf(5). Ad esempio, per abilitare il demone per il NAT (Network Address Translation) all'avvio basta aggiungere la linea seguente a /etc/rc.conf:

natd_enable="YES"

Se esiste già una linea natd_enable="NO", allora basta cambiare il valore da NO a YES. Gli script rc caricheranno automaticamente ogni altro servizio durante il riavvio seguente, come descritto più avanti.

Poichè il sistema di rc.d è inteso prevalentemente per avviare/bloccare i servizi al momento dell'accensione/spegnimento, le opzioni standard start, stop e restart avranno il comportamento appropriato solo seè stata impostata la variabile appropriata in /etc/rc.conf. Ad esempio il comando precedente sshd restart funzionerà solo se in /etc/rc.conf è stata impostata l'opzione sshd_enable a YES. Per avviare (start), fermare (stop) o riavviare (restart) un servizio, ignorandole impostazioni in /etc/rc.conf, i comandi devono avere il prefisso “one”. Ad esempio per riavviare sshd trascurando le impostazioni esistenti in /etc/rc.conf, impartite il comando seguente:

# /etc/rc.d/sshd onerestart

È semplice controllare se un servizio è stato abilitato in /etc/rc.conf eseguendo lo script appropriato in rc.d con l'opzione rcvar. Dunque, un amministratore può controllare che sshd sia effettivamente abilitato in /etc/rc.conf eseguendo:

# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES

Nota: La seconda linea (# sshd) è l'output del comando sshd; non una console di root.

Per determinare se un servizio è attivo, è disponibile l'opzione status. Ad esempio per verificare che sshd sia effettivamente avviato:

# /etc/rc.d/sshd status
sshd is running as pid 433.

In alcuni case è anche possibile effettuare il reload di un servizio. Questo tenterà di inviare un segnale al servizio, per fargli ricaricare il suo file di configurazione. Nella maggior parte dei casi si tratterà del segnale SIGHUP. Il supporto per questa caratteristica non è garantito per tutti i servizi.

La struttura di rc.d non viene usata solo per i servizi di rete, ma contribuisce anche per buona parte all'inizializzazione del sistema. Ad esempio, considerate il file bgfsck. Quando lo script viene eseguito, esso stamperà il seguente messaggio:

Starting background file system checks in 60 seconds.

Dunque questo file viene usato per il controllo del file system in background, che avviene solo durante l'inizializzazione del sistema.

Molti servizi di sistema dipendono da altri servizi per poter funzionare in maniera appropriata. Ad esempio, il NIS ed altri servizi basati sulle RPC potrebbero non funzionare in assenza di rpcbind (portmapper). Per risolvere il problema, nei commenti all'inizio di ogni script di avvio ci sono informazioni sulle dipendenze ed altri metadati. Il programma rcorder(8) viene poi utilizzato per effettuare il parsing di questi commenti durante l'inizializzazione di sistema e per determinare l'ordine con il quale questi servizi devono essere avviati per avere le proprie dipendenze soddisfatte. In cima ad ogni file di avvio possono essere incluse le seguenti parole:

Usando questo metodo, un amministratore può controllare facilmente i servizi di sistema senza il fastidio dei “runlevel” come alcuni altri sistemi operativi UNIX®.

Informazioni addizionali sul sistema rc.d possono essere trovate nelle pagine man di rc(8) e rc.subr(8). Se sei interessato a scrivere un tuo script rc.d o a migliorarne uno esisente, ti può essere utile questo articolo.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.