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 6 di 9)
Il significato di DI /PROC
Cos'è e a cosa serve questo particolare file system Vogliamo ottenere informazioni dettagliate
sul sistema? Allora cerchiamole
nella directory /proc. Si tratta di
un file system virtuale che risiede in
memoria ed è ricco di dati interessanti
generati dal kernel sul funzionamento
e sulle caratteristiche del PC.
Vogliamo sapere a che velocità viaggia
attualmente la CPU del portatile?
Basta eseguire “cat /proc/cpuinfo”.
Allo stesso modo, con “cat
/proc/meminfo” otterremo tutti i dati
disponibili sullo sato della memoria di
sistema, mentre cat /proc /numero_
processo/status ci fornirà informazioni
dettagliatissime su un singolo
processo (ad esempio, “cat
/proc/12848/status”).
Le “regole” di UDEV
Tra i diversi sistemi appena descritti, udev è sicuramente
quello più utile per personalizzare il comportamento del
sistema. La configurazione è relativamente semplice, e
si effettua modificando o creando delle apposite “regole”.
Praticamente, si tratta di intervenire su alcuni file di testo contenuti nella directory /etc/udev/rules.d, ognuno
dei quali è formato da chiavi di controllo e da chiavi di
assegnazione. Le prime indicano il momento in cui è
opportuno compiere una determinata azione (ad esempio,
solo quando un dispositivo appartiene ad una marca
specifica), le seconde stabiliscono l'operazione da
compiere (come, ad esempio, assegnare un dispositivo
ad un gruppo di utenti). Nel tutorial “Cambiamo nome
alla penna USB”, proponiamo un esempio di regola
udev che consente di accedere ad una pendrive USB, sempre
mediante il file di dispositivo /dev/penna. Dopo aver
seguito i passi della guida, per prima cosa, creiamo la
directory /media/penna con “mkdir /media/penna”. A
questo punto, aggiungiamo in /etc/fstab un riferimento a /dev/penna per semplificare le operazioni di
mount, inserendo una riga simile alla seguente:
“/dev/penna /media/penna vfat defaults,
user,noauto 0 0”. Fatto ciò, è possibile
montare la penna con il semplice comando
“mount /media/penna”. Così facendo, ad
esempio, usando Gnome, al momento dell'inserimento
della chiavetta nel PC, l'icona che
apparirà sul desktop avrà il nome “penna”.
Personalizzare la shell
Stanchi di ripetere le stesse sequenze di comandi
in console? Per fortuna è possibile creare
delle “macro” per la shell Bash: quelle più
semplici si chiamano alias, le più complesse, invece,
funzioni. La differenza maggiore tra le
due è che le funzioni consentono di gestire in modo
più flessibile gli argomenti e risultano più
adatte per eseguire operazioni complesse, in
pratica più argomenti. Ma cominciamo con
gli alias. Un alias non fa altro che sostituire un
comando shell con una sequenza di caratteri stabilita
a priori: la sua struttura è molto semplice,
alias comando=sequenza: ad esempio, alias
bye=”shutdown -h now”, fa sì che eseguendo
“bye” in console venga eseguito, in realtà,
il comando “shutdown -h now, che arresta
immediatamente il sistema. Un alias può anche
eseguire una serie di istruzioni in successione,
basta separarle con il carattere “;”. Ad esempio,
alias cd-="umount /media/cdrom ; eject"
consente di smontare un Cd-Rom e espellerlo
semplicemente eseguendo il comando “cd-”.
Dove bisogna inserire gli alias per renderli attivi
ad ogni sessione? Scrivendo gli alias personali
nel file .bashrc, presente nella directory
HOME, questi saranno validi unicamente per il
nostro utente; al contrario, inserendoli, invece,
nel file /etc/bash.bashrc saranno utilizzabili
da tutti gli utenti presenti nel sistema.
Le funzioni di Bash
A volte è necessario costruire sequenze di istruzioni
più articolate, manipolando a nostro piacere
gli argomenti presenti. Nel tutorial “Creiamo
una funzione Bash”, spieghiamo dettagliatamente
come costruire passo passo una funzione
per la shell Bash: in particolare, questa ci consentirà
di avviare la compilazione del kernel nel
modo più rapido possibile. Seguiamo i passaggi
del tutorial, quindi chiudiamo la console
corrente premendo Ctrl+D. A questo punto,
apriamo una nuova console ed entriamo nella
directory dei sorgenti del kernel (“cd
/usr/src/linux”). Da qui eseguiamo la funzione,
seguita dalla stringa che vogliamo aggiungere
al nome del pacchetto generato per identificare
il kernel da noi compilato. Scriviamo, ad
esempio, “sudo kernel linuxmag”: la riga della
funzione “make-kpkg --append-to-version=.$
1 kernel_image” nell'esecuzione verrà
trasformata, grazie all'argomento “linuxmag” inserito,
in “make-kpkg --append-to-version=.
linuxmag kernel_image”; avremo così
un kernel targato Linux Magazine...
.Bash_profile vs .bashrc
I file di configurazione
della shell Bash
Il file.bashrc ha un suo gemello, .bash_
profile, che viene letto da Bash quando
si apre una shell di login (una shell,
cioè, attraverso cui gli utenti effettuano
l'accesso tramite username e password,
la cosiddetta autenticazione). In Debian
GNU/Linux e Ubuntu, .bash_profile legge
anche il contenuto di .bashrc, quindi è
consigliabile comunque inserire alias e
funzioni e altre configurazioni utili all'interno
di quest'ultimo. Il corrispettivo di
.bash_profile per l'intero sistema è
/etc/profile (anche in questo caso, eseguendolo
verrà letto anche
/etc/bash.bashrc) umask=0 0 0”.
Creiamo una funzione Bash
Sappiamo compilare il kernel... è ora di scrivere una funzione per farlo con un solo comando!
Nome della funzione
Apriamo una console ed eseguiamo
il comando “nano /home/.
bashrc”. Spostiamoci alla fine del file e
iniziamo a creare la funzione. Assegniamole
un nome, “kernel”, ad esempio, e facciamolo
seguire da due parentesi tonde“()”.
Infine, inseriamo uno spazio e il carattere di
inizio del corpo della funzione, “{“.
Gli argomenti
Premiamo Invio e per maggiore
chiarezza, facciamo rientrare
ogni linea del corpo della funzione con Tab.
Per inserire la prima riga, quindi, premiamo
Tab, digitiamo “make-kpkg clean” e
subito dopo Invio. Infine, inseriamo la riga
più importante, che mostra come si gestiscono
gli argomenti dentro una funzione.
Ultimi ritocchi
Premiamo ancora Tab e scriviamo
“make-kpkg --append-toversion=.$
1 kernel_image”. I caratteri
“$1” saranno sostituiti dal primo argomento
passato alla funzione durante
l’esecuzione. Infine, premiamo Invio e
terminiamo la funzione inserendo “}” su
una riga vuota. Salviamo e chiudiamo.
L’anima dei log
Alla scoperta del file di configurazione syslog.conf, spesso poco conosciuto, ma molto importante perché responsabile dell’intera gestione del sistema di logging Ilog non sono altro che file nei quali sono
elencati, in ordine cronologico, i principali
eventi che riguardano il sistema e
le singole applicazioni: ad esempio, in
una particolare riga, il kernel ci informa che
al boot è stata attivata una scheda di rete,
mentre in un'altra inetd ci avverte che
non è possibile avviare il server SSH. Insomma,
i log sono il “diario di bordo” del
computer e possono fornire informazioni
fondamentali sul buon funzionamento,
o meno, della macchina. Il programma
standard per la gestione dei log si
chiama syslogd, contenuto nel pacchetto
sysklogd. Teniamo a precisare, ch in questa
sezione della Cover Story non ci occuperemo
degli strumenti che ci permettono
di consultare i file di log. In questo caso
ci occuperemo “solo” della configurazione
generale del sistema di logging,
in modo da imparare le tecniche che ci permettorno
di influenzarne il funzionamento,
sempre con l’obiettivo di adattare gli strumenti
disponibili alle nostre esigenze .
Su ogni sistema GNU/Linux, per gestire
le regole di raccolta e gestione dei log
già esistenti e crearne nuove, è necessario
intervenire su un singolo (potremmo
dire anche semplice) file di configurazione,
per l’esattezza si tratta di
/etc/syslog.conf: scopriamone struttura
e caratteristiche per poter intervenire
in modo mirato.
Syslog.conf nel dettaglio
Ogni regola contenuta nel file
/etc/syslog.conf è composta da due sezioni:
quella relativa al “selector”, suddivisa
ulteriormente in facility e priority, e quella
dell'action. La prima indica a quale insieme
di messaggi si fa riferimento, la
seconda stabilisce l'azione che deve
compiere il sistema all'apparire di questi
messaggi (solitamente, quello che si
fa è registrarli su uno specifico file di log
e conservarlo in una particolare directory).
La facility individua l'ambito di
provenienza di un messaggio, cioè chi
lo ha generato. Quelli principali sono:
auth, authpriv, cron, daemon, kern, lpr,
mail e user. La priority, invece, indica
la rilevanza del messaggio stesso: si va,
in ordine di importanza crescente, da
debug, info e notice fino ad emerg. Nel
tutorial “Una console per i messaggi di
log” scopriremo come visualizzare alcuni
messaggi specifici in una console virtuale, solitamente inutilizzata: una volta
seguite le istruzioni, sarà sufficiente
spostarsi sulla console numero 8: premiamo,
dunque, Ctrl+Alt+8 se stiamo
usando l'interfaccia grafica, altrimenti
solo Alt+8, per veder scorrere placidamente
i log sullo schermo.
Una console per i messaggi di log
Poche righe nel file /etc/syslog.conf ed è possibile personalizzare il sistema di gestione dei log
Il file Syslog.conf
Per modificare il funzionamento
del sistema di logging, bisogna intervenire
su questo file. Digitiamo in una
console “sudo nano /etc/syslog.conf” e
spostiamoci alla fine del file. La riga che inseriremo
conterrà un insieme di facilitye
priority: tutti i messaggi corrispondenti saranno
visualizzati sulla console virtuale tty8.
I log della posta
Iniziamo stabilendo che vogliamo
mostrare su tty8 tutti i messaggi
della facility “mail” (i log relativi alla posta).
In una riga vuota scriviamo “mail.*;”.
Abbiamo così indicato “mail” come facility
ed una qualsiasi (“*”) priority. Il carattere
“;” stabilisce che seguiranno altre facility e
priority per la stessa azione.
Su un'altra console
Indichiamo una priority specifica
da mostrare in console, qualunque
sia la facility di provenienza di un messaggio.
Scriviamo “*.=info”: questo significa
“un messaggio da una qualsiasi (*) facility
ma con la priority specifica (=) info”.
Dirottiamo i messaggi su tty8 inserendo
come azione semplicemente /dev/tty8.
Dentro il bootloader
Cosa succede quando accendiamo il computer? Cosa viene eseguito per primo all'avvio e con quali opzioni? Chi è responsabile del caricamento del sistema? La risposta è Grub!