[Primipassi] Kernel 2.4.2

theold theold@aruba.it
Dom 25 Feb 2001 12:28:14 CET


Sono riuscito ad installare il kernel-2.4.2, dopo molte peripezie e prove,
durante le quali ho incontrato vari intoppi. Mi sembra che funzioni, anche
se al bootstrap mi segnala alcuni errori (non bloccanti) che vedrò in
seguito (col vostro aiuto) di sistemare. Il percorso non è stato breve e mi
sono rimasti tanti dubbi. Sperando di fare cosa gradita, o comunque utile
per altri alle prime armi, riporto, di seguito, l'iter seguito per
l'installazione e configurazione del kernel-2.4.2, specificando nei vari
step i problemi ed i dubbi che mi sono rimasti (quelli che mi torneranno in
mente man mano che scriverò). Mi farebbe piacere che qualche esperto
confermasse o correggesse questo modus operandi, possibilmente rispondendo
anche alle domande-dubbio inserite.

Verrà sicuramente una mail molto lunga, me ne scuso anticipatamente, ma
spero possa rivelarsi utile anche ad altri.

La mia attuale versione installata è la RedHat 7.0. Ho operato nell'ambiente
grafico, sia per la facilità d'uso del filemanager e delle sue funzionalità,
sia per poter utilizzare il comando make xconfig (descritto in seguito).

1)  Ho scaricato da Internet l'ultima versione del kernel disponibile (la
2.4.2). Il file è "linux-2.4.2.tar.bz2". Ho preferito il file di tipo .bz2
perchè ha una compressione maggiore e, quindi, si scarica più velocemente.

2)  Ho spostato tale file nella directory /usr/src. Ho aperto la shell (sono
l'utente root) e mi sono posizionato nella stessa directory per mezzo del
comando "cd /usr/src".

3)  Nella shell, ho eseguito il comando "cat linux-2.4.2.tar.bz2 | bunzip2 |
tar xvf -", che ha provveduto a scompattare il file generando la directory
/usr/src/linux.

4)  Ho rinominato tale directory in /usr/src/linux-2.4.2 e poi ho creato un
file di collegamento simbolico "linux" che punta alla predetta dir. E' stato
agevole fare ciò con le funzionalità del filemanager.
   /usr/src/linux   --->   /usr/src/linux-2.4.2

5)  In "Appunti di Informatica libera" (Appunti Linux) ho letto che
bisognerebbe assicurarsi che in /usr/include ci siano tre files (asm + linux
+ scsi) di collegamento simbolico che puntino nel seguente modo:
   /usr/include/asm   --->   /usr/src/linux/include/asm-i386/
   /usr/include/linux   --->   /usr/src/linux/include/linux/
   /usr/include/scsi   --->   /usr/src/linux/include/scsi/
Questi puntamenti non ci sono, ma non so se è un suggerimento ancora valido,
oppure valeva solo per le vecchie distribuzioni. Io NON li ho attivati (non
so se ho fatto bene).

6)  Sergio aveva scritto che il compilatore gcc della RH 7.0 non è idoneo
per la compilazione del kernel e che, al suo posto, sarebbe meglio
utilizzare il kgcc. Il rigo 29 del Makefile (/usr/src/linux/Makefile)
contiene l'istruzione:
   CC = $(CROSS_COMPILE) gcc
L'ho sostituito col corrispondente rigo trovato nel Makefile della versione
2.2.16-22 (presente nella mia RH 7.0):
   CC :=$(shell if which $(CROSS_COMPILE)kgcc > /dev/null 2>&1; then echo
$(CROSS_COMPILE)kgcc; else echo $(CROSS_COMPILE)gcc;
fi) -D__KERNEL__ -I$(HPATH)
Sergio, ho fatto bene, o mi volevi consigliare un'altra cosa ?

7)  Sempre posizionato nella /usr/src/linux-2.4.2 (o anche /usr/src/linux
che è la stessa cosa), ho eseguito "make mrproper". Marco aveva scritto che
questo comando è piuttosto inutile: mi piacerebbe sapere se è inutile solo
quando è la prima volta che si tenta una configurazione (cioè con la dir
linux allo stato vergine) o è inutile anche dopo vari tentativi di
configurazione andati male.

8)  Quindi, ho eseguito make xconfig
Si è aperta una finestra con una miriade di opzioni. Ad alcune è stato
facile rispondere (non ho dischi scsi, quindi ne ho disabilitato la relativa
configurazione) per altre, invece, la scelta fra attivazione, attivazione
con modulo o disattivazione non è per niente intuitiva. Le scelte proposte
di default non si sono rivelate sempre le più felici ed inoltre non ho
trovato gli help sufficientemente chiari (ma forse il vero problema è la mia
scarsa capacità di tradurre l'inglese). Comunque, per avere un certo
riferimento, ho aperto il .config della precedente configurazione, che ho
scoperto che la RedHat aveva salvato nel
"/usr/src/linux-2.2.16/configs/kernel-2.2.16-i686.config" ed ho effettuato
le scelte che mi sono sembrate più idonee.
Questo passo è molto delicato. Nei vari scritti trovati su Internet
sull'installazione del kernel mi sembra sia stato sempre sottovalutato. In
effetti, facendo una scelta non adeguata al proprio sistema, è facile che in
uno degli step successivi si verifichi un errore. In questo caso, si deve
tornare a questo step (o forse sarebbe meglio al precedente punto 7 ? Marco,
diccelo tu) e modificare l'opzione sbagliata.
In ogni caso, viene generato il file .config nella stessa directory, che è
bene salvarlo anche con un altro nome per confronti successivi. Io, dopo
ogni modifica col make xconfig, ho copiato il file in bkXX.config (dove XX è
un progressivo) per avere tutte le configurazioni testate.

9)  A questo punto occorre eseguire "make dep".

10)  Eseguire "make clean". Marco ha scritto che è inutile, ma mi piacerebbe
averne una conferma per le stesse osservazioni del precedente punto 7.

11)  Eseguire "make bzImage" (genera il nuovo kernel).

12)  Eseguire "make modules" (genera i moduli scelti nella configurazione).

13)  Eseguire "make modules_install" (copia i moduli generati in
/lib/modules/2.4.2).

14)  Eseguendo gli step dal 9 al 13, sul video scorrono un'infinità di
messaggi. Per me (ignorante) sono del tutto incomprensibili. Bisogna
comunque assicurarsi che nessuno degli ultimi righi visualizzati segnali un
errore: nel qual caso bisognerebbe modificare la configurazione (precedente
punto 8).

15)  Se tutto è andato bene, è stato generato il file bzImage nella dir
/usr/src/linux-2.4.2/arch/i386/boot. Copiarlo nella /boot, rinominandolo
vmlinuz-2.4.2 (attenzione vmlinuz con la z finale).

16)  Copiare anche i files System.map e vmlinux (che sono stati generati
nella /usr/src/linux-2.4.2) nella /boot rinominandoli in System.map-2.4.2 e
vmlinux-2.4.2.

17)  Nella /boot si trovano anche due files di collegamento simbolico
vmlinuz e System.map. Dato che nel lilo.conf (passo successivo) si fa
riferimento al vmlinuz-2.4.2 e, di conseguenza, al System.map-2.4.2,
possiamo ignorare o anche cancellare questi files (il System.map verrà
rigenerato automaticamente alla ripartenza e fatto puntare al
System.map-XX.XX.XX opportuno, relativo al vmlinuz-XX.XX.XX attivato).
Sempre nella /boot, trovo anche due files: kernel-2.2.16 e
module-info-2.2.16-22. Mi piacerebbe sapere se potrebbe essere il caso di
copiare nella /boot due files simili relativi alla 2.4.2 ed eventualmente,
dove si trovano ?

18)  A questo punto si deve modificare il filo /etc/lilo.conf per abilitare
il sistema alla partenza sia col vecchio kernel 2.2.16-22, che col nuovo
2.4.2. Lasciando invariate le prime istruzioni, la parte finale potrebbe
essere così:
   default=linux-2.4.2
   image=/boot/vmlinuz-2.2.16-22
                  label=linux-2.2.16-22
                  read-only
                  root=/dev/hda8
   image=/boot/vmlinuz-2.4.2
                  label=linux-2.4.2
                  read-only
                  root=/dev/hda8

19)  Fatto questo, nella solita shell immettere il comando "lilo" che, sulla
scorta del lilo.conf, genererà l'eseguibile per l'avvio del computer.

20)  Il nuovo kernel 2.4.2 richiede anche l'aggiornamento di alcuni
pacchetti (consultare il /usr/src/linux-2.4.2/Documentation/Changes). Nel
mio caso ho dovuto adeguare solo i pacchetti util-linux, modutils e ppp.
Non sto a sviluppare qui l'iter seguito per l'installazione anche dei
pacchetti. L'operazione, comunque, è andata a buon fine, ma mi chiedo come
mai, nonostante l'aggiornamento del pacchetto (per es. pppd 2.4.0), se
eseguo "rpm -qa | grep ppp" mi appare ancora il ppp-2.3.11-7 relativo alla
precedente versione. L'installazione di un aggiornamento di un pacchetto non
dovrebbe sostituire in toto il pacchetto presente sul sistema, anche se
questo era stato generato col comando rpm ?

Finalmente ho finito. Chiedo venia.

Ciao
theold






Maggiori informazioni sulla lista primipassi