Prendiamo fiato e immergiamoci nei centri nevralgici del sistema per esplorarne ogni aspetto, anche quelli più nascosti. Dai meandri del kernel alla gestione dei servizi, fino alla configurazione del sistema di avvio. Da oggi in poi il PC non avrà più
(pagina 3 di 9)
TUTTI I TIPI DI RUNLEVEL
Tabella riepilogativa dei livelli di esecuzione disponibili
NUMERO
DIRECTORY CORRISPONDENTE
QUANDO VIENE RICHIAMATO
0
/etc/rc0.d
Halt (arresto) del sistema
1
/etc/rc1.d
Modalità singolo utente
Da 2 a 5
Da /etc/rc2.d
Modalità multiutente (con oa /etc/rc5.d senza interfaccia graficaa seconda di quale si usa)
6
/etc/rc6.d
Reboot della macchina
S
/etc/rcS.d
Modalità singolo utente (attivabile al boot del PC)
Eliminare i servizi superflui
Con sysv-rc-conf possiamo dare una “ripulita” a quelli eseguiti all'avvio del PC
Gestione facile
Installiamo il programma sysvrc-
conf con “sudo apt-get install
sysv-rc-conf” e subito dopo eseguiamolo
con il comando “sudo sysv-rc-conf”. Nella
schermata che appare abbiamo, in alto, da
sinistra verso destra, i vari runlevel disponibili,
quindi dall'alto verso il basso, troviamo
i nomi dei servizi disponibili.
Il runlevel corrente
Il runlevel di default è il 2, modifichiamolo.
Con i tasti freccia
sù/giù raggiungiamo il servizio che non vogliamo
eseguire all'avvio (nell'esempio,
apport), quindi con i tasti freccia sinistra/
destra spostiamoci sul livello 2.
Premiamo Spazio in modo da togliere il segno
di spunta dal servizio.
Servizi attivi e non
A questo punto possiamo gestire
i servizi superflui per la sessione
corrente. Spostiamoci su uno di essi
e premiamo il tasto “-” per fermarlo,
dopodiché nella nuova schermata premiamo
Invio. Per avviarne uno, invece,
premiamo il tasto “+” e, infine “q” per
uscire dal programma.
Un demone nel nostro Pc
I demoni eseguiti al boot del PC sono posizionati
all'interno della directory /etc/init.d (in realtà
qui sono presenti solo i loro script di esecuzione)
e vengono avviati seguendo le indicazioni presenti
nelle cartelle /etc/rcX.d (/etc/rc0.d, /etc/rc1.d,
ecc...). I servizi presenti in /etc/init.d, oltre ad essere
richiamati automaticamente dal sistema (non
in tutti i casi, dipende dalle impostazioni), possono
essere avviati da root facendoli seguire da alcuni
parametri: “start” avvia un servizio (ad esempio,
“sudo /etc/init.d/apache start”), “stop” lo arresta,
mentre “restart” prima lo ferma e, subito
dopo, lo fa ripartire. Infine, il parametro “reload”,
per fare in modo che il demone ricarichi i suoi file
di configurazione, ad esempio dopo una modifica
alla configurazione o dopo un aggiornamento. Ad esempio per eseguire il server web Apche 2 bisogna utilizzare il comando /etc/init.d/apche2 start.
Un runlevel diverso
Come configurare upstarti, il sistema che si occupa di gestire i servizi dal boot allo shutdown
File di configurazione
Eseguiamo “sudo nano
/etc/inittab” per avviare l'editor
nanoe creare il file, vuoto, /etc/inittab, nel
quale imposteremo il nuovo runlevel di default.
A questo punto, possiamo usare i tasti
freccia per spostarci su una nuova riga,
Ctrl+O e Invio per salvare il file, Ctrl+X per
uscire dall’editor e tornare alla shell.
Runlevel di default
Per scegliere 3 come runlevel
predefinito aggiungiamo la riga
“id:3:initdefault:”. Se da questo livello abbiamo
eliminato i display manager GDM o
KDM, al boot non sarà avviato l'ambiente
grafico. Per tornare al runlevel 2 è sufficiente
modificare la riga di /etc/inittab in
“id:2:initdefault:”, salvare e uscire.
Shutdown diverso
In genere, il sistema si riavvia
con Ctrl+Alt+Del. Ma è possibile
cambiare questo comando, ad esempio per
spegnere il PC. Eseguiamo “sudo nano
/etc/event.d/control-alt-delete”, spostiamoci
sulla riga che inizia con “exec” e
cambiamo “-r now” con “-h now”.
Salviamo ed usciamo.
Cosa sono e come funzionano i runlevel
Le directory /etc/rcX.d collegano i servizi
presenti in /etc/init.d con i “runlevel”.
Ma di cosa si tratta esattamente? Un runlevel
(detto anche livello di esecuzione) è
uno stato di funzionamento specifico del
sistema, che dipende sostanzialmente
dai servizi attivi sulla macchina e dalle
operazioni che è possibile eseguire: c'è il
runlevel invocato al momento del boot,
quello richiamato prima che la macchina
venga spenta, uno per eseguire il sistema
in modalità console, un altro per eseguirlo
completo di interfaccia grafica e così via
(nella tabella “Tutti i tipi di runlevel”, è
disponibile l'elenco completo di quelli attivabili).
In pratica, ogni runlevel, equivale
a uno specifico modo di eseguire il sistema,
determinato da più o meno servizi
e programmi disponibili. Detto questo,
è chiaro che ogni directory /etc/rcX.d
contiene dei collegamenti simbolici a tutti
i servizi che vengono richiamati, per essere
eseguiti o fermati, in un determinato
runlevel (per questo motivo, ad esempio,
/etc/rc3.d punta al terzo runlevel).
Chiaramente, è possibile modificare i demoni
richiamati da un runlevel: nel tutorial
“Eliminare i servizi superflui”, scopriremo
proprio come “sfoltire” l'elenco dei
demoni inseriti nel runlevel 2 (nella configurazione
di default di Ubuntu, è il livello
più importante per l'utente e caricato come
predefinito), così da ridurre sia i tempi
di avvio della macchina, sia la memoria
occupata dai processi in background
quasi sempre inutilizzati. Ovviamente, su
alcune distribuzioni il runlevel di default
potrebbe essere diverso. È possibile verificare
qual'è quello in uso mediante il
comando runlevel.
Demoni “on demand”
E se volessimo avviare alcuni servizi solo
quando necessario? È possibile farlo
utilizzando il “superdemone” inetd, il
quale non fa altro che avviare un determinato
servizio non appena riceve una richiesta
sulla porta a questo abbinata. Ad
esempio, se qualcuno fa una richiesta
sulla porta 22, inetd richiama il server
SSH installato sulla macchina e così via.
Il file di configurazione di inetd è
/etc/inetd.conf, mentre in /etc/services
sono elencate le porte ed i servizi a cui
queste sono legate. L'amministrazione di
inetd è piuttosto complessa, quindi ci limiteremo
a fornire qualche informazione
di base. Ciascuna linea di inetd.conf rappresenta
un servizio ed è composta dai
seguenti argomenti, separati da uno o più
spazi: in ordine service, type, protocol,
wait, user, server e arguments. Ecco
una riga di esempio:
ssh stream tcp nowait root
/usr/sbin/sshd sshd -i
Soffermiamoci sugli argomenti più rilevanti
presenti in questa linea. Il primo elemento
(service) indica che il servizio fornito
è SSH, mentre l'utente (user) con cui
viene avviato il servizio è root; infine,
l'argomento server contiene il percorso
completo dell'eseguibile, in questo caso
/usr/sbin/sshd, seguito dagli arguments,
cioè le opzioni con cui è necessario richiamare
il programma (il parametro “-i”
di sshd specifica che il server è avviato
mediante inetd).
Sveglia alle 7!
La guida per eseguire automaticamente comandi ad orari prestabiliti grazie all'ottimo sistema di pianificazione degli eventi, “scheduling”, integrato in GNU/LinuxAbbiamo creato un meraviglioso script per il
backup di sistema e vorremmo che questo
fosse eseguito tutti giorni, magari nelle ore in cui
il nostro PC è meno occupato? Quello che ci serve
è un programma di “scheduling”. Per questo
compito specifico la scelta migliore è senz'altro
cron, lo storico tool Unix presente in tutte le
distribuzioni. E quando abbiamo solo bisogno
di eseguirlo una sola volta, magari in un momento
specifico? In questi casi è meglio usare at.
Nel tutorial “Comandi “ad orologeria con cron”,
creeremo passo passo un file di crontab per pianificare
l'esecuzione di un comando particolare.
In pratica, si tratta del file che contiene i comandi
da eseguire via cron da parte di un determinato
utente. L'utilizzo di at è più immediato,
basta invocarlo facendolo seguire da una data:
questa può essere nel formato ore:minuti (ad
esempio, “at 19:30” indica le 19 e 30 di oggi),
oppure può contenere ora e data complete (“at
12:00 august 5”, cioè il 5 Agosto alle 12); oppure,
ancora, possiamo utilizzare alcune parole
chiave come “days”, “hours” e “weeks” abbinate
alla stringa “now +” . Ad esempio, scrivendo
“at now + 4 hours” il sistema eseguirà automaticamente
il comando indicato tra quattro ore
esatte. Creata la linea di at che desideriamo,
possiamo premere Invio. A questo punto, non
resta che inserire il comando da far eseguire ad
at e premere Ctrl+D per memorizzarlo. Facciamo
la stessa cosa per ogni altro comando.
Alla scoperta di Anacron
Lo scheduler perfetto per i computer desktop
Se la nostra macchina non resta mai
accesa 24/24h si corre il rischio che
possa trovarsi spenta proprio quando
cron deve eseguire un comando.
Niente paura, in questi casi c'è anacron:
questo programma utilizza come
riferimento un intervallo di giorni
invece che un orario specifico. Per
configurarlo eseguiamo il comando
“sudo nano /etc/anacrontab”.La
struttura delle righe presenti nel file
di configurazione anacrontab è la seguente:
intervallo (ogni quanti giorni),
attesa (quanti minuti attendere dall'avvio
del sistema), nome(un nome
univoco per il comando), comando. Ad
esempio, per eseguire lo script di
backup ogni 10 giorni, eseguendolo
45 minuti dopo il boot, bisogna aggiungere
ad /etc/anacrontab la direttiva
seguente: “10 45 backup
/usr/local/bin/backup”.
Comandi “ad orologeria” con cron
Scopriamo come eseguire a scadenze specifiche un determinato comando
Editor di default
Quando si modifica un file di crontab,
il sistema usa automaticamente
l'editor di default: vediamo come richiamare
nanoin modo predefinito. Apriamo
una console ed eseguiamo “sudo update-
alternatives --config editor”. Nell'elenco
che appare selezioniamo il numero corrispondente
a /bin/nano e premiamo Invio.
Struttura di Crontab
Con “crontab -e”eseguiamo nano
ed apriamo il file crontab per
l'utente che stiamo utilizzando. Per ora
contiene solo una linea commentata (il primo
carattere è #), che descrive la struttura
di un comando. Ogni riga è composta da
minuti, ora, giorno del mese, mese, giorno
della settimana e, infine, il comando.
Il comando da eseguire
Facciamo in modo che cron
esegua il solito script di backup
tutti i giorni alle 6:00. In questo caso, la
riga di crontab dovrà essere la seguente:
“00 06 * * * /usr/local/bin/backup”. Il carattere
“*” sta per “qualsiasi” (giorno,
mese, ecc...). Ricordate di indicare sempre
il percorso completo del comando.
Il sistema al microscopio
Dalla gestione dei dispositivi alla personalizzazione della shell fino al montaggio di hard disk e partizioni. Tutto questo e molto altro per ottenere un PC sotto controllo totaleArrivati a questo punto, possiamo approfondire alcuni
aspetti dell'amministrazione del sistema meno
fondamentali di quelli affrontati in precedenza ma
senz'altro importanti ai fini dell’ottimizzazione della distribuzione.
Approfondimenti ulteriori, insomma, verso
il completo adattamento del PC alle nostre esigenze. In
questa sezione della Cover Story, quindi, vedremo come
montare i nostri dispositivi (in particolare quelli rimovibili)
sfruttando al meglio le opzioni disponibili, impareremo
a conoscere e apprezzare la flessibilità offerta dal sistema
udev e, quindi, creeremo delle vere e proprie “macro”
per le operazioni più ripetitive che bisogna eseguire
dalla riga di comando.
Montare e smontare
Con il comando mount “montiamo” rendendolo visibile
al sistema, il contenuto di un dispositivo (una partizione
dell'hard disk, ad esempio) all'interno di una cartella
a nostra scelta. Ecco un esempio classico, che monta
sulla directory /mnt/disco il contenuto di /dev/hda3 (la
terza partizione del primo hard disk /dev/hda): “sudo
mount /dev/hda3 /mnt/disco”.
File system sempre al massimo
Poche modifiche al file di configurazione /etc/fstab per aumentare le prestazioni di una partizione Ext3