Cenni sulla compilazione di un kernel 2.6.X

Transcript

Cenni sulla compilazione di un kernel 2.6.X
Cenni sulla compilazione di
un kernel 2.6.X
Versione 0.8.2
Copyright (c) 2005 Lucio Zara.
è garantito il permesso di copiare, distribuire e/o modificare questo
documento seguendo i termini della Licenza per Documentazione Libera
GNU,
Versione 1.1 o ogni versione successiva pubblicata dalla Free
Software
Foundation; senza Sezioni Non Modificabili, con il Testo di
Copertina “Cenni sulla compilazione di un kernel 2.6.X”, e Senza Testo di
Retro Copertina. Una copia della licenza è acclusa nella sezione intitolata
"Licenza per Documentazione Libera GNU".
Indice
1.Introduzione
2.Cosa è il kernel ?
3.Cosa occorre per la compilazione ?
4.Passi da seguire
5.Descrizione delle varie sezioni di configurazione
6.Programmi utili
7.Particolari opzioni
8.Patch
9.Conclusioni
10.Ringraziamenti
11.ChangeLog
12.Licenza per Documentazione Libera GNU
1.Introduzione
WEW un saluto a tutti.
In questa guida cercherò di mettere a vostra disposizione la mia esperienza pratica nella
compilazione di un kernel del ramo 2.6.X.
Molti credono che la compilazione di un kernel sia una cosa molto difficile da realizzare ma, in
realtà non è così: certo non vi dico che sia la cosa più semplice di questo mondo, ma vedrete che
dopo qualche tentativo avrete imparato.
2.Cosa è il kernel?
Il kernel è il nocciolo del sistema operativo (SO): si occupa di gestire l' hardware presente nel pc
in maniera trasparente, quindi senza che l'utente si debba preoccupare di come effettivamente
funzioni.
Lato utente il kernel viene utilizzato tramite una SHELL, che è un interprete di comandi. Un
esempio di shell è la bash ( Bourne-Again Shell ), di norma è la scelta di default per i sistemi
Gnu/Linux, ma ne esistono altre per usi specifici.
Il kernel Linux è nato nel 1990 da un' idea di Linus Torvalds che voleva creare un clone di Minix
per 386 e 486. Dopo un duro lavoro l' annuncio della prima versione di Linux fu dato il 5-10-1991.
Torvalds adottò per il suo sistema la licenza GNU ed in poco tempo il suo progetto raccolse
attorno a sé tantissimi sviluppatori tra cui anche alcuni che stavano lavorando ad un SO della
GNU. Lo sviluppo di Linux divenne così molto veloce: pensate che uno dei primi kernel aveva un
peso di circa 0.2MB (0.10) con 10.000 righe di codice, mentre adesso si sono superati i 200 MB
(2.6.13) con più di 5.000.000 di righe di codice.
Vediamo adesso come vengono gestite le versioni del kernel, prendendo in considerazione ad
esempio linux-2.4.29. Il primo numero (2) indica la versione maggiore (major version), il secondo
numero (4) indica la versione minore (minor version), il terzo numero indica la versione di
correzione degli errori (bugfix).
La major version indica la versione principale del kernel. Da diverso tempo è ferma a 2 ma questo
non implica che ci siano stati pochi cambiamenti (qualche anno fa si discusse sul fatto che
l'attuale ramo 2.6 dovesse rappresentare l'inizio del ramo 3.0, ma il Sig. Torvalds disse che le
modifiche apportate non erano tali da giustificare il cambio di numerazione).
La minor version viene modificata quando vengono introdotte delle nuove funzionalità al kernel,
pur mantenendo una certa compatibilità con le versioni precedenti: un 2.6.X infatti può
coesistere tranquillamente con un 2.4.X. Questo numero se pari indica una versione stabile,
mentre se dispari indica una versione di sviluppo o ritenuta poco stabile, ad esempio il ramo 2.6
deriva del ramo di sviluppo 2.5.
La bugfix invece indica la correzione o l'aggiunta di piccoli particolari al kernel. Nel ramo attuale
2.6.X si è scelta la versione a 4 cifre: in pratica il numero di bugfix viene allargato da 1 a 2 cifre,
così da avere kernel del tipo 2.6.13.4. Questa modifica è stata inserita per rendere più veloci i
rilasci di versioni stabili.
3.Cosa occorre per la compilazione?
Come ogni volta che si va a compilare del codice sorgente, servono i software di sviluppo quali i
compilatori e gli autotools (gcc e make); per i kernel 2.6.X serve anche il pacchetto module-inittools necessario per la gestione dei moduli; chiaramente non possono mancare i sorgenti del
kernel.
Il kernel vanilla (cioè privo di patch) è reperibile direttamente da http://kernel.org. Il mio
consiglio, però, è quello di prendere i sorgenti del kernel rilasciati dalla vostra distribuzione
Gnu/linux: ogni distribuzione inserisce delle patch nei propri kernel, pertanto se si usa un vanilla
si corre il rischio che qualcosa non funzioni. Che io sappia la Slackware (la distribuzione da me
usata) e derivate sono le uniche ad usare un kernel vanilla, eccezion fatta per Gentoo che
contempla questa opzione in fase di installazione.
4.I passi da seguire
Dopo aver reperito i sorgenti del kernel, che si trovano in formatto compresso .tar.gz e .tar.bz2 (il
secondo ha dimensioni minori), si devono decomprimere in /usr/src. Si Copino i sorgenti compressi
in /usr/src e si entri nella directory
cp linux-2.6.X.tar.bz2 /usr/src/
cd /usr/src
A questo punto si estrae l' archivio:
tar xjvf linux-2.6.X.tar.bz2 ( oppure tar xzvf linux-2.6.X.tar.gz)
In questo modo è stata creata la directory /usr/src/linux-2.6.X, nella quale bisogna entrare. Si
consiglio di leggere il file README che spiega un po' di cose, che è buona norma leggere quando
presente all'interno dei sorgenti.
Se vengono utilizzati i sorgenti delle distribuzioni molto probabilmente non si ha la necessità di
decomprimerli, una volta installato il pacchetto si dovrebbe già trovare la directory in /usr/src.
I comandi principali da usare per la compilazione di un kernel 2.6.X sono :
make mrproper
make xconfig (o gconfig o menuconfig)
make
make modules_install
Il make mrproper va a ripulire il ramo dei sorgenti e prepara l'ambiente per la compilazione.
Il make xconfig o gconfig o menucofig sono le varie interfaccie che il kernel mette a disposizione per
la sua configurazione. xconfig e qconfig sono basati sul sistema X windows, vanno lanciati all'
interno di una sezione X attiva ed usano rispettivamente le librerie QT e GTK. menuconfig è
invece una interfaccia pseudo-grafica che si basa sull' uso delle librerie ncurses e non ha bisogno
di un server X attivo. Esiste anche l'opzione make oldconfig che si basa sulla configurazione del
kernel in esecuzione: questo comando porrà le domande inerenti le nuove peculiarità introdotte
nel kernel che si sta configurando. Appena si avvia uno dei tools di configurazione si nota che
alcune opzioni vengono caricate di default, cercando prima in file .config, e in mancanza di questo
leggendo il contenuto del file arch/i386/defconfig.
L' intera configurazione viene salvata di default all'interno del file .config, ma si può salvarne una
copia di back-up in altra locazione in modo da averla a disposizione nel caso si vogliano
apportare piccole modifiche: i programmi di configurazione danno la possibilità di caricare un file
di configurazione alternativo, tramite l' opzione Load an Alternate Configuration File di menuconfig,
e l' opzione Load del menù File di xconfig e gconfig.
Il make è l'opzione che compila realmente il kernel. A questo comando si possono passare le
opzioni -j2 o -j3 che indicano il numero di processi da lanciare in parallelo durante la
compilazione; con queste opzioni non si fa altro che velocizzare l' operazione di compilazione.
make modules-install è il comando che installa i moduli nel sistema e precisamente li posiziona in
/lib/modules/2.6.X.
Adesso bisogna installare il kernel. Si preferisce “farlo a mano” copiando l'immagine del kernel
presente in arch/i386/boot/bzImage in /boot/vmlinuz-2.6.X e il file System.map in /boot/System.map-2.6.X, ma
esiste il comando make install che, oltre copiare i precedenti file, dovrebbe aggiornare anche lilo:
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.X
cp System.map /boot/System.map-2.6.X
Per mantenere una certa compatibilità è opportuno creare un link simbolico alla directory dei
sorgenti del nuovo kernel che punta a /usr/src/linux
rm -rf /usr/src/linux (eliminiamo il vecchio link)
ln -s /usr/src/linux-2.6.X /usr/src/linux
Questo è utile per quei programmi che non usano uname -r per determinare il kernel in esecuzione
ma lo vanno a cercare direttamente in /usr/src/linux. Prima di cancellare il vecchio link è opportuno
verificare che sia effettivamente un link passando l'opzione -l a ls.
Una volta copiati i file di interesse in /boot non resta che inserire il kernel appena compilato
all'interno del file di configurazione del bootloader. Attualmente i 2 principali bootloader sono
lilo e grub.
Se si usa lilo è necessario andare a modificare il suo file di configurazione che si trova in
/etc/lilo.conf ed aggiungere il nuovo kernel, inserendo delle righe simili a queste:
image = /boot/vmlinuz-2.6.X
root = /dev/hda5
label = 2.6.X
read-only
la direttiva image indica l'immagine del kernel da caricare, la direttiva root indica quale è il
dispositivo in cui è montata la root directory del sistema, label invece indica il nome che apparirà
sul prompt di lilo.
Adesso non resta che aggiornare lilo. Ho supposto che sia installato nell' mbr (MASTER BOOT
RECORD del disco che viene riconosciuto come /dev/hda), si consiglia di eseguire prima un test
lilo -t (effettua il test di installazione)
lilo -v (aggiorna il lilo)
Se invece si usa grub bisogna modificare il file /boot/grub/menu.lst un esempio di ciò che si può
inserire è questo:
title 2.6.X
root (hd0,4)
kernel /boot/vmlinuz-2.6.X root=/dev/hda5 ro
La direttiva title indica il nome che verrà visualizzato sul prompt di grub, root (hd0,4) indica la
partizione del disco in cui si trovano i file di configurazione di grub, nel mio caso hda5, kernel
indica l'immagine del kernel da caricare, root indica come in lilo quale è il device della root
directory e ro è equivalente al read-only di lilo.
Con grub non è necessario andare ad aggiornare il boot loader, le configurazioni vengono prese
in automatico.
Questi sono i passi da seguire per la compilazione del kernel.
5.Descrizione delle varie sezioni di configurazione
La problematica più grande si ha nella configurazione (cioè quando si digita il comando make
xconfig o simili) perché qui si vanno a scegliere quelle che saranno poi le parti del kernel.
Il kernel linux supporta l' inserzione di moduli (piccole parti di codice compilato) quando questo è
già avviato (date uno sguardo al manuale del comando modprobe); il vantaggio di ciò è la
possibilità di avere un kernel molto snello che al suo interno contiene in maniera statica solo lo
stretto indispensabile (come ad esempio il supporto per i dischi fissi o i bus della vostra scheda
madre o ancora il file system della partizione di root). Questa peculiarità è anche efficace in caso
di blocco di qualche modulo non indispensabile (ad esempio il supporto per la scheda
video,quella audio eccetera) che non causeranno il blocco del sistema.
Per quanto detto sopra bisogna fare distinzione tra inserzione come modulo o built-in. Se usate
xconfig o qconfig quando andate a “cliccare” su una voce essa verrà inserita come duilt-in se
compare un segno di spunta, invece se appare un puntino essa sarà inclusa come modulo. Se
invece preferite menuconfig le opzioni inserite come moduli sono contraddistinte dalla lettera M.
Di seguito una breve descrizione delle varie sezioni.
Code maturity level options: qui si trova “Prompt for development and/or incomplete
code/drivers”; se la si vuole introdurre occorre inserirla come built-in, questa opzione mette a
disposizione le funzionalità di alcuni driver che sono ancora in fase di test e dà la possibilità di
scegliere alcuni driver considerati ormai obsoleti.
General setup: si impostano funzionalità come il supporto per dischi di swap e il modo in cui
devono essere gestiti i processi.
Loadable module support: ci sono le opzioni che permettono di usare i moduli del kernel, se
non si abilitano le voci in questo menù non sarà possibile usarli.
Processor type and features: qui si scegliere il tipo di architettura e il processore che si
possiede, il supporto per il multi processore e per ram superiori ad 1 Gb
Power management options (ACPI, APM): si scelgono qui le opzioni per il controllo
energetico. Se si vuole abilitarlo vi consiglio di inserirlo come built-in. Altra nota: attualmente ci
sono 2 supporti particolari per la gestione dell' energia il più vecchio APM e il nuovo ACPI: se si
ha un nuovo pc si abiliti il secondo.
Bus options (PCI, PCMCIA, EISA, MCA, ISA): sono presenti le opzioni per i bus di sistema
tipo PCI ,ISA,MCA (MicroChannel Architecture) e per le PCMCIA: inserirle come built-in.
Executable file formats: qui si settano i formati dei file eseguibili, abilitate le varie opzioni.
Networking: abilita il supporto per la rete. Si può tranquillamente abilitare come moduli la
maggior parte delle opzioni che occorrono.
Da qui si abilita il supporto per NETFILTER (Network packet filtering), disabilitarlo implica l'
impossibilità di utilizzare iptables. Sempre da questa sezione potete abilitare il supporto per l'
Ipv6, per le porte infrarossi (IrDA subsystem support) e per il bluetooth (Bluetooth subsystem
support).
Device Drivers: in questa sezione si settano i supporti per i vari dispositivi quali ad esempio le
porte parallele, i cd-rom, i dvd, il floppy, la tastiera (che deve essere built-in) e il mouse (anche
come modulo), il supporto firewire e usb, il supporto per i dispositivi a carattere (qui vi consiglio
di abilitare come moduli i supporti per l' AGP e per il DRM). Particolare interesse lo si porga sulla
sezione video: si deve abilitare come built-in il supporto per il frame buffer (Support for frame
buffer devices) e per il vesa (VESA VGA graphics support), nella sotto-sezione Console display
driver support, sempre built-in, abilitare VGA text console, Video mode selection support e
Framebuffer Console support: non facendolo si rischia che all' avvio non si veda nulla anche se il
kernel funziona e viene visualizzata l'interfaccia del server X.
Nella sezione audio si abiliti come modulo ALSA (Advanced Linux Sound Architecture), mentre è
opzionale l' inserimento di OSS (Open Sound System), ormai obsoleto.
File systems: in questa sezione vengono scelti i vari file sistem (FS) per i quali si desidera il
supporto: includere come built-in perlomeno il supporto per il FS di root. Nella sotto sezione
Pseudo filesystems si consiglia di abilitare il supporto per il FS proc (/proc file system support) e
per il tmpfs (Virtual memory file system support (former shm fs)).
Profiling support: in questa sezione si abilita il supporto per la creazione dei profili tipo
OPROFILE.
Kernel hacking: qui si abilita il supporto per debug del kernel, se non si hanno esigenze
particolari non serve abilitarlo.
Security options: qui si abilitano le opzioni di sicurezza, è bene abilitarle.
Cryptographic options: sezione dedicata alle funzioni crittografiche.
Library routines: questa non so a cosa serve.
6.Programmi utili
Vediamo ora come reperire informazioni sull' hardware presente nel pc in modo da avere un' idea
dei moduli da andare a scegliere per il kernel.
Il primo luogo dove andare a guardare è senza ombra di dubbio il manuale che i rivenditori
consegnano con il pc. Molto spesso capita che le informazioni che si possono reperire da questi
manuali non siano sufficienti, ma per ovviare a questo problema esistono alcuni software che ci
vengono in aiuto.
I primi tools sul quale fare riferimento sono le pciutils che vanno a sostituire l' ormai obsoleta
interfaccia /proc/pci. All'interno del pacchetto pciutils si trova il comando lspci che fornisce
informazioni sul bus pci e sulle periferiche ad esso collegate. Un esempio di utilizzo è il seguente:
lspci -v
si può anche eseguirlo redirezionando l'output al comando less per poter visualizzare il risultato
più comodamente (lspci -v | less). Si veda una parte dell' output del comando in modo da capire
come reperire le informazioni sui moduli necessari:
00:0b.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80) (prog-if 10 [OHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, stepping, medium devsel, latency 32, IRQ 5
Memory at fedff800 (32-bit, non-prefetchable) [size=2K]
I/O ports at ff00 [size=128]
Capabilities: [50] Power Management version 2
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) (prog-if 00 [UHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, medium devsel, latency 32, IRQ 10
I/O ports at 1200 [size=32]
Capabilities: [80] Power Management version 2
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) (prog-if 00 [UHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, medium devsel, latency 32, IRQ 11
I/O ports at 1300 [size=32]
Capabilities: [80] Power Management version 2
00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) (prog-if 20 [EHCI])
Subsystem: Mitac: Unknown device 8375
Flags: bus master, medium devsel, latency 32, IRQ 11
Memory at f0000000 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2
Queste sono le parti che riguardano la porta firewire e le porte usb, da cui si legge che la scheda
madre è basata su chipset VIA.
Osservando la prima riga di ogni device si nota che tra parentesi quadre è riportata una sigla, nel
caso della porta 1394 (FireWire) si può leggere [OHCI]: questo è proprio il driver che occorre per
far funzionare questa porta.
Qualche volta questa indicazione non è presente: in questo caso basta controllare il nome del
chipset e vedere poi negli help del kernel da quale modulo è supportato.
Un altro pacchetto da tenere in considerazione è usbutils, che mette a disposizione il comando
lsusb, in grado di fornire un elenco delle periferiche collegate alle porte usb. L' utilizzo di lsusb è
simile a quello di lspci basta lanciarlo in una shell:
lsusb -v
I pacchetti pciutils e lsusb sono di norma forniti con le distribuzioni Gnu/Linux.
Un altro software molto utile che crea un elenco di tutto l'hardware presente nel pc è lsh, che si
può reperire da http://ezix.sourceforge.net/software/lshw.html. L'utilizzo di lshw è anche più
semplice degli altri due, basta digitare in una shell il nome del programma stesso:
lshw
Le informazioni fornite da lshw sono tante, tra cui l'indicazione del modulo da utilizzare, ecco una
parte del suo output:
*-firewire
description: FireWire (IEEE 1394)
product: IEEE 1394 Host Controller
vendor: VIA Technologies, Inc.
physical id: b
bus info: pci@00:0b.0
version: 80
width: 32 bits
clock: 33MHz
capabilities: ohci bus_master cap_list
configuration: driver=ohci1394
resources: iomemory:fedff800-fedfffff ioport:ff00-ff7f irq:5
lshw è dotato anche di una comoda interfaccia grafica, basata sulle librerie GTK, che può essere
richiamata tramite il comando gtk-lshw.
7.Particolari opzioni
Se si vuole ricompilate il kernel solo seguendo i passi elencati sopra si corre il rischio che in caso
di errore la macchina non funzioni. Questo è dovuto al fatto che quando si esegue il comando
make modules_install si sovrascrivere la directory dove erano inseriti precedentemente i moduli.
Per evitare questo si hanno 2 strade a disposizione : copiare la directory dei sorgenti
aggiungendoci un suffisso oppure andare a modificare il Makefile presente nella directory
principale dei sorgenti. Si preferisce il primo metodo perchè permette di non perdere i risultati
della compilazione precedente anche quando la loro perdita non è importante.
Nel primo caso, si supponga di avere già compilato un kernel 2.6.13 e di volerlo ricompilare. La
prima operazione da eseguire è la copia della directory dei sorgenti :
cp linux-2.6.13 linux.2.6.13-pk
in questo caso quando si lancia il make modules_install i moduli verranno installati in
/lib/modules/2.6.13-pk, senza andare a toccare i vecchi moduli. Si utilizzi
make mrproper
per ripulire la nuova directory dei sorgenti prima di andare a configurare e compilare.
Nel caso in cui si preferisca editare il Makefile disogna modificare il valore della variabile
$EXTRAVERSION (in realtà si possono modificare anche le altre variabili), questo produrrà
esattamente lo stesso effetto che si ha nel caso di copia dei sorgenti, ad esempio ecco le prime
righe del MakeFile del 2.6.13:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 13
EXTRAVERSION =
Se si modifica la riga “EXTRAVERSION =” in
EXTRAVERSION = -pk
si otterrà la copia dei moduli in /lib/modules/2.6.13-pk.
Se dopo aver compilato il kernel ci si rende conto di essersi scordati qualche modulo, o si ha
bisogno di un driver che prima non serviva, sarà sufficiente rientrare nella directory dei sorgenti
e da qui riutilizzare uno dei tools per la configurazione per aggiungerlo. Una volta completata la
fase di configurazione sarà necessario ricompilare (comando make), reinstallare i moduli
(comando make modules_install) e copiare i file bzImage e System.map in /boot. In questo caso non è
necessario usare il comando make mrproper.
Per chi possiede più di un pc sul quale sperimentare può essere utile creare una directory di
appoggio dove andare a posizionare il kernel e i suoi moduli in modo da compilare una sola volta
(sulla macchina di test), per poi passare il tutto sulla macchina di produzione. Ad esempio, dopo
aver testato il nuovo kernel, per trasportarlo sarà sufficiente creare ad esempio
/home/[neme_utente]/mio_kernel/ e andare a copiarci dentro i file vmlinux e System.map, mentre per i moduli
si può usare questo comando
make modules_install INSTALL_MOD_PATH=/home/[nome_utente]/mio_kernel/
in questo modo si trovano i moduli installati in /home/[nome_utente]/mio_kernel/lib/modules/2.6.13, basterà
poi copiare il contenuto di /home/[nome_utente]/mio_kernel sul secondo pc. Si tenga presente che le due
macchine devono essere praticamente uguali.
8.Patch
Ogni volta che viene rilasciata una nuova versione del kernel i maintainer mettono a disposizione
di tutti gli utenti delle patch. Queste servono a rendere il kernel della versione precedente uguale
a quello della versione successiva.
Ad esempio si è in possesso del kernel 2.6.13 e viene rilasciata la versione 2.6.13.1; per non
dover scaricare completamente il codice sorgente aggiornato (circa 37 MB) si può applicare
semplicemente la patch, chiamata appunto patch-2.6.13.1.bz2 (circa 4,8 KB), ai sorgenti del
2.6.13. L' inserimento di una patch viene effettuato con il comando patch. Prima di applicare la
patch si facia una copia dell'attuale directory, la si rinomini in linux-2.6.13.1 e si prepari
l'ambiente per la compilazione
cp -rf /usr/src/linux-2.6.13 /usr/src/linux-2.6.13.1
cd /usr/src/linux-2.6.13.1
make mrproper
Ora si copia la patch all'interno di linux-2.6.13.1 e poi la si applica:
cp /path/file/patch-2.6.13.1.bz2 /usr/src/linux-2.6.13.1
bzip2 -dc ../patch-2.6.13.1.bz2 | patch -p1 ( vi trovate in linux-2.6.13.1)
Sul video verranno visualizzate una serie di scritte: sono le indicazioni sui file che si stanno
patchando. Ulteriori informazioni sull' installazione della partch si possono reperire nel file
README presente nella directory principale dei sorgenti del kernel. Si segnala anche l' esistenza
di uno script che automatizza il processo, personalmente non l'ho mai usato, che trovate in
/scripts/patch-kernel.
Per chi usa un kernel vanilla e fa un uso desktop della sua distribuzione si consiglia l' inserimento
delle patch di Con Kolivas che diminuiscono la latenza rendendo di conseguenza più veloce il
sistema. Con Kolivas ha pensato anche al lato server, infatti le sue patch sono disponibili anche
per
utilizzo
server.
Queste
patch
sono
reperibili
sul
sito
http://members.optusnet.com.au/ckolivas/kernel/ .
Sempre in ambito desktop, se si vuole un boot con immagine e barra di avanzamento si deve
applicare la patch per il boot splash reperibile da http://www.bootsplash.de/ .
Lato server per
quanto riguarda la
sicurezza segnalo il
progetto grsecurity
http://www.grsecurity.org/ .
Per
chi
ha
invece
problemi
con
l'inglese
si
segnala
il
progetto
http://massimo.solira.org/pcikl/index.html . Questa patch traduce l' interfaccia di configurazione
in italiano e può essere utilizzata solo sui kernel vanilla. Si tenga presente che se si applica
questa patch e si vuole successivamente applicare la patch dei maintainer del kernel questa va
tolta e poi in caso riapplicata. L' eliminazione di una patch viene effettuata con questo comando
patch -p1 -R -E < file_patch
L' inserimento delle patch è spiegata sui relativi siti.
9.Conclusioni
Come si può notare la compilazione di un kernel non è molto complicata, si spera che con la
lettura di questa piccola guida le idee confuse al riguardo siano diventate più chiare,
chiaramente non ci si deve abbattere se dopo la prima compilazione il nuovo kernel non funziona!
Si riprovi anche diverse volte e si vedrà che alla fine i risultati arriveranno.
Per informazioni potete contattarmi via mail all' indirizzo [email protected] o postare sul
forum di spaghettilinux.org http://forum.spaghettilinux.org/ .
10.Ringraziamenti
Per la stesura di questa guida mi sono basato oltre che sulle esperienze personali anche su
alcune guide e riferimenti trovati sparsi per la rete in particolare www.slacky.it,
http://nuovolinux.org,
sulla
mailing
list
di
spaghettilinux.org
http://groups.google.it/group/spaghettilinux
e
sul
forum
di
Linuxpro
http://forum.futuremediaitaly.it/showthread.php?s=&threadid=23427.
Un ringraziamento particolare va a Stefano Giacometti (aka Nello [email protected]) e a
Tommaso Pasini (aka tommi [email protected]) che con i loro suggerimenti e loro
correzioni hanno reso la guida più leggibile.
11.ChangeLog
16-10-05 Prima stesura con sezioni
1.Introduzione
2.Cosa è il kernel ?
3.Cosa occorre per la compilazione ?
4.Passi da seguire
5.Descrizione delle varie sezioni di configurazione (versione 0.1)
6.Conclusioni
18-10-05 Aggiunta licenza FDL e relativa sezione
7.Licenza per Documentazione Libera GNU (versione 0.5)
20-10-05 Aggiunta nella sezione “Cosa è il kernel?” una breve storia sulla nascita di Linux e
una piccola spiegazione sul numero di versioni. (versione 0.6)
21-10-05 Aggiunte le sezioni
8.Particolari opzioni
9.Patch
Correzione di alcuni errori e imprecisioni.
Aggiunto Indice. (versione 0.7) 1° pubblicazione
27-10-05 Aggiunto creazione link kernel nella sezione “Passi da seguire”
Aggiunti comandi cp kernel e System.map.
Ampliata sezione “Patch” con le patch dei maintainer del kernel. (versione 0.7.5)
31-10-05 Rivista la sezione “Cosa è il kernel?” nella parte riguardante la storia
Aggiunta sezione “Programmi utili” (versione 0.7.9)
01-10-05 Effettuata qualche aggiunta in “I passi da seguire”
Effettuata qualche aggiunta in “Programmi utili”
Revisione della grammatica e dell'ortografia (versione 0.8.0)
02-10-05 Effettuata modifica sezione “Programmi utili”
Corretti alcuni errori orografici (versione 0.8.1)
05-10-05 Inserita sezione “Ringraziamenti”
Corretta forma sintattica
Qualche aggiunta nella sezione “Particolari opzioni”(versione 0.8.2)
12.Licenza per Documentazione Libera GNU
Versione 1.1, Marzo 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Chiunque può copiare e distribuire copie letterali di questo documento
di licenza, ma non ne è permessa la modifica.
0.PREAMBOLO
Lo scopo di questa licenza è di rendere un manuale, un testo o altri documenti scritti "liberi" nel
senso di assicurare a tutti la libertà effettiva di copiarli e redistribuirli, con o senza modifiche, a
fini di lucro o no. In secondo luogo questa licenza prevede per autori ed editori il modo per
ottenere il giusto riconoscimento del proprio lavoro, preservandoli dall'essere considerati
responsabili per modifiche apportate da altri.
Questa licenza è un "copyleft": ciò vuol dire che i lavori che derivano dal documento originale
devono essere ugualmente liberi. è il complemento alla Licenza Pubblica Generale GNU, che è
una licenza di tipo "copyleft" pensata per il software libero.
Abbiamo progettato questa licenza al fine di applicarla alla documentazione del software libero,
perché il software libero ha bisogno di documentazione libera: un programma libero dovrebbe
accompagnarsi a manuali che forniscano la stessa libertà del software. Ma questa licenza non è
limitata alla documentazione del software; può essere utilizzata per ogni testo che tratti un
qualsiasi argomento e al di là dell'avvenuta pubblicazione cartacea. Raccomandiamo
principalmente questa licenza per opere che abbiano fini didattici o per manuali di consultazione.
1.APPLICABILITÀ E DEFINIZIONI
Questa licenza si applica a qualsiasi manuale o altra opera che contenga una nota messa dal
detentore del copyright che dica che si può distribuire nei termini di questa licenza. Con
"Documento", in seguito ci si riferisce a qualsiasi manuale o opera. Ogni fruitore è un
destinatario della licenza e viene indicato con "voi".
Una "versione modificata" di un documento è ogni opera contenente il documento stesso o parte
di esso, sia riprodotto alla lettera che con modifiche, oppure traduzioni in un'altra lingua.
Una "sezione secondaria" è un'appendice cui si fa riferimento o una premessa del documento e
riguarda esclusivamente il rapporto dell'editore o dell'autore del documento con l'argomento
generale del documento stesso (o argomenti affini) e non contiene nulla che possa essere
compreso nell'argomento principale. (Per esempio, se il documento è in parte un manuale di
matematica, una sezione secondaria non può contenere spiegazioni di matematica). Il rapporto
con l'argomento può essere un tema collegato storicamente con il soggetto principale o con
soggetti affini, o essere costituito da argomentazioni legali, commerciali, filosofiche, etiche o
politiche pertinenti.
Le "sezioni non modificabili" sono alcune sezioni secondarie i cui titoli sono esplicitamente
dichiarati essere sezioni non modificabili, nella nota che indica che il documento è realizzato
sotto questa licenza.
I "testi copertina" sono dei brevi brani di testo che sono elencati nella nota che indica che il
documento è realizzato sotto questa licenza.
Una copia "trasparente" del documento indica una copia leggibile da un calcolatore, codificata in
un formato le cui specifiche sono disponibili pubblicamente, i cui contenuti possono essere visti e
modificati direttamente, ora e in futuro, con generici editor di testi o (per immagini composte da
pixel) con generici editor di immagini o (per i disegni) con qualche editor di disegni ampiamente
diffuso, e la copia deve essere adatta al trattamento per la formattazione o per la conversione in
una varietà di formati atti alla successiva formattazione. Una copia fatta in un altro formato di
file trasparente il cui markup è stato progettato per intralciare o scoraggiare modifiche future da
parte dei lettori non è trasparente. Una copia che non è trasparente è "opaca".
Esempi di formati adatti per copie trasparenti sono l'ASCII puro senza markup, il formato di input
per Texinfo, il formato di input per LaTex, SGML o XML accoppiati ad una DTD pubblica e
disponibile, e semplice HTML conforme agli standard e progettato per essere modificato
manualmente. Formati opachi sono PostScript, PDF, formati proprietari che possono essere letti
e modificati solo con word processor proprietari, SGML o XML per cui non è in genere
disponibile la DTD o gli strumenti per il trattamento, e HTML generato automaticamente da
qualche word processor per il solo output.
La "pagina del titolo" di un libro stampato indica la pagina del titolo stessa, più qualche pagina
seguente per quanto necessario a contenere in modo leggibile, il materiale che la licenza prevede
che compaia nella pagina del titolo. Per opere in formati in cui non sia contemplata
esplicitamente la pagina del titolo, con "pagina del titolo" si intende il testo prossimo al titolo
dell'opera, precedente l'inizio del corpo del testo.
2.COPIE LETTERALI
Si può copiare e distribuire il documento con l'ausilio di qualsiasi mezzo, per fini di lucro e non,
fornendo per tutte le copie questa licenza, le note sul copyright e l'avviso che questa licenza si
applica al documento, e che non si aggiungono altre condizioni al di fuori di quelle della licenza
stessa. Non si possono usare misure tecniche per impedire o controllare la lettura o la
produzione di copie successive alle copie che si producono o distribuiscono. Però si possono
ricavare compensi per le copie fornite. Se si distribuiscono un numero sufficiente di copie si
devono seguire anche le condizioni della sezione 3.
Si possono anche prestare copie e con le stesse condizioni sopra menzionate possono essere
utilizzate in pubblico.
3.COPIARE IN NOTEVOLI QUANTITÀ
Se si pubblicano a mezzo stampa più di 100 copie del documento, e la nota della licenza indica
che esistono uno o più testi copertina, si devono includere nelle copie, in modo chiaro e leggibile,
tutti i testi copertina indicati: il testo della prima di copertina in prima di copertina e il testo di
quarta di copertina in quarta di copertina. Ambedue devono identificare l'editore che pubblica il
documento. La prima di copertina deve presentare il titolo completo con tutte le parole che lo
compongono egualmente visibili ed evidenti. Si può aggiungere altro materiale alle copertine. Il
copiare con modifiche limitate alle sole copertine, purché si preservino il titolo e le altre
condizioni viste in precedenza, è considerato alla stregua di copiare alla lettera.
Se il testo richiesto per le copertine è troppo voluminoso per essere riprodotto in modo leggibile,
se ne può mettere una prima parte per quanto ragionevolmente può stare in copertina, e
continuare nelle pagine immediatamente seguenti.
Se si pubblicano o distribuiscono copie opache del documento in numero superiore a 100, si deve
anche includere una copia trasparente leggibile da un calcolatore per ogni copia o menzionare
per ogni copia opaca un indirizzo di una rete di calcolatori pubblicamente accessibile in cui vi sia
una copia trasparente completa del documento, spogliato di materiale aggiuntivo, e a cui si possa
accedere anonimamente e gratuitamente per scaricare il documento usando i protocolli standard
e pubblici generalmente usati. Se si adotta l'ultima opzione, si deve prestare la giusta attenzione,
nel momento in cui si inizia la distribuzione in quantità elevata di copie opache, ad assicurarsi
che la copia trasparente rimanga accessibile all'indirizzo stabilito fino ad almeno un anno di
distanza dall'ultima distribuzione (direttamente o attraverso rivenditori) di quell'edizione al
pubblico.
è caldamente consigliato, benché non obbligatorio, contattare l'autore del documento prima di
distribuirne un numero considerevole di copie, per metterlo in grado di fornire una versione
aggiornata del documento.
4.MODIFICHE
Si possono copiare e distribuire versioni modificate del documento rispettando le condizioni delle
precedenti sezioni 2 e 3, purché la versione modificata sia realizzata seguendo scrupolosamente
questa stessa licenza, con la versione modificata che svolga il ruolo del "documento", così da
estendere la licenza sulla distribuzione e la modifica a chiunque ne possieda una copia. Inoltre
nelle versioni modificate si deve:
A. Usare nella pagina del titolo (e nelle copertine se ce ne sono) un titolo diverso da quello del
documento, e da quelli di versioni precedenti (che devono essere elencati nella sezione storia del
documento ove presenti). Si può usare lo stesso titolo di una versione precedente se l'editore di
quella versione originale ne ha dato il permesso.
B. Elencare nella pagina del titolo, come autori, una o più persone o gruppi responsabili in
qualità di autori delle modifiche nella versione modificata, insieme ad almeno cinque fra i
principali autori del documento (tutti gli autori principali se sono meno di cinque).
C. Dichiarare nella pagina del titolo il nome dell'editore della versione modificata in qualità di
editore.
D. Conservare tutte le note sul copyright del documento originale.
E. Aggiungere un'appropriata licenza per le modifiche di seguito alle altre licenze sui copyright.
F. Includere immediatamente dopo la nota di copyright, un avviso di licenza che dia
pubblicamente il permesso di usare la versione modificata nei termini di questa licenza, nella
forma mostrata nell'addendum alla fine di questo testo.
G. Preservare in questo avviso di licenza l'intera lista di sezioni non modificabili e testi copertina
richieste come previsto dalla licenza del documento.
H. Includere una copia non modificata di questa licenza.
I. Conservare la sezione intitolata "Storia", e il suo titolo, e aggiungere a questa un elemento che
riporti al minimo il titolo, l'anno, i nuovi autori, e gli editori della versione modificata come
figurano nella pagina del titolo. Se non ci sono sezioni intitolate "Storia" nel documento, createne
una che riporti il titolo, gli autori, gli editori del documento come figurano nella pagina del titolo,
quindi aggiungete un elemento che descriva la versione modificata come detto in precedenza.
J. Conservare l'indirizzo in rete riportato nel documento, se c'è, al fine del pubblico accesso ad
una copia trasparente, e possibilmente l'indirizzo in rete per le precedenti versioni su cui ci si è
basati. Questi possono essere collocati nella sezione "Storia". Si può omettere un indirizzo di rete
per un'opera pubblicata almeno quattro anni prima del documento stesso, o se l'originario
editore della versione cui ci si riferisce ne dà il permesso.
K. In ogni sezione di "Ringraziamenti" o "Dediche", si conservino il titolo, il senso, il tono della
sezione stessa.
L. Si conservino inalterate le sezioni non modificabili del documento, nei propri testi e nei propri
titoli. I numeri della sezione o equivalenti non sono considerati parte del titolo della sezione.
M. Si cancelli ogni sezione intitolata "Riconoscimenti". Solo questa sezione può non essere
inclusa nella versione modificata.
N. Non si modifichi il titolo di sezioni esistenti come "miglioria" o per creare confusione con i
titoli di sezioni non modificabili.
Se la versione modificata comprende nuove sezioni di primaria importanza o appendici che
ricadono in "sezioni secondarie", e non contengono materiale copiato dal documento, si ha facoltà
di rendere non modificabili quante sezioni si voglia. Per fare ciò si aggiunga il loro titolo alla lista
delle sezioni immutabili nella nota di copyright della versione modificata. Questi titoli devono
essere diversi dai titoli di ogni altra sezione.
Si può aggiungere una sezione intitolata "Riconoscimenti", a patto che non contenga altro che le
approvazioni alla versione modificata prodotte da vari soggetti--per esempio, affermazioni di
revisione o che il testo è stato approvato da una organizzazione come la definizione normativa di
uno standard.
Si può aggiungere un brano fino a cinque parole come Testo Copertina, e un brano fino a 25
parole come Testo di Retro Copertina, alla fine dell'elenco dei Testi Copertina nella versione
modificata. Solamente un brano del Testo Copertina e uno del Testo di Retro Copertina possono
essere aggiunti (anche con adattamenti) da ciascuna persona o organizzazione. Se il documento
include già un testo copertina per la stessa copertina, precedentemente aggiunto o adattato da
voi o dalla stessa organizzazione nel nome della quale si agisce, non se ne può aggiungere un
altro, ma si può rimpiazzare il vecchio ottenendo l'esplicita autorizzazione dall'editore precedente
che aveva aggiunto il testo copertina.
L'autore/i e l'editore/i del "documento" non ottengono da questa licenza il permesso di usare i
propri nomi per pubblicizzare la versione modificata o rivendicare l'approvazione di ogni versione
modificata.
5.UNIONE DI DOCUMENTI
Si può unire il documento con altri realizzati sotto questa licenza, seguendo i termini definiti
nella precedente sezione 4 per le versioni modificate, a patto che si includa l'insieme di tutte le
Sezioni Invarianti di tutti i documenti originali, senza modifiche, e si elenchino tutte come Sezioni
Invarianti della sintesi di documenti nella licenza della stessa.
Nella sintesi è necessaria una sola copia di questa licenza, e multiple sezioni invarianti possono
essere rimpiazzate da una singola copia se identiche. Se ci sono multiple Sezioni Invarianti con lo
stesso nome ma contenuti differenti, si renda unico il titolo di ciascuna sezione aggiungendovi
alla fine e fra parentesi, il nome dell'autore o editore della sezione, se noti, o altrimenti un
numero distintivo. Si facciano gli stessi aggiustamenti ai titoli delle sezioni nell'elenco delle
Sezioni Invarianti nella nota di copiright della sintesi.
Nella sintesi si devono unire le varie sezioni intitolate "storia" nei vari documenti originali di
partenza per formare una unica sezione intitolata "storia"; allo stesso modo si unisca ogni sezione
intitolata "Ringraziamenti", e ogni sezione intitolata "Dediche". Si devono eliminare tutte le
sezioni intitolate "Riconoscimenti".
6.RACCOLTE DI DOCUMENTI
Si può produrre una raccolta che consista del documento e di altri realizzati sotto questa licenza;
e rimpiazzare le singole copie di questa licenza nei vari documenti con una sola inclusa nella
raccolta, solamente se si seguono le regole fissate da questa licenza per le copie alla lettera come
se si applicassero a ciascun documento.
Si può estrarre un singolo documento da una raccolta e distribuirlo individualmente sotto questa
licenza, solo se si inserisce una copia di questa licenza nel documento estratto e se si seguono
tutte le altre regole fissate da questa licenza per le copie alla lettera del documento.
7.RACCOGLIERE INSIEME A LAVORI INDIPENDENTI
Una raccolta del documento o sue derivazioni con altri documenti o lavori separati o
indipendenti, all'interno di o a formare un archivio o un supporto per la distribuzione, non è una
"versione modificata" del documento nella sua interezza, se non ci sono copiright per l'intera
raccolta. Ciascuna raccolta si chiama allora "aggregato" e questa licenza non si applica agli altri
lavori contenuti in essa che ne sono parte, per il solo fatto di essere raccolti insieme, qualora non
siano però loro stessi lavori derivati dal documento.
Se le esigenze del Testo Copertina della sezione 3 sono applicabili a queste copie del documento
allora, se il documento è inferiore ad un quarto dell'intero aggregato i Testi Copertina del
documento possono essere piazzati in copertine che delimitano solo il documento all'interno
dell'aggregato. Altrimenti devono apparire nella copertina dell'intero aggregato.
8.TRADUZIONI
La traduzione è considerata un tipo di modifica, e di conseguenza si possono distribuire
traduzioni del documento seguendo i termini della sezione 4. Rimpiazzare sezioni non
modificabili con traduzioni richiede un particolare permesso da parte dei detentori del diritto
d'autore, ma si possono includere traduzioni di una o più sezioni non modificabili in aggiunta alle
versioni originali di queste sezioni immutabili. Si può fornire una traduzione della presente
licenza a patto che si includa anche l'originale versione inglese di questa licenza. In caso di
discordanza fra la traduzione e l'originale inglese di questa licenza la versione originale inglese
prevale sempre.
9.TERMINI
Non si può applicare un'altra licenza al documento, copiarlo, modificarlo, o distribuirlo al di fuori
dei termini espressamente previsti da questa licenza. Ogni altro tentativo di applicare un'altra
licenza al documento, copiarlo, modificarlo, o distribuirlo è deprecato e pone fine
automaticamente ai diritti previsti da questa licenza. Comunque, per quanti abbiano ricevuto
copie o abbiano diritti coperti da questa licenza, essi non ne cessano se si rimane perfettamente
coerenti con quanto previsto dalla stessa.
10.REVISIONI FUTURE DI QUESTA LICENZA
La Free Software Foundation può pubblicare nuove, rivedute versioni della Licenza per
Documentazione Libera GNU volta per volta. Qualche nuova versione potrebbe essere simile
nello spirito alla versione attuale ma differire in dettagli per affrontare nuovi problemi e concetti.
Si veda http://www.gnu.org/copyleft.
Ad ogni versione della licenza viene dato un numero che distingue la versione stessa. Se il
documento specifica che si riferisce ad una versione particolare della licenza contraddistinta dal
numero o "ogni versione successiva", si ha la possibilità di seguire termini e condizioni sia della
versione specificata che di ogni versione successiva pubblicata (non come bozza) dalla Free
Software Foundation. Se il documento non specifica un numero di versione particolare di questa
licenza, si può scegliere ogni versione pubblicata (non come bozza) dalla Free Software
Foundation.
Come usare questa licenza per i vostri documenti
Per applicare questa licenza ad un documento che si è scritto, si includa una copia della licenza
nel documento e si inserisca il seguente avviso subito dopo la pagina del titolo:
Copyright (c) ANNO VOSTRO NOME.
è garantito il permesso di copiare, distribuire e/o modificare
questo documento seguendo i termini della Licenza per
Documentazione Libera GNU, Versione 1.1 o ogni versione
successiva pubblicata dalla Free Software Foundation; con le
Sezioni Non Modificabili ELENCARNE I TITOLI, con i Testi
Copertina ELENCO, e con i Testi di Retro Copertina ELENCO. Una
copia della licenza è acclusa nella sezione intitolata "Licenza
per Documentazione Libera GNU".
Se non ci sono Sezioni non Modificabili, si scriva "senza Sezioni non Modificabili" invece di dire
quali sono non modificabili. Se non c'è Testo Copertina, si scriva "nessun Testo Copertina" invece
di "il testo Copertina è ELENCO"; e allo stesso modo si operi per il Testo di Retro Copertina.
Se il vostro documento contiene esempi non banali di programma in codice sorgente si
raccomanda di realizzare gli esempi contemporaneamente applicandovi anche una licenza di
software libero di vostra scelta, come ad esempio la Licenza Pubblica Generale GNU, al fine di
permetterne l'uso come software libero.