12.3. Avviare Squid automaticamente con il boot del sistema

Il processo di avviamento di un computer, qualunque sia il tipo di architettura adottato, prende il nome di processo di boot (cfr. Jargon file), durante questo processo viene caricato ed eseguito nella memoria del computer il Kernel del Sistema Operativo che consente di configurare e inizializzare i vari dispositivi hardware creando tutti processi di Sistema. Prima che il Sistema Operativo stesso venga avviato completamente, si devono anche verificare una serie di eventi molto importanti, tra questi possiamo senzadubbio citare il processo di mount dei file system ed il contestuale avviamento dei demoni o servizi di sistema. Tutti questi eventi vengono eseguiti da una serie di script che prendono il nome di script di init del Sistema Operativo e compongono il processo di init di Sistema. I sistemi UNIX® prevedono diversi sistemi di script di avvio

Tutti i sistemi UNIX® prevedono almeno due tipi di avviamento

Nei sistemi UNIX® è quindi possibile avviare Squid automaticamente con la partenza del Sistema Operativo utilizzando uno script generico del tipo init.d. Il file che abbiamo inserito nello spazio contrib dovrebbe essere compatibile con la maggior parte dei sistemi UNIX® che utilizzano lo schema di avviamento init.d.

12.3.1. Avviare Squid utilizzando la tabella di inittab

Molti sistemi UNIX® come Digital Unix, Solaris, IRIX, HP-UX ed alcune distribuzioni GNU Linux, prevedono la presenza del file /etc/inittab. Il file inittab descrive quali processi vengono avviati con l'avvio del sistema e durante le normali operazioni. Init distingue tra diversi runlevel, ognuno dei quali può avere il suo insieme di processi da avviare. I runlevel validi sono 0-6 e A, B e C per le voci ondemand. Una voce nel file inittab ha il seguente formato

id:runlevel:azione:processo
   

In questo file possiamo quindi inserire alcune linee per consentire l'avvio automatico con di Squid con il Sistema Operativo

sq:2550:once:/usr/local/squid/sbin/squid -D
   

in questo modo il processo di init avvia Squid una sola volta quando si entra nel runlevel specificato

sq:2550:respawn:/usr/local/squid/sbin/squid -D
   

utilizzando l'opzione respawn il processo di init riavvia Squid se il processo dovesse terminare. Dopo aver editato il file di inittab rileggiamo la configurazione ed avviamo Squid

% init q
   

questa soluzione è stata testata con Fedora Core 1

12.3.2. Avviare Squid utilizzando il file rc.local

Uno degli schemi più semplici per avviare Squid è utilizzare lo script /etc/rc.local oppure lo script /etc/rc.d/rc.local (RedHat Linux, Fedora e Mandrake). Si tratta di un semplice script di shell che viene eseguito come root all'avvio del sistema

/usr/local/squid/sbin/squid -D
   

il prefisso di installazione del file binario può essere differente e possiamo utilizzare diverse opzioni per avviare Squid ad esclusione di squid -N. Per verificare se Squid è in ascolto utilizziamo l'utility squidclient

% /usr/local/squid/bin/squidclient http://www.cisco.com/ > test
   

successivamente verificheremo se il contenuto del file test è congruo

12.3.3. Avviare Squid con i sistemi *BSD (init.d e rc.d)

Lo schema init.d e rc.d ricorre ad uno script di shell che è in grado di avviare i diversi servizi. Questo script può trovarsi nelle seguenti directory: /sbin/init.d, /etc/init.d e /usr/local/etc/rc.d. Di seguito mostriamo uno script di startup realizzato per un sistema BSD

#!/bin/sh
# nome del file: squid.sh
echo -n ' Squid '
case "$1" in
start)
/usr/local/squid/bin/squid -D
;;
stop)
/usr/local/squid/bin/squid -k shutdown
;;
restart)
/usr/local/squid/bin/squid -k reconfigure
;;
*)
echo "Usage: `basename $0` {start|stop|restart}"
;;
esac
   

questo tipo di script ricorre agli argomenti start, stop e restart

% /usr/local/etc/rc.d/squid.sh start
   

lo script è stato testato con FreeBSD 4.11-STABLE

12.3.4. Fermare Squid

Il sistema più veloce per arrestare Squid è quello di utilizzare il comando squid -k shutdown

% squid -k shutdown
   

questo comando avvia un segnare TERM al processo Squid, verranno così chiusi tutti i socket di rete e nessuna nuova richiesta verrà accettata. Il tempo di chiusura di Squid è pari a circa 30 secondi ma può essere modificato utilizzando la direttiva shutdown_lifetime. Possiamo anche utilizzare il comando squid -k interrupt

% squid -k interrupt
   

con questo comando Squid verrà chiuso immediatamente