SlideShare a Scribd company logo
1 of 10
Download to read offline
compilazione kernel linux


Compilazione kernel Linux
Introduzione

Il seguente how-to andrà a spiegare come compilare un kernel linux. Si avranno così cenni su:

    •    Architettura kernel linux;
    •    Configurazione e compilazione;
    •    Installazione;
    •    Boot del sistema;
    •    Conclusioni

La distribuzione linux che prenderemo in considerazione sarà Ubuntu 8.10 e in kernel in uso all'atto del download,
2.6.27-7. Proveremo il tutto su una virtual machine, virtualizzata con vmware.

Dopo aver dato le seguenti direttive iniziamo con la spiegazione.

Architettura Kernel Linux

Iniziamo col dire che il kernel è il cuore del sistema operativo, esso costituisce il codice che viene eseguito dalla
CPU in modalità supervisore, ad esempio quando si tratta di chiamate di sistema, gestori di interrupt. Il kernel di
Linux è Unix-like, implementa cioè le stesse interfacce, ha molte funzionalità comuni, ma altre sono implementate
per le specifiche Linux.

Il sistema operativo linux è un sistema monolitico, tutto il codice è contenuto in un unico eseguibile venendo poi
eseguito entro un unico spazio di indirizzamento.
Il kernel di Linux è modulare, ciò implica che l'architettura Monolitica, abbia una lista a puntatori di Moduli
(girano nello stesso spazio di indirizzamento del kernel). Questo moduli sono dei file separati, ulteriore codice, che
il kernel permette di caricare a tempo di esecuzione. Viene perciò caricato solo il codice strettamente necessario al
sistema, ma si anche la possibilità di caricare codice di terze parti (questo implica anche una falla nella sicurezza
dei sistemi linux, in quanto se riesco ad inserire un modulo ho accesso completo al sistema;).

Struttura concettuale:




Giuseppe_N3mes1s                                                                                                (1)
compilazione kernel linux



Configurazione e Compilazione

La compilazione del kernel ha vari vantaggi, elenchiamone qualcuno:

    •    Minore occupazione di memoria e di spazio su disco da parte del kernel e dei relativi moduli;
    •    Abilitazione/Disabilitazione di driver e/o funzionalità specifiche;
    •    Ottimizzazione.

Prima di iniziare la compilazione abbiamo bisogno di pacchetti contenti i sorgenti del kernel, i tool e le librerie
necessarie.

In questo caso (relativo ad Ubuntu 8.10) useremo Synaptic.

Iniziamo con scaricare i sorgenti del kernel (che varieranno a secondo della distribuzione usata, da noi la 8.10,
avrà i sorgenti 2.6.27, ma nessuno vi vieta di scaricare anche kernel di ultimo sviluppo dal relativo sito che darò
in seguito).
Nel nostro specifico caso useremo apt.

#apt-get install linux-source

oppure semplicemente trovate i relativi pacchetti consoni alla vostro versione.

Al prossimo punto andiamo a scaricare il pacchetto build-essential, che nel suo interno avrà il compilatore GCC ,
make ecc. necessari per la compilazione.

#apt-get install build-essential

Ora non facciamo altro che scaricare le librerie a noi necessarie per la configurazione grafica del kernel. Nel
nostro caso useremo le libqt, ma potete benissimo anche scaricare altre librerie: ncurses, gtk ecc.

Andiamo a scaricare la libreria che ci servirà per configurare graficamente il nostro kernel.

#apt-get install libqt3-mt-dev

Come già detto possiamo anche scegliere di configurare il nostro kernel con altri tool grafici:

libncurses5-dev

gtk2.0-*

Abbiamo anche la possibilità di configurare il kernel senza nessun tool grafico, ma questo sarà spiegato al
prossimo passo.

Bene, ora che siamo in possesso di tutto il necessario passiamo alla configurazione del nostro kernel.

Rechiamoci nella cartella dove sono stati scaricati i source:



Giuseppe_N3mes1s                                                                                                  (2)
compilazione kernel linux

#cd /usr/src

Dando il comando:

#ls -l

possiamo notare il file appena scaricato:




linux-source-2.6.27.tar.bz2

Ora passiamo a spacchettare il file ed entrare nella cartella ottenuta e visualizzarne il contenuto, procediamo per
ordine:

#tar jxf linux-source-2.6.27.tar.bz2

#cd linux-source-2.6.27

#ls


Il contenuto della cartella sarà questo:




Bene, ora passiamo alla vera è propria configurazione del nostro kernel.

Come già detto in precedenza varie volte, noi useremo il tool grafico datoci dalle librerie qt scaricate in
precedenza.

Per configurare con le altre librerie oppure senza:

#make gconfig               //librerie gtk



Giuseppe_N3mes1s                                                                                                (3)
compilazione kernel linux

#make menuconfig //librerie ncurses

#make menu //nessuna libreria necessaria

Questo ultimo comando si presenterà con una serie di comandi relativi alla configurazione del nostro kernel, per
scegliere i vari set e i vari moduli, diciamo in modo procedurale, se sbagliate qualcosa dovete ricominciare tutto
d'accapo, è il metodo sconsigliato, sopratutto per chi non ha esperienza con la configurazione.

Ora passiamo alla configurazione da noi scelta, diamo il seguente comando per avere l'interfaccia grafica utile per
la configurazione con le qt:

#make xconfig

non fate caso ai vari warning che vi si presenteranno, il risultato finale del comando sarà questa interfaccia:




Ora non facciamo altro che configurare a nostro piacimento il kernel.

Ciascuna opzione può essere compilata all'interno del kernel, all'interno di un modulo separato, oppure escluso.
Ogni opzione può avere delle sotto-opzioni, le sotto-opzioni di un modulo sono incluse nel modulo stesso di cui
fanno parte e perciò non vengo incluse nel kernel. Alcune opzioni richiedono dei valori numerici, mentre altri

Giuseppe_N3mes1s                                                                                                  (4)
compilazione kernel linux


richiedono delle stringhe. Prendiamo in esempio LOCALVERSION , che sarà il nome che sarà attribuito alla
versione del kernel da noi compilato(nel nostro caso inseriamo : “-nemesis”, così da ottenere la nostra versione
come 2.6.27.18-nemesis).

Per compilare direttamente opzioni nel kernel la spunta sarà diversa da quella che indicherà i moduli:


          indica che sono opzioni aggiunte al kernel;

         indica che sarà compilato come modulo.


Scelta Configurazione

Molte delle opzioni che ci si presentano riguardano la configurazione hardware della macchina su cui il kernel
sarà eseguito una volta compilato. Occorre perciò raccogliere informazioni riguardanti il nostro hardware per
selezionare poi quello che serve, o almeno il minimo indispensabile. Altre opzioni non richiedono la conoscenza
dell'hardware, ad esempio firewall, gestione energetica, ipv.

Linux ci mette a disposizione alcune utility per conoscere le info della macchina su cui stiamo operando:

    •    lscpi
    •    cat /proc/cpuinfo
    •    hal-device-manager (tool grafico)
    •    lsmod (elenca i moduli attualmente in uso)

Questi sono tutti comandi da dare da shell per ottenere, come già detto, info sul nostro hardware.


La figura mostra un esempio di un'architettura con bus di I/O PCI e ISA.




Giuseppe_N3mes1s                                                                                              (5)
compilazione kernel linux




Una volta configurato il nostro kernel non facciamo altro che cliccare sul floppy in alto a sinistra.




Il quale comando andrà a salvare il nostro kernel configurato nel file .config, nella cartella in cui ci troviamo, cioè
/usr/src/linux.-sources-2.6.27.

Ora non ci resta altro che compilare il tutto.

Compilazione
Alcuni how-to fanno riferimento a diversi tipi di compilazione, diciamo separata, con vari comandi.

# make bzImage //per compilare l'immagine del kernel

# make modules //per compilare eventuali moduli

Ma con gli ultimi kernel è possibile compilare il tutto con un unico comando, come andremo a fare noi:

#make

Ora non bisogna fare altro che aspettare che la compilazione termini, e se abbiamo configurato bene il tutto non
otterremo nessun errore (non fate caso ai vari warning che vi si presenteranno).

NB
Se abbiamo già compilato il kernel una volta, oppure a causa di un errore, ci tocca ricompilarlo, dobbiamo dare il
comando:

#make clean

Non fa altro che rimuovere i file oggetto di una compilazione precedente.
/NB


Installazione

Dopo aver terminato la compilazione, e sperando che il tutto sia andata a buon fine, non ci rimane altro che
copiare tutto il necessario ottenuto.

Per prima cosa diamo il comando:


Giuseppe_N3mes1s                                                                                                  (6)
compilazione kernel linux



#make modules_install

il quale non fa altro che copiare i moduli in /lib/modules/MIAVERSIONE in questo caso, il risulatato del
comando:

#ls /lib/modules/2.6.27.18-nemesis

sara l'output di tutti i moduli appena installati:




Passiamo ora a copiare l'immagine del kernel (fate attenzione a non sovrescrivere altre immagini del kernel,
rinominandola a vostro piacimento).

#cp arch/i386/boot/bzImage /boot/vmlinuz-MIAVERSIONE

Poi andiamo, per comodità, a salvare anche il file di configurazione del kernel:

#cp .config /boot/config-MIAVERSIONE

Il risultato ottenuto lo possiamo vedere andando a controllare il contenuto della cartella /boot/:

#ls -l /boot/




ritroviamo così i file appena creati: vmlinuz-2.6.27.18-nemesis, config-2.6.27.18-nemesis.

Per il prossimo passaggio abbiamo bisogno di una spiegazione di come funziona il boot del sistema.
A grandi linee il sistema si divide in 8 passaggi fondamentali; andiamo ad esporli per poi così capire la creazione

Giuseppe_N3mes1s                                                                                                (7)
compilazione kernel linux


del prossimo file a cosa serve:

    1.   Accensione;
    2.   Il BIOS inizializza l'hardware;
    3.   Il BIOS carica in RAM il bootloader dai primi settori del disco;
    4.   Il bootloader entra in esecuzione;
    5.   Il bootloader carica in RAM dal disco l'immagine del kernel;
    6.   Il bootloader carica in RAM dal disco un archivio (initrd.img) con alcuni moduli (opzionale);
    7.   Il kernel inizializza i vari sottosistemi e i driver;
    8.   Il kernel “monta” il filesystem ed avvia il primo processo (INIT).

La parte che ci interessa è la 6.

L'initrd, che sta per Initial RAM Disk, è un file caricato in memoria dal bootloader, ed acceduto poi a sua volta
dal kernel come se fosse un disco. Questo perchè alcuni driver sono necessari al kernel per effettuare il boot e
caricare i moduli, il problema sorge se questi driver sono compilati a sua volta come moduli? Il filesystem non
può essere montato se il modulo del driver risiede proprio sul filesystem.

Passiamo ora alla creazione dell' Initial RAM Disk.

Alcune distrubuzioni e altri how-to fanno riferimento a diversi comandi per creare l'initrd, noi useremo questo
comando per crearlo:

#mkinitramfs -o /boot/initrd.img-MIAVERSIONE MIAVERSIONE2

dove MIAVERSIONE sarà il nome del file creato, così come nei precedenti casi, mentre MIAVERSIONE2 sta
per la path che è stata creata con i moduli. Nel nostro caso ad esempio:

#mkinitramfs -o /boot/initrd.img-2.6.27.18-nemesis 2.6.27.18-nemesis

Così avremo creato il file nella cartella /boot: initrd.img-2.6.27.18-nemesis.

NB: il comando va eseguito dopo aver installato i moduli, proprio perchè serve la path di essi per ottenere il file.

Bootloader

Passiamo alla parte finale del nostro how-to.

Il bootloader è un piccolo programma che viene eseguito all'avvio del computer, esso viene prelevato dal BIOS
dai primi settori del disco. Il bootloader permette di selezionare quale sistema operativo avviare, nel nostro caso
dobbiamo modificare il bootloader per utilizzare il kernel appena ri/compilato.
Abbiamo vari tipi di bootloader, ma noi prenderemo in considerazione quello a nostra disposizione, cioè GRUB.

Per andare a modificare il nostro bootloader, in modo che carichi il kernel appena ricompilato, andiamo ad
editare, con un qualsiasi editor, il file /boot/grub/menu.lst.
Consiglio a tutti di creare un file di backup se è la prima volta che editate il file.
La configurazione contiene alcune voci generali nella parte iniziale del file, per ciascun sistema operativo da
avviare va inserita una nuova voce in coda.


Giuseppe_N3mes1s                                                                                                  (8)
compilazione kernel linux



Nel mio specifico caso andrò ad inserire:




Salvate il tutto.

NB: ripeto, nel mio caso specifico ho modificato il file menu.lst in una certa maniera, prendete come esempio il
file del kernel originale di boot e modificate solo le voci riguardanti il title, kernel e initrd.


Conclusioni
Ecco che siamo giunti alla vera e propria fine, non ci tocca che riavviare, nel nostro caso la nostra macchina
virtuale, attendere il GRUB:




Selezioniamo il nostro kernel, nel mio caso: Ubuntu 8.10, kernel 2.6.27.18-nemesis, attendiamo il boot del
sistema, e se tutto e andato per il verso giusto diamo il comando:

$ uname -a


Giuseppe_N3mes1s                                                                                                 (9)
compilazione kernel linux


Ottenendo così come output le info sul kernel in uso:




Nel mio caso il kernel in uso:

2.6.27.18-nemesis

Con questa ultima cosa termino il mio how-to, spero di essere stato chiaro e conciso sulle cose sovra-esposte, per
ogni dubbio non esitate a contattarmi.

Vi lascio con dei link che potranno tornare utili per guida:

    •    Ottenere Ubuntu
    •    The Linux Kernel Archives
    •    Vmware Workstation
    •    Kernel Linux


Ringraziamenti:

#HUF

ExploisIT



Contact Me:

mail: n3mes1s.OxOO@gmail.com

IRC: /server irc.hackers-uf.org @ #huf




Cordiali Saluti Giuseppe_N3mes1s




Giuseppe_N3mes1s                                                                                             ( 10 )

More Related Content

What's hot

Giochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsGiochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsalberto fiaschi
 
Proxmox Ve - Introduzione - MontelLUG Cs2011
Proxmox Ve - Introduzione - MontelLUG Cs2011Proxmox Ve - Introduzione - MontelLUG Cs2011
Proxmox Ve - Introduzione - MontelLUG Cs2011Mirco Piccin
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriFulvio Corno
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistemaFulvio Corno
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxTruelite
 
Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Joaquim Hangalo
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaAlessandro Selli
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxDeveler S.r.l.
 
LUG - Logical volumes management
LUG - Logical volumes managementLUG - Logical volumes management
LUG - Logical volumes managementAlessandro Manfredi
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Marcello Missiroli
 

What's hot (18)

Giochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsGiochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfs
 
Lezione Quattro
Lezione QuattroLezione Quattro
Lezione Quattro
 
Proxmox Ve - Introduzione - MontelLUG Cs2011
Proxmox Ve - Introduzione - MontelLUG Cs2011Proxmox Ve - Introduzione - MontelLUG Cs2011
Proxmox Ve - Introduzione - MontelLUG Cs2011
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatori
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistema
 
Ambienti di virtualizzazione
Ambienti di virtualizzazioneAmbienti di virtualizzazione
Ambienti di virtualizzazione
 
Lezione Cinque
Lezione CinqueLezione Cinque
Lezione Cinque
 
LTSP
LTSPLTSP
LTSP
 
PostgreSQL : Tuning
PostgreSQL : TuningPostgreSQL : Tuning
PostgreSQL : Tuning
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente Linux
 
Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
 
LUG - Logical volumes management
LUG - Logical volumes managementLUG - Logical volumes management
LUG - Logical volumes management
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
Cpu
CpuCpu
Cpu
 

Viewers also liked

Partecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª PartePartecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª PartePaolo Sammicheli
 
Ubuntu Unity e GNOME Shell
Ubuntu Unity e GNOME ShellUbuntu Unity e GNOME Shell
Ubuntu Unity e GNOME ShellLuca Ferretti
 
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011Flavia Weisghizzi
 
Partecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª PartePartecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª PartePaolo Sammicheli
 
Lug Roma3 Corso Linux Avanzato
Lug Roma3   Corso Linux AvanzatoLug Roma3   Corso Linux Avanzato
Lug Roma3 Corso Linux Avanzatofosk
 
Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.Andrea Marchetti
 
Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011Vianello Michele
 
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneGiulio Collura
 
BackBox Linux e Metasploit: Una dimostrazione pratica del shellshock
BackBox Linux e Metasploit: Una dimostrazione pratica del shellshockBackBox Linux e Metasploit: Una dimostrazione pratica del shellshock
BackBox Linux e Metasploit: Una dimostrazione pratica del shellshockAndrea Draghetti
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linuxalberto fiaschi
 
BackBox Linux: Simulazione di un Penetration Test
BackBox Linux: Simulazione di un Penetration TestBackBox Linux: Simulazione di un Penetration Test
BackBox Linux: Simulazione di un Penetration TestAndrea Draghetti
 
Hey Cloud, it’s the user calling, he says he wants the security back
Hey Cloud, it’s the user calling, he says he wants the security backHey Cloud, it’s the user calling, he says he wants the security back
Hey Cloud, it’s the user calling, he says he wants the security backAlessandro Manfredi
 
Alla scoperta di Ubuntu Phone, lo smartphone Open Source
Alla scoperta di Ubuntu Phone, lo smartphone Open SourceAlla scoperta di Ubuntu Phone, lo smartphone Open Source
Alla scoperta di Ubuntu Phone, lo smartphone Open SourceMarco Trevisan
 

Viewers also liked (20)

Gcc & Make
Gcc & MakeGcc & Make
Gcc & Make
 
Guida C++
Guida C++Guida C++
Guida C++
 
this = that
this = that this = that
this = that
 
Partecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª PartePartecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
 
Ubuntu Unity e GNOME Shell
Ubuntu Unity e GNOME ShellUbuntu Unity e GNOME Shell
Ubuntu Unity e GNOME Shell
 
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
 
Partecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª PartePartecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
 
Lug Roma3 Corso Linux Avanzato
Lug Roma3   Corso Linux AvanzatoLug Roma3   Corso Linux Avanzato
Lug Roma3 Corso Linux Avanzato
 
Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.
 
Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011
 
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
 
BackBox Linux e Metasploit: Una dimostrazione pratica del shellshock
BackBox Linux e Metasploit: Una dimostrazione pratica del shellshockBackBox Linux e Metasploit: Una dimostrazione pratica del shellshock
BackBox Linux e Metasploit: Una dimostrazione pratica del shellshock
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
LUG - Ricompilazione kernel
LUG - Ricompilazione kernelLUG - Ricompilazione kernel
LUG - Ricompilazione kernel
 
BackBox Linux: Simulazione di un Penetration Test
BackBox Linux: Simulazione di un Penetration TestBackBox Linux: Simulazione di un Penetration Test
BackBox Linux: Simulazione di un Penetration Test
 
Hey Cloud, it’s the user calling, he says he wants the security back
Hey Cloud, it’s the user calling, he says he wants the security backHey Cloud, it’s the user calling, he says he wants the security back
Hey Cloud, it’s the user calling, he says he wants the security back
 
La tua prima app per Ubuntu Touch
La tua prima app per Ubuntu TouchLa tua prima app per Ubuntu Touch
La tua prima app per Ubuntu Touch
 
Presentare ubuntu
Presentare ubuntuPresentare ubuntu
Presentare ubuntu
 
Ubuntu Linux - Corso Base
Ubuntu Linux - Corso BaseUbuntu Linux - Corso Base
Ubuntu Linux - Corso Base
 
Alla scoperta di Ubuntu Phone, lo smartphone Open Source
Alla scoperta di Ubuntu Phone, lo smartphone Open SourceAlla scoperta di Ubuntu Phone, lo smartphone Open Source
Alla scoperta di Ubuntu Phone, lo smartphone Open Source
 

Similar to Compilazione Kernel

Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'Aruba S.p.A.
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Guida alla modifica del dsdt 1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basiGuida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt 1a parte - le basiguest1842a5
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
 
Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueDario Mazza
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Dario Mazza
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensioneandreazube
 
Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...Aruba S.p.A.
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 reckdekda
 
Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding LinuxNaLUG
 
Osiris Operating system
Osiris Operating systemOsiris Operating system
Osiris Operating systemDiego
 
Installazione Linux
Installazione LinuxInstallazione Linux
Installazione Linuxarock84
 
Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...Aruba S.p.A.
 
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...Aruba S.p.A.
 

Similar to Compilazione Kernel (20)

Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Guida alla modifica del dsdt 1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basiGuida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt 1a parte - le basi
 
Battaglia Navale
Battaglia NavaleBattaglia Navale
Battaglia Navale
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione Cinque
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensione
 
Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 19 - parte 2: 'Template Cloud Computin...
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 rec
 
Slax su pendrive
Slax su pendriveSlax su pendrive
Slax su pendrive
 
Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding Linux
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Osiris Operating system
Osiris Operating systemOsiris Operating system
Osiris Operating system
 
Sfrontori pillole-cobbler
Sfrontori pillole-cobblerSfrontori pillole-cobbler
Sfrontori pillole-cobbler
 
Installazione Linux
Installazione LinuxInstallazione Linux
Installazione Linux
 
Cuma rev001
Cuma rev001Cuma rev001
Cuma rev001
 
Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...
Con Aruba, a lezione di cloud #lezione 20 - parte 2: 'Template Cloud Computin...
 
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
 

Compilazione Kernel

  • 1. compilazione kernel linux Compilazione kernel Linux Introduzione Il seguente how-to andrà a spiegare come compilare un kernel linux. Si avranno così cenni su: • Architettura kernel linux; • Configurazione e compilazione; • Installazione; • Boot del sistema; • Conclusioni La distribuzione linux che prenderemo in considerazione sarà Ubuntu 8.10 e in kernel in uso all'atto del download, 2.6.27-7. Proveremo il tutto su una virtual machine, virtualizzata con vmware. Dopo aver dato le seguenti direttive iniziamo con la spiegazione. Architettura Kernel Linux Iniziamo col dire che il kernel è il cuore del sistema operativo, esso costituisce il codice che viene eseguito dalla CPU in modalità supervisore, ad esempio quando si tratta di chiamate di sistema, gestori di interrupt. Il kernel di Linux è Unix-like, implementa cioè le stesse interfacce, ha molte funzionalità comuni, ma altre sono implementate per le specifiche Linux. Il sistema operativo linux è un sistema monolitico, tutto il codice è contenuto in un unico eseguibile venendo poi eseguito entro un unico spazio di indirizzamento. Il kernel di Linux è modulare, ciò implica che l'architettura Monolitica, abbia una lista a puntatori di Moduli (girano nello stesso spazio di indirizzamento del kernel). Questo moduli sono dei file separati, ulteriore codice, che il kernel permette di caricare a tempo di esecuzione. Viene perciò caricato solo il codice strettamente necessario al sistema, ma si anche la possibilità di caricare codice di terze parti (questo implica anche una falla nella sicurezza dei sistemi linux, in quanto se riesco ad inserire un modulo ho accesso completo al sistema;). Struttura concettuale: Giuseppe_N3mes1s (1)
  • 2. compilazione kernel linux Configurazione e Compilazione La compilazione del kernel ha vari vantaggi, elenchiamone qualcuno: • Minore occupazione di memoria e di spazio su disco da parte del kernel e dei relativi moduli; • Abilitazione/Disabilitazione di driver e/o funzionalità specifiche; • Ottimizzazione. Prima di iniziare la compilazione abbiamo bisogno di pacchetti contenti i sorgenti del kernel, i tool e le librerie necessarie. In questo caso (relativo ad Ubuntu 8.10) useremo Synaptic. Iniziamo con scaricare i sorgenti del kernel (che varieranno a secondo della distribuzione usata, da noi la 8.10, avrà i sorgenti 2.6.27, ma nessuno vi vieta di scaricare anche kernel di ultimo sviluppo dal relativo sito che darò in seguito). Nel nostro specifico caso useremo apt. #apt-get install linux-source oppure semplicemente trovate i relativi pacchetti consoni alla vostro versione. Al prossimo punto andiamo a scaricare il pacchetto build-essential, che nel suo interno avrà il compilatore GCC , make ecc. necessari per la compilazione. #apt-get install build-essential Ora non facciamo altro che scaricare le librerie a noi necessarie per la configurazione grafica del kernel. Nel nostro caso useremo le libqt, ma potete benissimo anche scaricare altre librerie: ncurses, gtk ecc. Andiamo a scaricare la libreria che ci servirà per configurare graficamente il nostro kernel. #apt-get install libqt3-mt-dev Come già detto possiamo anche scegliere di configurare il nostro kernel con altri tool grafici: libncurses5-dev gtk2.0-* Abbiamo anche la possibilità di configurare il kernel senza nessun tool grafico, ma questo sarà spiegato al prossimo passo. Bene, ora che siamo in possesso di tutto il necessario passiamo alla configurazione del nostro kernel. Rechiamoci nella cartella dove sono stati scaricati i source: Giuseppe_N3mes1s (2)
  • 3. compilazione kernel linux #cd /usr/src Dando il comando: #ls -l possiamo notare il file appena scaricato: linux-source-2.6.27.tar.bz2 Ora passiamo a spacchettare il file ed entrare nella cartella ottenuta e visualizzarne il contenuto, procediamo per ordine: #tar jxf linux-source-2.6.27.tar.bz2 #cd linux-source-2.6.27 #ls Il contenuto della cartella sarà questo: Bene, ora passiamo alla vera è propria configurazione del nostro kernel. Come già detto in precedenza varie volte, noi useremo il tool grafico datoci dalle librerie qt scaricate in precedenza. Per configurare con le altre librerie oppure senza: #make gconfig //librerie gtk Giuseppe_N3mes1s (3)
  • 4. compilazione kernel linux #make menuconfig //librerie ncurses #make menu //nessuna libreria necessaria Questo ultimo comando si presenterà con una serie di comandi relativi alla configurazione del nostro kernel, per scegliere i vari set e i vari moduli, diciamo in modo procedurale, se sbagliate qualcosa dovete ricominciare tutto d'accapo, è il metodo sconsigliato, sopratutto per chi non ha esperienza con la configurazione. Ora passiamo alla configurazione da noi scelta, diamo il seguente comando per avere l'interfaccia grafica utile per la configurazione con le qt: #make xconfig non fate caso ai vari warning che vi si presenteranno, il risultato finale del comando sarà questa interfaccia: Ora non facciamo altro che configurare a nostro piacimento il kernel. Ciascuna opzione può essere compilata all'interno del kernel, all'interno di un modulo separato, oppure escluso. Ogni opzione può avere delle sotto-opzioni, le sotto-opzioni di un modulo sono incluse nel modulo stesso di cui fanno parte e perciò non vengo incluse nel kernel. Alcune opzioni richiedono dei valori numerici, mentre altri Giuseppe_N3mes1s (4)
  • 5. compilazione kernel linux richiedono delle stringhe. Prendiamo in esempio LOCALVERSION , che sarà il nome che sarà attribuito alla versione del kernel da noi compilato(nel nostro caso inseriamo : “-nemesis”, così da ottenere la nostra versione come 2.6.27.18-nemesis). Per compilare direttamente opzioni nel kernel la spunta sarà diversa da quella che indicherà i moduli: indica che sono opzioni aggiunte al kernel; indica che sarà compilato come modulo. Scelta Configurazione Molte delle opzioni che ci si presentano riguardano la configurazione hardware della macchina su cui il kernel sarà eseguito una volta compilato. Occorre perciò raccogliere informazioni riguardanti il nostro hardware per selezionare poi quello che serve, o almeno il minimo indispensabile. Altre opzioni non richiedono la conoscenza dell'hardware, ad esempio firewall, gestione energetica, ipv. Linux ci mette a disposizione alcune utility per conoscere le info della macchina su cui stiamo operando: • lscpi • cat /proc/cpuinfo • hal-device-manager (tool grafico) • lsmod (elenca i moduli attualmente in uso) Questi sono tutti comandi da dare da shell per ottenere, come già detto, info sul nostro hardware. La figura mostra un esempio di un'architettura con bus di I/O PCI e ISA. Giuseppe_N3mes1s (5)
  • 6. compilazione kernel linux Una volta configurato il nostro kernel non facciamo altro che cliccare sul floppy in alto a sinistra. Il quale comando andrà a salvare il nostro kernel configurato nel file .config, nella cartella in cui ci troviamo, cioè /usr/src/linux.-sources-2.6.27. Ora non ci resta altro che compilare il tutto. Compilazione Alcuni how-to fanno riferimento a diversi tipi di compilazione, diciamo separata, con vari comandi. # make bzImage //per compilare l'immagine del kernel # make modules //per compilare eventuali moduli Ma con gli ultimi kernel è possibile compilare il tutto con un unico comando, come andremo a fare noi: #make Ora non bisogna fare altro che aspettare che la compilazione termini, e se abbiamo configurato bene il tutto non otterremo nessun errore (non fate caso ai vari warning che vi si presenteranno). NB Se abbiamo già compilato il kernel una volta, oppure a causa di un errore, ci tocca ricompilarlo, dobbiamo dare il comando: #make clean Non fa altro che rimuovere i file oggetto di una compilazione precedente. /NB Installazione Dopo aver terminato la compilazione, e sperando che il tutto sia andata a buon fine, non ci rimane altro che copiare tutto il necessario ottenuto. Per prima cosa diamo il comando: Giuseppe_N3mes1s (6)
  • 7. compilazione kernel linux #make modules_install il quale non fa altro che copiare i moduli in /lib/modules/MIAVERSIONE in questo caso, il risulatato del comando: #ls /lib/modules/2.6.27.18-nemesis sara l'output di tutti i moduli appena installati: Passiamo ora a copiare l'immagine del kernel (fate attenzione a non sovrescrivere altre immagini del kernel, rinominandola a vostro piacimento). #cp arch/i386/boot/bzImage /boot/vmlinuz-MIAVERSIONE Poi andiamo, per comodità, a salvare anche il file di configurazione del kernel: #cp .config /boot/config-MIAVERSIONE Il risultato ottenuto lo possiamo vedere andando a controllare il contenuto della cartella /boot/: #ls -l /boot/ ritroviamo così i file appena creati: vmlinuz-2.6.27.18-nemesis, config-2.6.27.18-nemesis. Per il prossimo passaggio abbiamo bisogno di una spiegazione di come funziona il boot del sistema. A grandi linee il sistema si divide in 8 passaggi fondamentali; andiamo ad esporli per poi così capire la creazione Giuseppe_N3mes1s (7)
  • 8. compilazione kernel linux del prossimo file a cosa serve: 1. Accensione; 2. Il BIOS inizializza l'hardware; 3. Il BIOS carica in RAM il bootloader dai primi settori del disco; 4. Il bootloader entra in esecuzione; 5. Il bootloader carica in RAM dal disco l'immagine del kernel; 6. Il bootloader carica in RAM dal disco un archivio (initrd.img) con alcuni moduli (opzionale); 7. Il kernel inizializza i vari sottosistemi e i driver; 8. Il kernel “monta” il filesystem ed avvia il primo processo (INIT). La parte che ci interessa è la 6. L'initrd, che sta per Initial RAM Disk, è un file caricato in memoria dal bootloader, ed acceduto poi a sua volta dal kernel come se fosse un disco. Questo perchè alcuni driver sono necessari al kernel per effettuare il boot e caricare i moduli, il problema sorge se questi driver sono compilati a sua volta come moduli? Il filesystem non può essere montato se il modulo del driver risiede proprio sul filesystem. Passiamo ora alla creazione dell' Initial RAM Disk. Alcune distrubuzioni e altri how-to fanno riferimento a diversi comandi per creare l'initrd, noi useremo questo comando per crearlo: #mkinitramfs -o /boot/initrd.img-MIAVERSIONE MIAVERSIONE2 dove MIAVERSIONE sarà il nome del file creato, così come nei precedenti casi, mentre MIAVERSIONE2 sta per la path che è stata creata con i moduli. Nel nostro caso ad esempio: #mkinitramfs -o /boot/initrd.img-2.6.27.18-nemesis 2.6.27.18-nemesis Così avremo creato il file nella cartella /boot: initrd.img-2.6.27.18-nemesis. NB: il comando va eseguito dopo aver installato i moduli, proprio perchè serve la path di essi per ottenere il file. Bootloader Passiamo alla parte finale del nostro how-to. Il bootloader è un piccolo programma che viene eseguito all'avvio del computer, esso viene prelevato dal BIOS dai primi settori del disco. Il bootloader permette di selezionare quale sistema operativo avviare, nel nostro caso dobbiamo modificare il bootloader per utilizzare il kernel appena ri/compilato. Abbiamo vari tipi di bootloader, ma noi prenderemo in considerazione quello a nostra disposizione, cioè GRUB. Per andare a modificare il nostro bootloader, in modo che carichi il kernel appena ricompilato, andiamo ad editare, con un qualsiasi editor, il file /boot/grub/menu.lst. Consiglio a tutti di creare un file di backup se è la prima volta che editate il file. La configurazione contiene alcune voci generali nella parte iniziale del file, per ciascun sistema operativo da avviare va inserita una nuova voce in coda. Giuseppe_N3mes1s (8)
  • 9. compilazione kernel linux Nel mio specifico caso andrò ad inserire: Salvate il tutto. NB: ripeto, nel mio caso specifico ho modificato il file menu.lst in una certa maniera, prendete come esempio il file del kernel originale di boot e modificate solo le voci riguardanti il title, kernel e initrd. Conclusioni Ecco che siamo giunti alla vera e propria fine, non ci tocca che riavviare, nel nostro caso la nostra macchina virtuale, attendere il GRUB: Selezioniamo il nostro kernel, nel mio caso: Ubuntu 8.10, kernel 2.6.27.18-nemesis, attendiamo il boot del sistema, e se tutto e andato per il verso giusto diamo il comando: $ uname -a Giuseppe_N3mes1s (9)
  • 10. compilazione kernel linux Ottenendo così come output le info sul kernel in uso: Nel mio caso il kernel in uso: 2.6.27.18-nemesis Con questa ultima cosa termino il mio how-to, spero di essere stato chiaro e conciso sulle cose sovra-esposte, per ogni dubbio non esitate a contattarmi. Vi lascio con dei link che potranno tornare utili per guida: • Ottenere Ubuntu • The Linux Kernel Archives • Vmware Workstation • Kernel Linux Ringraziamenti: #HUF ExploisIT Contact Me: mail: n3mes1s.OxOO@gmail.com IRC: /server irc.hackers-uf.org @ #huf Cordiali Saluti Giuseppe_N3mes1s Giuseppe_N3mes1s ( 10 )