Benvenuti questa è una breve guida sul come compilare il Kernel di Linux in modo da potere usufruire delle piene potenzialità del sistema. Compilando il Kernel di linux si ottiene più sicurezza, stabilità e velocità.

Prima di tutto scaricare il Kernel da www.kernel.org. Il sistema usato in questa guida è SUSE Enterprise Server ma non fa molta differenza, la procedura, eccetto che per il comando make cloneconfig, è uguale in ogni sistema Linux o unix-like. Per la versione Desktop di openSUSE vale la stessa identica procedura.

Una volta scaricato l’archivio copiarlo nella cartella /usr/src/ o dove si preferisce.

Poi estrarre il contenuto dell’archivio compresso e spostarsi nella cartella appena creata.

# cp /media/usb/linux-3.9.7.tar.xz /usr/src/ 
# cd /usr/src 
# tar -xf *.7.tar.xz 
# cd *7

Ora, per essere sicuri di avere un Kernel funzionante è buona cosa usare la configurazione del Kernel attualmente in uso, creata durante l’installazione o durante una precedente compilazione del Kernel.

Se non vi è un file con le configurazioni precedenti il file verrà creato con il comando make menuconfig.

La configurazione in uso del Kernel si trova in OpenSUSE nel file /proc/config.gz ed è possibile crearne una copia eseguendo il comando: make cloneconfig:

# make cloneconfig

Suse include una funzionalità del kernel che permette di salvare la configurazione in uso in un file compresso, /proc/config.gz. Eseguendo il comando make cloneconfig viene creato un file di configurazione con i valori trovati in config.gz.

Se il comando cloneconfig da errori, come nel mio caso, si potrebbe eseguire il seguente comando:

# cp /proc/config.gz config.gz 
# gzip -dv config.gz
config.gz:       74.6% -- replaced with config
# mv config .config 

oppure questo:

 # cp /boot/config-`uname -r` .config 

Bene, ora che il file di configurazione dell’attuale Kernel (.config) è presente nella cartella, eseguire il comando make menuconfig.

# make menuconfig 

A questo punto appare la finestra del menu principale per la configurazione.

Configurazione del Kernel - Menu principale

Nel menu “general setup” impostare il nome per il nuovo Kernel. Io uso tunato e metto il visto in automatically append version information.

Ciò va fatto per evitare di sovrascrivere la configurazione attuale, perché nel caso la compilazione del Kernel non venga effettuata con successo, si sarebbe ancora in grado usare il vecchio Kernel e riprovare.

Se si lascia com’è si rischia di rendere il sistema inutilizzabile, quindi, importante, cambiare il nome.

Kernel general setup

Una volta fatto premere due volte su esc o exit per tornare al menu principale. Ora, sotto Processor types and features, scegliere il processore, chiaramente se si ha un intel cancellare tutto quello che è AMD e viceversa.

Per aver informazioni sul processore in uso eseguire il seguente comando:

# cat /proc/cpuinfo

Toglere tutto quello che non serve e soprattutto scegliere il tipo di processore (Processor family), se si lascia com’è non si usano a pieno le potenzialità, il kernel di defalut è fatto per soddisfare la maggior parte delle situazioni.

Per esempio, si ha bisogno di Dell Laptop support, se il si sta usando un Server, o del supporto per IBM se non si sta usando IBM?!? Certamente no. Usare linux senza compilare il Kernel sarebbe una cosa stupida da fare.

Kernel processsor type

Scegliere Processor Family -io scelgo core 2/ Newer Xeon- e poi tornare al menu principale. Una volta al menu principale passare a networking support.

Kernel Network device support

Anche qui possiamo togliere quasi tutto.

Come sempre se non si sa cos’è una cosa, si fa una ricerca. Toglere Amateur Radio support, CAN bus, irda (infrarossi), Bluetooth, wireless, WIMAX, RF switch, Plan 9, CAIF, Ceph, plan9 e tutto il resto. Anche nella cartella networking options si può togliere quasi tutto tranne TCP/IP Networking.

Tolgo per es il protocollo ipv6, qos, LAN Emulation, VLAN, apletalk, ipx, ppp, ip-multicasting, DECNET support… Tornare al menu principale con exit o premendo due volte su esc poi passare alla scheda Device Drivers e tolgiere anche li tutto quello che non serve.

Kernel device drivers

Tolgliere per esempio IEEE 1394, Parallel Support, multimedia support (è un Server), Ultrawideband service, Microsoft hyper-v, Virtualization driver e tutto quello che non serve. Consiglio di fare prima un giro tra i vari driver e togliere tutto quello che si conosce di cui non si ha bisogno e poi cercare il resto che non si conosce in internet.

Per avere informazioni sull’hardware installato con SUSE andare in Yast sotto Hardware e poi hardware information. Apparirà una finestra con tutte le informazioni relative all’hardwere in uso.

Suse hardware information

In Netowork device support cancellare ISDN, Wirelesslan, PPP, USB network adapters,SLIP, CSLIP… Cancellare veramente tutto e poi, sotto ethernet driver support, scegliere il driver per la propria scheda ethernet.

Per sapere il nome della propria scheda ethernet eseguire il seguente comando:

 # lspci | grep -i Ethernet 
03:00.0 Ethernet controller Atheros Communications Inc. AR8152 v2.0 Fast Ethernet (rev c1) 

Tornare al menu principale e passare alla sezione file sistem e tolgliere anche qui tutto quello che non serve. Consiglio di dare un occhiata alle opzioni Kernel hacking ma vi sarà una guida specifica per questa sezione. In scurity Options attivo Restrict unprivileged access to kernel syslog e tolgo Apparmor perché non lo uso. Infondo, all’ultimo punto, togliere anche Virtualisation se non si ha intenzione di usare questa tecnologia. Abbiamo finito.

Salvare la configurazione premendo su save e uscire dal programma, le impostazioni verrano salvate nel file .config.

Ora non resta che eseguire il comando per compilare il kernel, chiaramente bisogna avere gcc e i tool per lo sviluppo del Kernel installati.

Se si ricevono degli errori cercare gli errori in internet…

 # make && make modules && make modules_install && make install 

In cui make crea l’immagine, make modules compila i moduli, make modules_install installa i moduli e make install sposta i file necessari in boot e crea la configurazione per grub – il boot manager – in modo automatico. Se il comando viene effettuato con successo alla fine non vi saranno errori ma dei messggi del genere:

sh /local/src/linux-3.9.6/arch/x86/boot/install.sh 3.9.6-tunato arch/x86/boot/bzImage \ System.map "/boot" Kernel image
/boot/vmlinuz-3.9.6-tunato Initrd image
/boot/initrd-3.9.6-tunato Root device
/dev/disk/by-id/md-uuid-07bfe96d:370b4411:1068b86d:0e002d62-part2 (/dev/md126p2) (mounted on / as ext3) Resume device
/dev/disk/by-id/md-uuid-07bfe96d:370b4411:1068b86d:0e002d62-part1 (/dev/md126p1) Kernel Modules: hwmon thermal_sys thermal processor fan libahc mbcache jbd ext3 usb-common usbcore ohci-hcd uhci-hcd ehci-hcd hid usbhid raid0 raid1 raid10 async_tx async_memcpy xor async_xor raid6_pq async_pq async_raid6_recov raid456 crc-t10dif sd_mod Features
acpi block usb md resume.userspace resume.kernel Bootsplash
SLES (1024x768) 93900 blocks >>> Network
auto >>> Calling mkinitrd -B -k /boot/vmlinuz-3.9.6-tunato -i /tmp/mkdumprd.vMeN3NU2jx -f 'kdump network' -s '' Regenerating kdump initrd ... Kernel image
/boot/vmlinuz-3.9.6-tunato Initrd image: /tmp/mkdumprd.vMeN3NU2jx Root device
/dev/disk/by-id/md-uuid-07bfe96d:370b4411:1068b86d:0e002d62-part2 (/dev/md126p2) (mounted on / as ext3) Resume device
/dev/disk/by-id/md-uuid-07bfe96d:370b4411:1068b86d:0e002d62-part1 (/dev/md126p1) Kernel Modules: hwmon thermal_sys thermal processor fan mbcache jbd ext3 usb-common usbcore ohci-hcd uhci-hcd ehci-hcd hid usbhid af_packet atl1e raid0 raid1 raid10 async_tx async_memcpy xor async_xor raid6_pq async_pq async_raid6_recov raid456 nls_utf8 crc-t10dif sd_mod Features: acpi block usb network md resume.userspace resume.kernel kdump 
111085 blocks 

A questo punto bisogna controllare se il file /boot/grub/menu.lst o /boot/grub2/grub.cfg sia stato modificato correttamente e rinviare. Abbiamo finito. Se no cercare gli errori, correggerli e ricompilare il Kernel.

Se si ricompila il Kernel fare attenzione a copiare il file .config da un altra parte e poi eseguire i seguenti comandi

# cp .config $HOME/config 
# make clean 
# make mrproper 
# cp $HOME/config .config 
# make menuconfig 

Aggiungere ciò che manca di modo da correggere l’errore e compilare nuovamente il Kernel.