Come compilare il kernel
Da Wiki di NetBSD Italia.
m (Annullate le modifiche di Aburatori (discussione), riportata alla versione precedente di MaybeDrunk) |
|||
Riga 1: | Riga 1: | ||
- | In questa breve guida si illustrerà come compilare il kernel [[NetBSD]]. Il sistema che si è usato per questo howto è un sistema NetBSD/i386 | + | In questa breve guida si illustrerà come compilare il kernel [[NetBSD]]. Il sistema che si è usato per questo howto è un sistema NetBSD/i386 4.0_RC3 ma molto probabilmente i vari procedimenti/approcci affrontati sono portabili in tutti gli altri port facendo attenzione soltanto alle opzioni legate esclusivamente ad un port (per esempio {{man|vesafb|4}} si può usare solo sul port i386). |
Questa guida presuppone delle conoscenze base riguardanti [[pkgsrc]] e del sistema NetBSD. Il processo di compilazione del kernel è semplicissimo, veloce, elegante e soprattutto accessibile a tutti (in perfetta filosofia NetBSD). | Questa guida presuppone delle conoscenze base riguardanti [[pkgsrc]] e del sistema NetBSD. Il processo di compilazione del kernel è semplicissimo, veloce, elegante e soprattutto accessibile a tutti (in perfetta filosofia NetBSD). | ||
Riga 24: | Riga 24: | ||
$ mkdir builds | $ mkdir builds | ||
$ cd builds/ | $ cd builds/ | ||
- | $ ftp ftp://ftp.netbsd.org/pub/NetBSD/NetBSD- | + | $ ftp ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-4.0_RC3/source/sets/syssrc.tgz |
- | Una volta che il tarball è scaricato (sono circa | + | Una volta che il tarball è scaricato (sono circa 33Mb) lo si deve ''esplodere'' nel seguente modo: |
$ tar xzf syssrc.tgz | $ tar xzf syssrc.tgz | ||
Riga 50: | Riga 50: | ||
$ cp GENERIC MIOKERNEL | $ cp GENERIC MIOKERNEL | ||
- | $ | + | $ $EDITOR MIOKERNEL |
Altra ottima idea è quella di ottenere la configurazione dal kernel che stiamo attualmente utilizzando il tool {{man|config|1}}: | Altra ottima idea è quella di ottenere la configurazione dal kernel che stiamo attualmente utilizzando il tool {{man|config|1}}: | ||
$ config -x /netbsd > MIOKERNEL | $ config -x /netbsd > MIOKERNEL | ||
- | $ | + | $ $EDITOR MIOKERNEL |
Il nome del kernel (in questo caso ''MIOKERNEL'') è libero, si consiglia comunque un nome significativo, un ottima idea è quella di usare come nome l'hostname (per esempio ''BIANCONIGLIO'' nel precedente caso) in modo tale che in situazioni di necessità troviamo facilmente il nostro file di configurazione. | Il nome del kernel (in questo caso ''MIOKERNEL'') è libero, si consiglia comunque un nome significativo, un ottima idea è quella di usare come nome l'hostname (per esempio ''BIANCONIGLIO'' nel precedente caso) in modo tale che in situazioni di necessità troviamo facilmente il nostro file di configurazione. |
Versione delle 11:14, 17 mag 2009
In questa breve guida si illustrerà come compilare il kernel NetBSD. Il sistema che si è usato per questo howto è un sistema NetBSD/i386 4.0_RC3 ma molto probabilmente i vari procedimenti/approcci affrontati sono portabili in tutti gli altri port facendo attenzione soltanto alle opzioni legate esclusivamente ad un port (per esempio vesafb(4) si può usare solo sul port i386).
Questa guida presuppone delle conoscenze base riguardanti pkgsrc e del sistema NetBSD. Il processo di compilazione del kernel è semplicissimo, veloce, elegante e soprattutto accessibile a tutti (in perfetta filosofia NetBSD).
Indice |
Introduzione
Ci sono due metodi per ricompilare il kernel, questa guida li affronterà entrambi ma è caldamente consigliato l'uso del secondo metodo. Il primo metodo consiste nel prendere il file di configurazione del kernel e poi commentare/decomentare tutto con l'ausilio di un editor, chiameremo questo metodo: metodo oldschool. Il secondo metodo invece consiste di usare l'apposito tool adjustkernel.
Perché compilare il kernel
In alcuni casi non siamo soddisfatti del kernel in uso precompilato. Ad esempio nel kernel GENERIC non c'è il supporto per PF, non c'è il supporto per i sensori dell'hardware (hardware monitors). In effetti il kernel GENERIC non è un kernel pieno di caratteristiche. Tutto ciò è giustificato da ragioni di dimensione, un kernel con tutti i supporti è senza dubbio più pesante e in alcuni casi ci potrebbero essere delle caratteristiche non solo che non vogliamo ma che risultano instabili per certi elaboratori mentre per altri no.
È quindi semplice comprendere che in alcuni casi siamo costretti a compilare il kernel per i seguenti motivi:
- abilitare un'opzione
- disabilitare un'opzione
È infatti inutile, per esempio, avere un kernel con supporto della tecnologia AMD Cool`n'Quiet (POWERNOW_K8) quando in realtà abbiamo un processore pentium che supporta la tecnologia Enhanced SpeedStep (ENHANCED_SPEEDSTEP).
Ottenere i sorgenti
Per ottenere i sorgenti basta cercare l'apposito tarball sul nostro server FTP preferito, per esempio:
$ cd $HOME $ mkdir builds $ cd builds/ $ ftp ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-4.0_RC3/source/sets/syssrc.tgz
Una volta che il tarball è scaricato (sono circa 33Mb) lo si deve esplodere nel seguente modo:
$ tar xzf syssrc.tgz
Ora abbiamo tutti sorgenti del kernel, siamo quindi pronti alla ricompilazione del kernel.
Compilazione del kernel
Come conforme a Organizzazione dei contenuti faccio notare che tutti i comandi vanno fatti da utente normale e non da superutente. Questo infatti è l'approccio più corretto, si utilizzerà l'utente root soltanto per copiare il kernel prodotto.
Old school
Illustriamo prima come si ricompila il kernel alla vecchia maniera. Una volta estratto il tarball dobbiamo posizionarci sulla directory in cui ci sono i file di configurazione del kernel:
$ cd usr/src/sys/arch/`uname -m`/conf $ ls ALL GENERIC_DIAGNOSTIC INSTALL_TINY XEN2_DOM0 BIANCONIGLIO GENERIC_ISDN INSTALL_XEN2_DOMU XEN2_DOMU [...]
Possiamo osservare tutte le varie configurazioni, iniziamo quindi ad editare la nostra configurazione. Un buon metodo per iniziare è usare la configurazione GENERIC o quella che preferite.
$ cp GENERIC MIOKERNEL $ $EDITOR MIOKERNEL
Altra ottima idea è quella di ottenere la configurazione dal kernel che stiamo attualmente utilizzando il tool config(1):
$ config -x /netbsd > MIOKERNEL $ $EDITOR MIOKERNEL
Il nome del kernel (in questo caso MIOKERNEL) è libero, si consiglia comunque un nome significativo, un ottima idea è quella di usare come nome l'hostname (per esempio BIANCONIGLIO nel precedente caso) in modo tale che in situazioni di necessità troviamo facilmente il nostro file di configurazione.
Ora possiamo iniziare ad editare il file di configurazione, c'è una sola regola il # significa questa riga è commentata e quindi non la terrò in considerazione, non ci soffermeremo su cosa abilitare e cosa disabilitare perché tutto ciò è compito dell'utente (in realtà il compito sarebbe di adjustkernel, ma procediamo un passo alla volta).
Quindi per esempio commentiamo quello che non ci serve:
[...] # CPU support. At least one is REQUIRED. #options I386_CPU #options I486_CPU #options I586_CPU options I686_CPU # ho un pentium3, quindi 686 [...] #options COMPAT_FREEBSD # non voglio la compatibilità binaria FreeBSD options COMPAT_DARWIN # ...però voglio quella con Darwin [...] #file-system NTFS # non ho partizione NTFS e non mi interessano [...] options ALTQ # (per PF) [...] options WS_DEFAULT_FG=WSCOL_GREEN # console verde? options WS_DEFAULT_BG=WSCOL_BLACK # ...con sfondo nero [...] # VIA VT82C686A hardware monitor viapm* at pci? dev ? function ? # la mia scheda madre ha questi sensori viaenv* at viapm? [...] pseudo-device pf # PF packet filter (voglio PF) pseudo-device pflog # PF log if [...]
Una volta finito ad editare il file di configurazione per il nostro kernel siamo pronti a generare tutti i file che ci servono:
$ config MIOKERNEL Build directory is ../compile/MIOKERNEL Don't forget to run "make depend"
Perfetto, sembra che tutto sia andato per il meglio, è giunto il momento di compilare:
$ cd ../compile/MIOKERNEL $ make depend && make
Se abbiamo fatto tutto per bene dopo un paio di minuti (variano dalla macchina che si ha) abbiamo il nostro kernel. Solo qui ci servirà loggarci da superutente per compiare il kernel (che è un semplice file):
$ file netbsd netbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped $ su # cp /netbsd /onetbsd # gzip -c netbsd > /netbsd
Abbiamo fatto il backup del vecchio kernel in modo tale che se qualche cosa va storto possiamo avviare quel kernel vecchio, cioè onetbsd con la direttiva al boot, per esempio:
boot hd0a:onetbsd
Siamo quindi pronti per provare il nuovo kernel:
# reboot
New school
Il metodo sopra illustrato può essere ritenuto piuttosto noioso e ripetitivo, non trovate? Sì, credo che sia abbastanza ripetitivo, quindi è stato scritto un apposito tool per non far annoiare gli amministratori di sistema, questo tool è adjustkernel.
Hubert Feyrer e Martin Laubach hanno deciso di scrivere questo script Perl per semplificare e velocizzare la compilazione del kernel. adjustkernel infatti non fa altro che prendere un file di configurazione da noi deciso e commentare tutto ciò che non ci serve.
Installare adjustkernel è semplicissimo, su pkgsrc si trova in sysutils/adjustkernel:
$ cd ${PKGSRCDIR}/sysutils/adjustkernel/ $ make install clean-depends clean
Una volta installato siamo pronti per utilizzarlo:
$ cd $HOME/builds/usr/src/sys/arch/`uname -m`/conf/ $ adjustkernel GENERIC -o MIOKERNEL $ $EDITOR MIOKERNEL
Qualche piccolo ritocco però è da fare, ma questi ritocchi sono di solito molto semplici e molto facili anche da identificare. Infatti se adjustkernel trova qualche cosa che non corrisponde aggiunge alla fine del file di configurazione una serie di NOTE che facilitano la correzione, per esempio:
# NOTE: NoMatch: spkr0 at pcppi0 # NOTE: NoMatch: atabus0 at viaide0 channel 0 # NOTE: NoMatch: atabus1 at viaide0 channel 1
Dovremo quindi provvedere a correggere questi piccoli errori a mano:
[...] spkr0 at pcppi? # PC speaker [...] atabus* at ata? [...]
Una volta corretti l'approccio finale da seguire è identico a quello affrontato con il vecchio metodo:
$ config MIOKERNEL $ cd ../compile/MIOKERNEL $ make depend && make $ su # cp /netbsd /onetbsd # gzip -c netbsd > /netbsd
Conclusioni
Da come si è potuto osservare ricompilare il kernel è un gioco da ragazzi. NetBSD vanta infatti di tool quali adjustkernel e config che rendono la compilazione del kernel una bazzecola se paragonata all'approccio seguito da altri kernel, quali per esempio Linux.