Cenni sulla compilazione del kernel
Transcript
Cenni sulla compilazione del kernel
Cenni sulla compilazione di un kernel 2.6.X Versione 0.9.0 Copyright (c) 2006 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.Kernel e distribuzioni 9.1.Debian, Ubuntu e figlie 9.2.Slackware 10.Conclusioni 11.Ringraziamenti 12.ChangeLog 13.Licenza per Documentazione Libera GNU 1.Introduzione In questa guida si cerca di mettere a disposizione del lettore l'esperienza pratica del redattore e dei sui collaboratori nella compilazione del kernel Gnu/Lnux, in particolare si fa riferimento al ramo 2.6.X. Molti credono che la compilazione del kernel sia una cosa molto complicata da realizzare ma, in realtà non è così: è chiaro che non sia la cosa più semplice di questo mondo, ma dopo qualche tentativo non si avranno più molti problemi a farlo. 2.Cosa è il kernel? Il kernel è il nocciolo del sistema operativo (da qui in poi SO): esso si occupa di gestire l'hardware presente nel pc in maniera trasparente, quindi senza che l'utente si debba preoccupare di come questo 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), che di norma è la scelta di default per i sistemi Gnu/Linux, ma ne esistono altre per usi specifici (sh, ash, zsh ecc). Il kernel Linux è nato nel 1990 da un'idea di Linus Torvalds che voleva creare un clone di Minix per architetture 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: basti pensare che uno dei primi kernel aveva un peso di circa 0.2MB (versione 0.10) con 10.000 righe di codice, mentre adesso si sono superati i 200 MB (versione 2.6.13) con più di 5.000.000 di righe di codice. Vediamo 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 compila del codice sorgente, servono i software di sviluppo quali i compilatori e gli autotools (gcc e make); per i kernel 2.6.X è necessario anche il pacchetto module-init-tools che occorre per la gestione dei moduli (di norma compreso tra i pacchetti ufficiali di ogni distribuzione); chiaramente non possono mancare i sorgenti del kernel. Il kernel vanilla (cioè privo di patch) è reperibile direttamente da kernel.org. Si consiglia però di utilizzare i sorgenti del kernel rilasciati dalla propria 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 come dovrebbe. Al momento la Slackware 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 o .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 consiglia di leggere il file README che spiega cosa è il Linux, su che architetture può essere utilizzato, come applicare le patch ecc. E' buona norma leggere il README 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. Quelle che si vedono con make xconfig o gconfig o menuconfig sono le varie interfacce che il kernel mette a disposizione per la sua configurazione; xconfig e gconfig sono basati sul sistema X windows, vanno lanciati all'interno di una sezione X attiva ed usano rispettivamente le librerie QT e GTK (quindi se si ha intenzione di utilizzare uno di questi metodi di configurazione è necessario installare le relative librerie). menuconfig è invece una interfaccia pseudo-grafica che si basa sull'uso delle librerie NCURSES, 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 pone 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 nel 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 backup 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 può passare l'opzione -j2 o -j3 che indica il numero di processi da lanciare in parallelo durante la compilazione; con questa opzione non si fa altro che velocizzare l'operazione di compilazione: una singola compilazione non occupa la cpu al 100%, mentre due o più processi contemporanei permettono di sfruttare meglio la macchina e diminuire il tempo totale di compilazione (si noti che non ha senso usare un numero di processi maggiore di 2 o 3 su sistemi che utilizzano una singola CPU in quanto poi interviene il collo di bottiglia dato dal disco e dal coordinamento di troppi processi contemporanei). 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 a 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 il comando ”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 è situata la root directory del sistema, label invece indica il nome che apparirà sul prompt di lilo. Adesso non resta che aggiornare lilo. Si è supposto che esso debba essere installato nell'mbr (MASTER BOOT RECORD) del disco che viene riconosciuto come /dev/hda. Situazioni differenti possono essere tranquillamente gestite leggendo il manuale in linea di lilo (man lilo). Prima di andare a sovrascrivere l'mbr 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, in questo 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. Nota: make install aggiorna i link simbolici /boot/vmlinuz, /boot/System.map e /boot/config in modo che puntino sempre alla versione appena compilata; impostando quindi nel file di configurazione del bootloader la voce dell'immagine a /boot/vmlinuz è possibile aggiornare il kernel con questo comando. 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 che costituiranno il kernel. Il kernel linux supporta l'inserzione di moduli (piccole parti di codice compilato) quando questo è già avviato (si legga il manuale del comando modprobe); il vantaggio di ciò è la possibilità di avere un kernel molto leggero 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 scheda madre o ancora il file system della partizione di root). Questa peculiarità è anche efficace in caso di blocco di qualche modulo non necessario (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 si usa xconfig o gconfig quando si và a “cliccare” su una voce essa verrà inserita come built-in se compare un segno di spunta (V), invece se appare un puntino (∙) essa sarà inclusa come modulo. Se invece si preferisce menuconfig le opzioni inserite come moduli sono contraddistinte dalla lettera M, mentre le built-in da un asterisco (*). Di seguito una “breve” descrizione delle varie sezioni. Code maturity level options: 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 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. Support for paging of anonymous memory (swap): questa opzione abilita il supporto per i dischi di swap. Da abilitare come built-in insieme a Support for prefetching swapped memory. System V IPC: Inter Process Communication, questa funzione permette ai processi di comunicare tra loro e avere un certo sincronismo. Da abilitare come built-in. BSD Process Accounting: permette al kernel di rilasciare informazioni sui processi come ad esempio il momento della creazione, l'utente proprietario, il nome del comando, l'occupazione di memoria ecc.. Da inserire come built-in. Si consiglia in oltre di abilitare la sotto opzione BSD Process Accounting version 3 file format. Sysctl support: fornisce l' opportunità di cambiare dinamicamente certi parametri e variabili del kernel senza la necessità di ricompilare il kernel o riavviare il sistema. Da abilitare come built-in. Auditing support: abilita l' infrastruttura di auditing che può essere usata con un altro sottosistema kernel come SELinux. Da abilitare come built-in insieme alla sotto opzione Enable system-call auditing support. Kernel .config support: fornisce informazioni sulle opzioni di compilazione del kernel. Queste informazioni possono essere estratte dal file immagine del kernel con lo script scripts/extract-ikconfig e usate per ricompilare il kernel attuale o per compilare un altro kernel. Possono essere inoltre estratte da un kernel in esecuzione leggendo /proc/config.gz se abilitato. Si consiglia di abilitare questa opzione e la sua sotto opzione Enable access to .config through /proc/config.gz. Optimize for size: Abilitando questa opzione viene passato a gcc il parametro "-Os" al posto di "-O2", col risultato di ottenere un kernel di dimensioni minori. Da selezionare se si compila il kernel per una macchina dove risparmiare spazio è particolarmente importante, si può tralasciare su quasi tutti i sistemi “normali”. Enable 16-bit UID system calls: questo abilita i vecchi wrapper per le chiamate di sistema con UID a 16-bit. Se lo si vuole abilitare inserirlo come built-in. Enable VM86 support: e' richiesta da programmi come DOSEMU per eseguire vecchio codice a 16-bit su processori X86. Può essere necessaria anche per software come XFree86 o Xorg per l'inizializzazione di alcune schede video tramite BIOS. Configure standard kernel features: questa opzione fa in modo che alcune opzioni di base del kernel vengano disabilitate o modificate. Normalmente è un' opzione che viene usata per ambienti specializzati (EMBEDDED) che possono tollerare un kernel "non-standard". Di norma non si ha bisogno di abilitarla. Load all symbols for debugging/kksymoops: abilitarla come built-in per fare in modo che il kernel stampi informazioni sui crash simbolici e backtrace sullo stack simbolico. La sotto opzione Do an extra kallsyms pass non dovrebbe essere abilitata a meno che non si trovi un bug in kallsyms. 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. Enable loadable module support: Abilita il supporto per i moduli. Da abilitare insieme alle sue sotto sezioni come built-in. Si possono anche non inserire le opzioni Forced module unloading (permette di forzare la rimozione di un modulo anche quando il kernel crede che non sia sicuro: il kernel rimuoverà il modulo senza aspettare che qualcuno smetta di usarlo) e Source checksum for all modules. Block layer: Support for Large Block Devices: Da abilitare solo se si possiedono dischi più grandi 2TB. IO Schedulers: Le opzioni di questo menù si possono abilitare tranquillamente come built-in. Si consiglia di scegliere nella sezione Default I/O scheduler l'opzione CFQ se si sta compilando il kernel per un sistema desktop Processor type and features: qui si scegliere il tipo di architettura e il processore, il supporto per il multi processore e per ram superiori ad 1 Gb. Subarchitecture Type: se non si dispone di macchine particolari si può tranquillamente scegliere l' opzione PC-compatible. Processor family: da questo menù si scelga il tipo di processore presente nel proprio pc. Generic x86 support: questa può non essere abilitata se il kernel deve funzionare solo sulla macchina sul quale è stato compilato. Se viene abilitata introdurrà delle ottimizzazioni più generiche rispetto a quelle scelte nel menù precedente. HPET Timer Support: abilita l' uso dell'HPET per i timer interni del kernel. Da abilitare come built-in. Symmetric multi-processing support: questa opzione va abilitata solo su sistemi dotati di più di un processore o di processori a più core. Preemption Model: da qui si consiglia di abilitare Preemptible Kernel per un kernel a bassa latenza per uso Desktop, mentre abilitare No Forced Preemption se si prepara il kernel per un server. Preempt The Big Kernel Lock: abilitare questa opzione come built-in se si dispone di un desktop. Local APIC support on uniprocessors: un APIC locale e' un controller di interrupt integrato nella CPU. Si può tranquillamente abilitare questa voce anche se non si dispone di una CPU con tale controllo: il kernel funzionerà altrettanto bene. Per lo stesso motivo può essere abilita anche la sotto-funzione IO-APIC support on uniprocessors. Machine Check Exception: permette al processore di notificare al kernel che ha rilevato un problema. Si consiglia quindi di abilitare questa opzione. Si abiliti anche la sotto opzione Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4 e se si dispone di un P4 anche la voce check for P4 thermal throttling interrupt. Toshiba Laptop support e Dell laptop support: aggiungono dei supporti specifici per computer portatili delle due case costruttrici. Enable X86 board specific fixups for reboot: abilitare come built-in, questa permette il riavvio sicuro del sistema per alcune combinazioni hardware-bios. /dev/cpu/microcode - Intel IA32 CPU microcode support: da la possibilita' di aggiornare il microcode sui processori Intel della famiglia IA32, come Pentium Pro, Pentium II, Pentium III, Pentium 4, Xeon. Si deve però abilitare anche il file system /dev/ ritenuto ormai obsoleto. High Memory Support: dato che Gnu/Linux può gestire sistemi con 4 GB di memoria fisica per processore è necessario abilitare tale supporto solo si ha una quantità di RAM superiore a 960 MB. Memory split: qui di norma va lasciata l'opzione di default 3G/1G user/kernel split. Memory model: consente di cambiare alcuni modi interni di gestione della memoria di Linux. Molti utenti qui potranno selezionare solo l' opzione Flat Memory; altri invece potranno scegliere anche Sparse Memory e Discontiguous Memory: in questo caso scegliete il secondo. Allow for memory hot-add: consente l'inserzione di memoria quando il sistema è acceso. Nella maggior parte dei casi questa opzione può essere omessa (a meno che non vogliate cambiare i banchi di ram a computer acceso). Math emulation: questa opzione abilita l'emulazione del coprocessore matematico. Se si attiva avendo un coprocessore matematico questo è quello che verrà utilizzato. Use register arguments: non abilitarla. Enable seccomp to safely compute untrusted bytecode: questa opzione è bene abilitarla, viene sconsigliata solo su sistemi embedded. essa Timer frequency: permette la configurazione della frequenza del timer, va impostata a 1000 Hz se si desidera usare un sistema che dia risposte veloci ad eventi interattivi (uso desktop). Su sistemi che non richiedono queste peculiarità può essere impostato a 100Hz. kexec system call: questa dà la possibilità di arrestare il kernel in esecuzione e di avviarne un altro. Firmware Drivers: da questo menù si consiglia di attivare solo BIOS Enhanced Disk Drive calls determine boot disk; se si dispone di un sistema DELL attivare anche le successive opzioni che si ritengono opportune. Power management options (ACPI, APM): si scelgono qui le opzioni per il controllo energetico. Se si vuole abilitarlo è consigliato inserirlo come built-in. Attualmente ci sono 2 supporti per la gestione dell' energia il più vecchio APM e il nuovo ACPI: se si ha un nuovo pc si abiliti solo il secondo. Power Management support: questa voce va abilita se si intente usare le successive opzioni sul risparmio energetico. Si consiglia di abilitarla soprattutto per i portatili. Si consiglia di abilitare anche l' opzione Legacy Power Management API. Software Suspend: abilità la possibilità di “sospendere” il pc. Se la si vuole abilitare inserirla come built-in. ACPI (Advanced Configuration and Power Interface) Support da questo sotto menù abilita la possibilità di attivare l' ACPI. Se si dispone di un pc portatile occorrerà abilitare la maggior parte delle opzioni che consentono tra l'altro il controllo della batteria (Battery), del trasformatore di tensione (AC Adapter) della zona termica (Thermal Zone) ecc. APM (Advanced Power Management) BIOS Support da qui si abilita il supporto per il vecchio APM. Se si è abilitato l' ACPI meglio non abilitarlo. CPU Frequency scaling: da questo menù si abilita il supporto per la modifica della velocità di clock della cpu. Qui si hanno varie possibilità di scelta che dipendono in sostanza delle necessità dell' utente. Se non si ha un particolare problema di energia si può scegliere di impostare il Default CPUFreq governor a performance che fissa il clock alla più alta frequenza disponibile. Occorre poi scegliere un governatore della cpu che dipende dal tipo di processore utilizzato. Se non si possiede un processore con la capacità di variare la frequenza di clock è inutile attivare questa opzione. Bus options (PCI, PCMCIA, EISA, MCA, ISA): sono presenti le opzioni per i bus di sistema e per le schede PCMCIA: inserirle come built-in. Se non si è a conoscenza dei bus montati sulla scheda madre (MB) si legga questa guida hardware o wikipedia. PCI support: questo abilita il supporto per il bus PCI, bus contenuto nella maggior parte delle MB. Si consiglia di settare il PCI access mode ad Any che permette a linux di scegliere il modo migliore di interfacciarsi con il bus PCI. Abilitare anche il PCI Express support. Le opzioni Message Signaled Interrupts (MSI and MSI-X) e Legacy /proc/pci interface possono anche non essere abilitate, si tenga presente che l' interfaccia /proc/pci è stata abbandonata a favore dei nuovi tools pci-utils contenuti nel pacchetto omonimo. ISA support: da qui si abilita il supporto per il vecchio bus ISA. Abilitare questa opzione se la MB contiene ancora dei bus di questo tipo. Se non si conosce quali siano questi bus si guardi wikipedia. MCA support: questo abilita il bus MCA (MicroChannel Architecture) sviluppato da IBM, di solito non si ha necessità di abilitarlo a meno che la vostra MB non sia dotata di questo bus. NatSemi SCx200 support: fornisce il supporto di base per il processore National Semiconductor Scx200. PCCARD (PCMCIA/CardBus) support: serve per abilitare il supporto per le schede PCMCIA, delle schede elettroniche simili a delle carte di credito. Normalmente tutti i portatili sono dotati della possibilità di usare questo tipo di supporti. Di queste ne esistono a 16 e 32 bit, si consiglia in caso si abbia la necessità di usare dei supporti PCMCA di abilitarli entrambi. PCI Hotplug Support: alcune MB danno all' utente la possibilità di rimuovere ed inserire schede PCI a macchina accesa. Abilitare questa voce e il relativo driver se la MB dispone di questa possibilità. Se non si sa cosa fare è opportuno non abilitare questa voce. Executable file formats: qui si settano i formati dei file eseguibili, abilitate le varie opzioni anche se in realtà l'opzione Kernel support for a.out and ECOFF binaries può essere omessa dalla maggior parte degli utenti. Networking: abilita il supporto per la rete. È bene abilitare questa voce in quanto molti programmi richiedono tale supporto anche se il PC non è realmente collegato in rete. Si può tranquillamente abilitare come moduli la maggior parte delle opzioni che occorrono, ed essendo tantissime non verranno trattate tutte. Networking options: da questo sotto menù vengono abilitate la maggior parte delle opzioni e supporti che il kernel deve gestire. Packet socket: è bene abilitare questa voce in quanto il protocollo packet viene usato da molti programmi per interfacciarsi con le interfacce di rete Unix domain sockets: abilita i socket di dominio Unix. Abilitare questa voce perché questi tipi di socket sono usati anche dal sistema X Window (i principali sono Xorg e XFree86) o syslog. IPsec user configuration interface: abilitarla. TCP/IP networking: abilita i protocolli TCP/IP. Inutile dire che se si ha una rete locale o si ha intenzione di collegarsi ad internet questa voce deve essere abilitata. Alcune delle sotto opzioni abilitano funzionalità particolari che non sempre servono come IP: advanced router che permette alla linux-box di diventare un router. Network packet filtering (replaces ipchains): da qui si abilita il supporto per NETFILTER (Network packet filtering), disabilitarlo implica l' impossibilità di utilizzare iptables. IrDA (infrared) subsystem support: abilita il supporto per le periferiche ad infrarossi. Bluetooth subsystem support: abilita il supporto per le periferiche bluetooth. Senza questa opzione non si potranno usare queste periferiche. 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, il mouse, il supporto firewire, usb ecc. Essendo tante opzioni non verranno trattate tutte. Generic Driver Options: abilitare tranquillamente le voci di questo menù. Plug and Play support: da qui si dà la possibilità al kernel di configurare automaticamente le periferiche di tipo plug and play. Si consiglia vivamente di abilitare le voci di questo menù come built-in. Block devices: abilitare il supporto per il floppy se se ne possiede uno ( Normal floppy disk support o quello che fa per voi). Tra gli altri supporti si consiglia di abilitare i dispositivi di loop (Loopback device support), anche come modulo, utili per vedere cosa c'è dentro ad una immagine iso senza dover per forza masterizzare il cd/dvd e il supporto per i RAM disk (RAM disk support) indispensabile se si vogliono usare i file intrd utili tra l'altro per il boot-splash, abilitarlo built-in. ATA/ATAPI/MFM/RLL support: questo serve per far in modo che il kernel sia in grado di gestire periferiche come i dischi IDE e i cd-rom ATAPI. Non si dovrebbe abilitarlo solo se si usano sistemi puramente SCSI. Da questo menù si abilita il supporto per il DMA che va abilitato come built-in (Generic PCI bus-master DMA support). Ricordarsi di abilitare come built-in anche il supporto per il controller della propria MB. SCSI device support: si abilita il supporto per le periferiche di tipo scasi. Se si possiedono dischi in modalità RAID è da qui che va abilitato il supporto (RAID Transport Class) Multi-device support (RAID and LVM): questo attiva il supporto per parti fisiche multiple su un singolo dispositivo. IEEE 1394 (FireWire) support: abilita il supporto per hardware FireWire. Network device support: abilita i driver per le interfacce di rete. Sono compresi vari dispositivi di rete e il supporto per le reti wireless (Wireless LAN (non-hamradio)) Input device support: abilita il supporto per le periferiche di input come tastiere, mouse, joystick ecc . Abilitare come built-in almeno il supporto per la tastira. Character devices: qui ci sono varie voci da abilitare, tra tutte si porga attenzione al /dev/agpgart (AGP Support) e al Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) che abilitano rispettivamente il supporto per l' AGP e per il DRM (senza questa voce non funzionerà il 3d delle scheda grafica). Si possono abilitare entrambi come moduli. Hardware Monitoring support: abilita il supporto per i dispositivi di monitoraggio hardware come i sensori di temperatura, di tensione la velocità della ventola del processore ecc. Abilitarla come built-in. Graphics support: da qui abilitare il supporto per il frame buffer ( Support for frame buffer devices) come built-in altrimenti si rischia che al riavvio non si veda nulla. Come driver si consiglia di abilitare solo il VGA e il VESA su VGA (VGA 16-color graphics support e VESA VGA graphics support), mentre si sconsiglia di abilitare il supporto per la propria scheda grafica se si voglio usare i driver forniti dal costruttore in quanto potrebbero andare in conflitto. Per questo punto è comunque meglio seguire le indicazioni fornite dal costruttore stesso. Dal sotto menù Console display driver support abilitare come built-in Framebuffer Console support e i vari font: non facendolo si rischia che all' avvio non si veda nulla anche se il kernel funziona e viene visualizzata l'interfaccia del server X. Sound: qui si abilita il supporto per le schede audio. Abilitare come modulo ALSA ( Advanced Linux Sound Architecture), mentre è trascurabile l' inserimento di OSS ( Open Sound System), ormai obsoleto. USB support: il nome dice tutto. Si possono abilitare tranquillamente le varie opzioni come moduli. File systems: in questa sezione vengono scelti i vari file system (FS) per i quali si desidera il supporto: includere come built-in perlomeno il supporto per il FS della partizione di root. Non facendolo si incorre in un problema a spirale: 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 reperire le informazioni è senza ombra di dubbio il manuale che i rivenditori consegnano assieme al 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'oramai 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 reindirizzando l'output al comando less per poter visualizzare il risultato più comodamente (lspci -v | less). Qui sotto è mostrata 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 constata 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 verificare 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 varie distribuzioni Gnu/Linux. Un altro software molto utile che crea un elenco di tutto l'hardware presente nel pc è lshw. 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 sovrascrive 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 del kernel. 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 bisogna 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 la directory /home/[nome_utente]/mio_kernel/ e andare a copiarci dentro i file vmlinuz 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 o il kernel deve essere compilato nella maniera più generica possibile. 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 faccia 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: si trova 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 PCIKL . 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 Dallo stesso sito si apprende che è stato implementato a partire dai kernel 2.6.12 un supporto nativo per la lingua. Questo però non viene istallato di default quindi occorre farlo a mano. Sul sito nella sezione download trovate tutte le istruzioni. L' inserimento delle patch è spiegata sui relativi siti. 9.Kernel e distribuzioni Ogni distribuzione Gnu/Linux ha un proprio approccio alla gestione del kernel. Questo capitolo si prefigge il compito di descrivere le operazioni generali da seguire per ogni distribuzione. 9.1.Debian, Ubuntu e figlie La compilazione del kernel su sistemi debian-based differisce da quella standard per il fatto che mira a creare un pacchetto .deb, in grado di aggiornare i link e la configurazione di grub al momento dell'installazione. Prima di tutto occorre munirsi di alcuni pacchetti essenziali: a tal scopo si utilizzino i comandi sudo apt-get install build-essential bin86 kernel-package sudo apt-get install libqt3-headers libqt3-mt-dev (solo se si vuole usare make xconfig). Dopo aver reperito tutto il necessario si devono acquisire i privilegi di root tramite il comando sudo -s -H Si decomprimano i sorgenti del kernel all'interno della cartella /usr/src e si applichino le eventuali patch. Per partire da una configurazione già funzionante si può recuperare quella che caratterizza il kernel fornito dalla distro utilizzando cp /boot/config-`uname -r` /usr/src/linux-VER-KERNEL/.config quindi si passa alla configurazione. Il prossimo passo è importante nell'ottica secondo cui far funzionare perfettamente il primo kernel compilato è difficile; è possibile modificare il nome del kernel in modo che sia più facile gestirne l'installazione e la sua eventuale rimozione. Per modificare il nome del kernel si veda il capito 7 ( Particolari opzioni) dove si parla della modifica della variabile EXTRAVERSION. In debian e ubuntu il valore di EXTRAVERSION è visibile anche sulla schermata di grub; sarà così possibile capire, per esempio, che il kernel 2.6.17-03 è successivo al kernel 2.6.17-02. Salvato il Makefile si procede con la pulizia della directory: make-kpkg clean (eseguito all'interno della directory dei sorgenti del kernel) Per procedere con la compilazione l' istruzione fondamentale è make-kpkg --initrd kernel_image Migliorata la gestione del kernel modificando il Makefile, si può fare altrettanto per il sistema di gestione dei pacchetti, apt: basta specificare la versione del pacchetto contenente il kernel aggiungendo l'opzione --revision=[versione] a make-kpkg scrivendo ciò che si preferisce; buona logica è quella di usare la stessa stringa usata per EXTRAVERSION. Includere il campo revision permette di avere, sempre a titolo esemplificativo, due pacchetti dal nome kernel-image-2.6.17-01-2.6.17-01_i386.deb e kernel-image-2.6.17-02-2.6.17-02_i386.deb; la prima sequenza di numeri è ad uso del sistema che può identificare le immagini del kernel, la seconda è ad uso di apt che può identificare le versioni dei pacchetti. Si noti che, cercando di installare un pacchetto con versione inferiore ad un altro già installato, apt segnala un warning; è quindi buona norma tenere un ordine sufficientemente rigoroso. Completata la compilazione, all'interno della directory /usr/src si trova il file .deb (coerentemente con gli esempi precedentemente proposti il pacchetto si chiamerà kernel-image-2.6.17-01-2.6.1701_i386.deb), installabile con semplice il comando dpkg -i kernel-image-2.6.17-01-2.6.17-01_i386.deb Ora si può riavviare e provare il nuovo kernel. Nota 1: Il suffisso _i386 non significa che il pacchetto è ottimizzato per 386 anziché per 686 o altro: è solo un sistema di apt per distinguere i pacchetti deb per x86 da quelli per amd64, ppc, eccetera. L'ottimizzazione del kernel è scelta durante la configurazione, dentro il menu “Processor type and features”. Nota 2: i sistemi ubuntu prevedono l'utilizzo dell'Enterprise Volume Management System (EVMS), ignorare ciò porta durante l'avvio un errore non fatale; le strade per evitarlo sono due: 1- Scaricare il pacchetto evms da evms.sourceforge.net e applicare le due patch presenti all'interno delle sottocartelle kernel/2.6; 2- Installare bum o sysv-rc-conf e disabilitare l'avvio di evms per poter utilizzare un qualsiasi kernel vanilla senza che il sistema dia errori. Nota 3: oltre a kernel_image si possono specificare altri parametri opzionali: per esempio il parametro kernel_headers crea un pacchetto con gli headers del kernel, mentre modules_image crea un pacchetto con i cosiddetti “restricted modules”: per chi, in possesso di una scheda grafica nvidia, volesse installare i driver forniti dai repository insieme al kernel può usare il comando sudo apt-get install nvidia-kernel-source e aggiungere al comando make-kpkg l'opzione modules_image: all'interno di /usr/src si troverà un ulteriore pacchetto dal nome simile a nvidia-kernel-2.6.17-01_1.0.8178-0ubuntu3-2.6.1701_i386.deb Comunque: compilare installare gli headers è utile principalmente quando si ha bisogno di compilare a mano software “di sistema”: a meno di situazioni molto particolari è perfettamente sicuro usare i pacchetti forniti nei repository rendendo pressoché inutili gli headers del kernel. Il capitolo appena descritto si può trovare nella versione originale su Kernel_Compilation_Dapper in lingua inglese. 9.2.Slackware Il team di sviluppo di Slackware non applica alcuna patch al kernel che distribuisce, quindi si può usare il semplice kernel vanilla; di questo kernel sono disponibili delle versioni già precompilate. Quando si vanno ad utilizzare i kernel precompilati è necessario installare sul proprio sistema almeno 3 pacchetti (da qui in avanti pkg): kernel-generic-Vkernel, kernel-modules-Vkernel, mkinitrd. Il primo pkg contiene l'immagine del kernel, il secondo i moduli e il terzo il programma mkintrd utile alla creazione di un RAMDISK iniziale (initrd). I pkg possono essere cercati e scaricati tramite swaret o utilizzando il package search messo a disposizione da slackware.it. Dalle ricerche effettuate con questi strumenti si trovano anche i pkg kernel-source-Vkernel e kernel-headers-Vkernel: il primo occorre nel caso in cui si voglia ricompilare il kernel, il secondo contiene invece gli header utili se si vogliono compilare programmi partendo dal codice sorgente. Una volta scaricati i pkg vanno installati tramite il comando installpkg lanciato da root: installpkg kernel-generic-Vkernel-i486-build.tgz installpkg kernel-modules-Vkernel-i486-build.tgz installpkg mkinitrd-versione-i486-build.tgz Nella dir /boot si trovano ora i file vmlinuz-generic-Vkernel (l'immagine del kernel), System.mapgeneric-Vkernel e config-generic-Vkernel (il file di configurazione che è stato utilizzato per la compilazione del kernel). Nella dir /lib/modules/Vkernel invece si trovano i moduli necessari al funzionamento del nuovo kernel. I kernel di slackware sono compilati in modo da avere inseriti come moduli i filesystem (FS) EXT3 e REISERFS quindi se si usa uno di questi FS per la partizione di root è necessario creare un file di initrd. Per far questo occorre eseguire come root i comandi cd /boot/ mkinitrd -c -k Vkernel -m jbd:ext3 -f ext3 -r /dev/partizione_root (se si usa ext3) mkinitrd -c -k Vkernel -m reiserfs (se si usa reiserfs) Per maggiori informazioni sull'uso di mkinitrd vedere il file /boot/README.initrd e il man di mkinitrd (man mkinitrd). Il precedente comando crea il file initrd.gz che è proprio il ramdisk. Il prossimo passo da seguire è quello di andare a modificare il file di configurazione del boot loader come spiegato nel capitolo 4 (I passi da seguire). Se si ha la necessità di utilizzare il ramdisk è necessario inserire all'interno del file di configurazione la direttiva initrd: in riferimento all'esempio riportato nel capitolo 4 bisogna inserire qualcosa del tipo image = /boot/vmlinuz-2.6.X root = /dev/hda5 label = 2.6.X initrd = /boot/initrd.gz read-only se si usa lilo, mentre se si usa grub qualcosa di simile a title 2.6.X root (hd0,4) kernel /boot/vmlinuz-2.6.X root=/dev/hda5 ro initrd (hd0,4)/boot/initrd.gz Ora non resta che riavviare e godersi il nuovo kernel. Nel caso si voglia procedere alla ricompilazione è necessario installare il pkg kernel-sourceVkernel e seguire i passi spiegati nei precedenti capitoli ed in particolare nel capitolo 7 (Particolari opzioni). 10.Conclusioni Come si può notare la compilazione del 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. Il capito 9 (Kernel e distribuzioni) è in continua espansione e a tale scopo si ricercano collaboratori che vogliano scrivere il modo di gestire il kernel della propria distribuzione in modo da renderlo il più completo possibile. Per informazioni potete contattarmi al mio indirizzo email o postare sul forum di spaghettilinux.org. 11.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 slacky.it, NuvoLunix, sulla mailing list di spaghettilinux.org e sul forum di LinuxPro. Un ringraziamento particolare va a Stefano Giacometti (aka Nello email) e a Tommaso Pasini (aka tommi email) che con i loro suggerimenti e le loro correzioni hanno reso la guida più leggibile. La stesura del capito 9.1 (Debian, Ubuntu e figlie) è stata effettuata da Tommaso Pasini che ringrazio ancora una volta per la sua collaborazione. 12.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) 14-05-06 Inserita qualche info sul supporto alle lingue nativo (versione 0.8.3a) 21-05-06 Cominciata modifica sezione 5(moduli). Descrizione Code maturity level options, General setup Loadable module support Block layer Processor type and features Power management options (ACPI, APM) 28-05-06 Descrizione sezioni Bus options (PCI, PCMCIA, EISA, MCA, ISA) Executable file formats Networking 30-05-06 Finita descrizione Device Drivers e modifica File systems (versione 0.8.3) 27-07-06 Rivisita generale Aggiunta di qualche informazione(molto poche per la verità)(versione 0.8.4a) 17-09-06 Rivisita generale e correzione di errori ortografici e di forma Inseriti alcuni hyperlink Modificate sezioni Introduzione, Conclusioni e Ringraziamenti Creato capito dedicato alla gestione del kernel sulle varie distribuzioni Inserita gestione del kernel su Debian-based e Ubuntu Inserita gestione su Slackware (versione 0.9.0a) 18-09-06 Ulteriore revisione Modifiche e “limature” in tutto il testo (versione 0.9.0b [TOMMI]) 19-09-06 Rilettura e ultime correzioni, almeno per il momento (versione 0.9.0c) 20-09-06 Pubblicazione della nuova versione (versione 0.9.0) 13.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.
Documenti analoghi
UBUNTU 10.04: COMPILARE KERNEL 3.3.7
All’avvio del sistema viene caricata nella ram, montata temporaneamente come directory root con
tutti i moduli necessari all’avvio del sistema.
Poi verrà sostituita dalla partizione contenente il s...