[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: compilare il kernel



Michi wrote:

make xconfig
make dep
make clean
make bzImage  (errore)

visto che utilizzi Debian dovresti utilizzare i suoi strumenti per compilare Linux.

Io faccio più o meno così:

Nota: il simbolo # indica l'uso dell'utente root, mentre il simbolo $ indica l'uso dell'utente normale

Nota: le parti scritte tutte in maiuscolo sono da sostituire con qualcosa di appropriato

1) faccio tutti gli aggiornamenti richiesti
# apt-get update

NB: è consigliato installare il pacchetto apt-listbug:
# apt-get install apt-listbugs
in modo da vedere se il pacchetto che si sta installando contiene dei bug non ancora risolti che potrebbero compromettere l'usabilità del proprio sistema

NB: può essere utile installare anche il pacchetto apt-listchanges
# apt-get install apt-listchanges
in modo da poter vedere quali sono state le principali modifiche apportate ai pacchetti che si sta installando e sapere se tali modifiche possono impedire il funzionamento di parti per noi basilari del sistema (alle volte ci sono informazioni su come far funzionare il sistema con le nuove versioni del pacchetto)

infine fare l'upgrade di tutti i pacchetti:
# apt-get -u upgrade
# apt-get -u dist-upgrade

2) assegnare un utente normale al gruppo src in modo da non usare root per le fasi di compilazione
# adduser LOGINUTENTE src

Nota: LOGINUTENTE è il login del tuo utente normale (non root)

3) installare il kernel che si vuole ricompilare già ottimizzato per la propria macchina
# apt-get install linux-image-X.Y.Z-TIPO_MACCHINA

Nota: con Sarge i pacchetti Linux forse si chiamano ancora kernel-image e non linux-image

per sapere che tipo di CPU si possiede:
$ cat /proc/cpuinfo

Nota: per sapere che versione è disponibile è possibile ricercare con il seguente comando:

$ apt-cache search linux-image | grep ^linux-image

o kernel-image per Sarge e precedenti

Nota: è consigliato installarsi il metapacchetto che installa in automatico le versioni nuove di Linux per la propria macchina

Per esempio i pacchetti per Linux 2.6 sono:
$ apt-cache search linux-image-2.6-

4) è consigliabile un bel reboot per applicare le modifiche fin qui apportate (nuova versione di Linux e nuovo gruppo per l'utente)
# shutdown -r now

Nota: se si è solo aggiunto l'utente al gruppo src, allora è possibile disconnettersi (logout) e riconnettersi (login) per vedere applicate le modifiche, senza la necessità di riavviare tutto il sistema

5) installare i sorgenti ed i pacchetti necessari per la compilazione
# apt-get install linux-source-X.Y.Z

Nota: come già detto con Sarge e precedenti il nome potrebbe iniziare per kernel-source

$ cd /usr/src
$ rm -r linux-source-X.Y.Z
$ tar jxvf linux-source-X.Y.Z.tar.bz2
$ rm linux
$ ln -s linux-source-X.Y.Z linux
# apt-get install kernel-package debhelper dpkg-dev

$ cd linux
$ cp /boot/config-X.Y.Z-TIPO_MACCHINA /usr/src/linux/.config

$ make oldconfig

scegliere una modalità per modificare i parametri in Linux
$ make xconfig
oppure
$ make menuconfig

NB: non settare qui il parametro extraversion perché non funziona (ho letto che forse hanno risolto questo problema tempo fa, ma non ho mai provato), settarlo invece nel make-kpkg qui sotto

# make-kpkg clean
# time make-kpkg --initrd kernel_image modules_image \
  --append_to_version=VERSION

NB: a VERSION va sostituita la versione che si vuole usare per renderla diversa da quella attualmente installata. Nota: la versione indicata nel make menuconfig deve rimanere vuota, altrimenti non funziona.
Nota: per la versione si possono usare solo caratteri alfanumerici minuscoli
NB: se non usi initrd toglilo
NB: "time" ti indica quanto tempo di CPU è stato dedicato alla compilazione

Attendere pazientemente che Linux venga ricompilato

# cd ..
# dpkg -i /usr/src/kernel-image-X.Y.Z-EXTRAVERSION..........deb

È possibile che ora tu debba modificare il tuo bootloader per poter utilizzare la nuova versione di Linux.

Con grub è possibile far fare tali modifiche in automatico al momento dell'installazione del pacchetto:

# vi /etc/kernel-img.conf:
ed aggiungere le seguenti righe:

  postinst_hook = /sbin/update-grub
  postrm_hook = /sbin/update-grub
  do_bootloader = no
  do_initrd = Yes


La spiegazione in dettaglio per la compilazione di Linux la trovi qui:
$ zless /usr/share/doc/kernel-package/README.gz

***:no rule to make target 'init/main.o', needed by 'init/built-in.o'. STOP

Ciao; il problema l'ho risolto banalmente perche' non potevo compilare nulla dal momento che la directory dei sorgenti non era stata creata;
----
Altro problema nella compilazione.
ora il kernel mi è andato in PANIC e putroppo non ho un Kernel di recupero (devo avere fatto un po' di danni)

bisogna sempre tenersi almeno due versioni di Linux in modo da avere una probabilità aggiuntiva di riuscire ad avviare il sistema.

Inoltre quando si compila Linux bisogna sempre assegnare un nome differente dalla versione ufficiale della propria distro in modo da non sovrascriverlo e avere il tuo problema ... per fare questo occorre settare l'extraversion

Io ho fatto:
(file che punta a kernel2.6*)/usr/src/linux/ make dep;make clean;
make xconfig; (ho salvato senza nessuna modifica)
make bzImage;make modules;make modules install

ho ricopiato /usr/src/linux/arch/i386/boot/bzImge su /boot/vmlinux
ho ricopiato /usr/src/linux System.map su /boot/System.map

queste due istruzioni sono da evitare: mai copiare una propria compilazione di Linux su quella ufficiale della propria distro ... se qualcosa va storto non hai una versione di Linux di salvataggio per riavviare il sistema

ho riavviato e molte righe di errori come questa:
modprobe: FATAL coudn't load /lib/modules/2.6.8/modules_dep no such file or directory

può essere che i moduli che hai ricompilato con Linux non siano in /lib/modules/2.6.8/, ma in un'altra directory ... forse hai settato l'extraversion?

kernel PANIC: attempted to kill init

Qualcun sa dirmi cosa ho sbagliato? qualcuno sa come posso ripristinare il kernel per riavviare il sistema?

può essere che hai sbagliato anche qualche settaggio in Linux.

Sopra ti ho indicato come è possibile ricompilarsi Linux.

Ora per poter riprendere in mano la situazione ti occorre:
1) una distro live (es: knoppix: www.knoppix.org)
2) il pacchetto di Linux che hai sovrascritto (lo scarichi dal sito Debian)

e poi
a) avvii la distro live
b) fai un chroot sulla home del tuo vecchio sistema (le partizioni dovrebbero già essere tutte caricate, usa df per vedere quali sono e guarda dove è localizzata la root con il comando ls ... poi usi chroot su tale partizione) c) installi la versione di Linux che ti sei scaricato al punto 2 (con il comando dpkg -i NOMEPACCHETTO) d) eventualmente devi modificare il tuo bootloader (probabilmente no se tutti i parametri sono uguali come sembra)
e) togli il CD
f) riavvii

Ciao
Davide

--
Dizionari: http://linguistico.sourceforge.net/wiki
Conoscere il TC: http://www.no1984.org
Strumenti per l'ufficio: http://it.openoffice.org
Sistema operativo: http://www.it.debian.org
Browser: http://www.mozilla.org/products/firefox
Client di posta: http://www.mozilla.org/products/thunderbird
GNU/Linux User: 302090: http://counter.li.org
--
Non autorizzo la memorizzazione del mio indirizzo di posta a chi usa
outlook: non voglio essere invaso da spam



Reply to: