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 1 di 9)
In ambito desktop GNU/Linux sta facendo
passi da gigante: gran parte dei compiti
più rilevanti possono essere svolti comodamente
tramite il mouse, cliccando su
semplici e immediate icone presenti sullo schermo
e nei numerosi menu. In alcuni casi, però,
bisogna “sporcarsi le mani”: talune volte, infatti,
è necessario addentrarsi più a fondo nei meccanismi
interni del sistema operativo, in particolare
per riuscire a gestire nel modo più diretto
possibile le risorse hardware e software a
nostra disposizione. In questi casi, le pratiche
interfacce “punta e clicca” possono diventare
paradossalmente degli ostacoli, dato che aggiungono
delle stratificazioni software supplementari
tra noi e il computer che, alla fine, rischiano
di intralciare interventi mirati come la
gestione diretta dei file di configurazione o
l'esecuzione di comandi in console, spesso
molto immediati. Nella Cover Story, perciò, vedremo come operare
direttamente al “cuore” del sistema GNU/Linux.
Niente paura: pur abbandonando momentaneamente
le interfacce grafiche più evolute,
ci serviremo tutte le volte che sarà possibile
di strumenti intermedi, funzionanti sì all'interno
di una console di terminale, ma dotati
di un'interfaccia utente allo stesso tempo semplice.
Quando si tratterà, invece, di intervenire
sui file di configurazione, utilizzeremo un editor
facile ed immediato come nano.
Dove interverremo
Dopo questa premessa, è giunto il momento di
entrare nel dettaglio degli interventi che tratteremo di seguito. Inizieremo affrontando
la ricompilazione del kernel e la gestione
dei moduli, quindi scopriremo come selezionare
a nostra discrezione i servizi attivati al
boot del PC. Fatto ciò, ci inoltreremo sempre
più in profondità negli anfratti più nascosti del
sistema: dai meccanismi di scheduling (pianificazione
degli eventi) come cron, alla configurazione
di udev(gestione periferiche), dalla configurazione
del sistema di logging, alla personalizzazione
del bootloader: tutto questo avendo
sempre come obiettivo la massima semplicità
nell'esposizione delle informazioni. Se il nostro
editor di fiducia scelto per questa Cover
Story è nano, la distro resta ancora una volta
Ubuntu: questa diffusa distribuzione per il
desktop è appena giunta alla release 7.10, nome
in codice Gutsy Gibbon, e nel corso dell'articolo
sarà quest'ultimissima versione a essere
utilizzata come sistema di riferimento.
Un kernel su misura
Installare un nuovo kernel non è mai stato così semplice... ecco come si usano gli strumenti forniti da Ubuntu per ridurre al minimo lo “stress” da ricompilazione!Cominciamo, letteralmente, dal nucleo del nostro sistema
operativo: il kernel Linux. In questa parte
iniziale, quindi, scopriremo come compilare e patchare
un kernel su Ubuntu (e su tutte le distro derivate da
Debian GNU/Linux), e a gestire i moduli servendoci di
alcuni comodi automatismi.
Un nuovo Kernel manualmente
Quando non sono disponibili i precompilati si fa così
Copiamo il pacchetto linux-2.6.23.8.
tar.bz2 dal CD/DVD in /usr/src. Scompattiamolo
con tar -xvjf linux-
2.6.23.8.tar.bz2 e rinominiamo la directory:
mv linux-2.6.23 linux. Entriamo
nella nuova cartella linux (cd
linux) ed eseguiamo il comando:
make xconfig.
Fatte le nostre scelte,
salviamo il nuovo setup ed eseguiamo
in sequenza i comandi seguenti:
make dep
make clean
make bzImage make modules
make modules_install
make install
Con vecchie distro potrebbe essere
necessario modificare manualmente
il bootloader (LiLo o Grub).
Ricompilare il kernel
Con Ubuntu e Debian GNU/Linux possiamo compilarne e installarne rapidamente uno su misura
Il tool menuconfig
Entriamo nella directory che
contiene i sorgenti del kernel: in
console scriviamo “cd /usr/src/linux”.
Lanciamo “sudo make menuconfig” (xconfig
per l'interfaccia grafica) ed inseriamo la
password. Da qui possiamo stabilire le caratteristiche
del kernel, attivando e disattivando
le opzioni a nostra discrezione.
Pulizia con clean
Tornati in console, eseguiamo
“sudo make-kpkg clean” per ripulire
la directory dei sorgenti da tutti i file
creati da precedenti compilazioni. A questo
punto non resta che compilare ed installare
la nuova versione del kernel. Digitiamo
“sudo make-kpkg --initrd --append-toversion=.
051107 kernel_image”.
Il nuovo Kernel
L'opzione “kernel_image” si
occupa della compilazione e
dell'installazione del kernel, mentre il
parametro “--append-to-version” consente
di aggiungere una stringa al nome
del kernel, così da individuare subito
quello personalizzato. Nell'esempio abbiamo
aggiunto la data corrente (051107).
Signore e signori, sua maestà il kernel
La configurazione di default del kernel fornita dalla distribuzione
non ci soddisfa e vorremmo compilare un kernel
su misura per il nostro PC? Innanzitutto, preleviamo
i sorgenti del kernel: possiamo scaricarli dai Kernel
Archives, più semplicemente, installare il pacchetto
dei sorgenti per Ubuntu; in questo secondo caso
apriamo una console di terminale ed eseguiamo
“sudo apt-get install linux-source”, così da scaricare
i sorgenti della release del kernel installata sul nostro
sistema (su Ubuntu 7.10 si tratta della 2.6.22, comunque
verificabile con il comando uname -r). Entriamo
nella directory /usr/src (comando “cd /usr/src”) e
scompattiamo l'archivio dei sorgenti con “sudo tar xvfj
linux-source-2.6.22.tar.bz2”. Al termine dell'operazione,
dalla directory corrente cancelliamo, se presente,
il collegamento simbolico “linux” (“sudo rm linux”)
e creiamo un nuovo collegamento “linux” che punta
alla cartella contenente i sorgenti, chiamata linuxsource-
2.6.22 (il comando da eseguire è “sudo ln -s linux-
source-2.6.22 linux”). A questo punto, assicuriamoci
di disporre di tutti i pacchetti necessari eseguendo
il comando “sudo apt-get install gcc make kernel-package libncurses5-dev”. Fatto ciò, seguiamo le
istruzioni riportate nel tutorial “Ricompilare il kernel”.
Ad operazione conclusa troveremo il pacchetto .deb
del kernel appena compilato in /usr/src: installiamolo
con “sudo dpkg -i pacchetto_kernel.deb”.
Ecco come mettere le “toppe”al kernel
In rete è facile imbattersi in qualche “patch” (letteralmente
pezza) per il kernel: si tratta di codice che corregge
alcune funzionalità o ne aggiunge nuove, ad esempio il
supporto per una nuova periferica o un particolare protocollo.
Vediamo, quindi, come applicare una patch ai
sorgenti del kernel, prendendo come esempio BadRAM, una patch che consente di utilizzare in tutta tranquillità
banchi di memeria RAM difettosi, altrimenti da
buttare (molto utile!). Innanzitutto, scarichiamo il file dal
sito di BadRAM: in particolare, per il kernel di Ubuntu
7.10, il file da prelevare è http://rick. vanrein.
org/linux/badram/software/BadRAM-
2.6.22.1.patch. Copiamo il file nella directory /usr/src,
quindi entriamo in /usr/src/linux (“cd /usr/src/linux”).
A questo punto applichiamo la patch con il comando “sudo
patch -p1 < /usr/src/BadRAM-2.6.22.1.patch”.
L'opzione “-p” stabilisce quanti “/” bisogna togliere dal
percorso dei file indicati all'interno della patch prima di applicarla al kernel : in genere i valori da inserire sono
“-p2”, “-p1” o “-p0” (valori sbagliati, semplicemente,
non consentiranno di applicare la patch).
Ricompilare con la patch
A questo punto, possiamo subito ricompilare il kernel
indicando, tramite il parametro --append-to-version
che è stata applicata la patch BadRAM: “sudo
make-kpkg --initrd --append-to-version=.051107-
badram kernel_image”. Prima dell'avvio effettivo
della compilazione ci verrà chiesto se vogliamo attivare
BadRAM nel kernel (“Work around bad spots
in RAM (BADRAM) [Y/n/?]”): premiamo “y” e poi
Invio. A compilazione terminata possiamo installare
il kernel “patchato” tramite “dpkg -i”, come abbiamo
fatto in precedenza.
Usare la vecchia configurazione
La tecnica che facilita la compilazione del nuovo kernel
Stiamo per compilare un nuovo kernel
e vogliamo evitare di dover configurare
manualmente tutte le opzioni
che ci servono? Se disponiamo di un
file di configurazione .config di un
vecchio kernel, copiamolo nella cartella
/usr/src/linux e, prima di procedere
con il tutorial “Ricompilare il
kernel”, eseguiamo in console il comando
“sudo make oldconfig”. Ci
verranno poste alcune domande sulle
nuove opzioni presenti nel kernel da
compilare, saltando così la configurazione
di tutte quelle rimaste invariate.
Aggiungere un modulo esterno
Se per un dispositivo ne è necessario uno non presente nel kernel, installiamolo con module-assistant
Un vero assistente
Apriamo una console ed installiamo
il software: “sudo apt-get install
module-assistant”. A questo punto,
eseguiamo “sudo m-a”. Possiamo muoverci
all'interno dell'interfaccia del programma
grazie ai tasti freccia. Usiamo Tab per passare
da un pulsante all'altro, mentre premiamo
Invio quando serve selezionare.
Le opzioni utili
Andiamo su “UPDATE” e premiamo
Invio per aggiornare la lista
dei pacchetti presenti nel sistema. A questo
punto, selezioniamo l'opzione successiva,
“PREPARE”, per installare quanto serve
per scaricare e compilare i moduli specifici
per il nostro kernel. Spostiamoci, infine,
sull'opzione “SELECT” e premiamo Invio.
Compilazione moduli
A scopo di esempio, illustriamo
l'installazione dei moduli per il
modem SmartLink. Spostiamoci sulla voce
“sl-modem” e premiamo Spazio, quindi
Invio. Nella nuova schermata selezioniamo
“GET” e poi “BUILD”. Ci verrà chiesto se
vogliamo installare i moduli generati: selezioniamo
“Sì” e premiamo Invio.
Servizi ai nostri ordini
Demoni, processi, runlevel... facciamo chiarezza su questi concetti, a torto ritenuti complessi, molto utili per poter ttimizzare il sistema e adattarlo alle nostre esigenze I servizi sono particolari programmi funzionanti in
background che non richiedono l'intervento dell'utente.
Un servizio può essere avviato al boot
della macchina, oppure eseguito nel momento in
cui qualcuno ne fa esplicita richiesta, ad esempio
un programma o un altro servizio. In questa
seconda parte, dunque, ci occuperemo di “demoni”,
conosciuti anche come “daemon” (un altro
nome utilizzato per indicare i servizi), prendendo
in considerazione entrambe queste modalità
di esecuzione.