Entra

View Full Version : ricompilazione del kernel: e poi?


stranamore
11-03-2003, 09:38
ho ricompilato il kernel, per la red hat 8.0 (ho scaricato il kernel 2.4.20). ho ricompilato il kernel ed ho costruito una nuova immagine.
L'idea è quella di mantenere (e non sostituire) la vecchia immagine del kernel per poter avviare a mio piacimento linux con una versione del kernel piuttosto che con l'altra.

il boot loader installato è GRUB ed è montato sull'MBR dell'hd, non sulla partizione di boot, anche perchè sull'hd ho anche w2000.

ebbene: non mi è chiaro cosa fare per dire a grub di lanciare opzionalmente la nuova versione del kernel. ho inizialmente montato l'immagine nuova del kernel sulla partizione di boot e ho modificato il file di configurazioen di GRUB presente sulla partizione di boot... ma GRUB non è montato lì, è montato sull'MBR, e giustamente non si accorge delle variazioni del suo file di configurazione sulla partizione di boot.

La prima domanda è, con quale comando di GRUB riesco ad aggiornare effettivamente il menù di avvio dl sistema (in modo che non presenti solo le voci DOS e Linux, ma anche una voce che lanci Linux col nuovo kernel?)

La seconda domanda è: per avviare il sistema con il nuovo kernel ho bisogno anche di un nuovo file di inizializzazione (insomma l'init del sistema)... ma come cavolo faccio a costruirlo? va bene il vecchio, quello per il vecchio kernel?

GRAZIE

ilsensine
11-03-2003, 09:57
Aggiornare GRUB è molto semplice, tutto sta ad editare il file di configurazione "giusto". Sulla mdk (credo anche sulla Redhat) è /boot/grub/menu.lst, basta aggiungere la voce relativa al nuovo kernel, e riavviare. Non occorre riscrivere l'mbr, come avviene con lilo.
Nota che, se non usi un kernel fornito dalla Redhat, devi sostituire il formato LABEL= per indicare la partizione di root. V. ad es. qui (http://forum.hwupgrade.it/viewtopic.php?t=411916)

stranamore
11-03-2003, 10:07
mhh... quindi non è necessario utilizzare comandi esoterici come con LILO?
io una modifica al file di configurazione (o presunto tale!!)l'ho fatta, ma non ho notato nessunissima variazione. può darsi però che abbia sbagliato file (mi pare avesse un altro nome... :( ).
ad ogni modo stasera tenterò.

ma per quanto riguarda il file
initrd-2.4.20.img
come cavolo lo creo?


cioè, ho perso una qualche fase di compilazione del kernel e non è stato generato alcun file di "init" oppure c'è un qualche trucco a me sconosciuto?

stasera comuqne provo!

ilsensine
11-03-2003, 10:21
L'initrd puoi anche non usarlo, se compili staticamente nel kernel (e _non_ come modulo) tutto il necessario per montare la partizione di root (driver per il file system di root, in particolare).

stranamore
11-03-2003, 10:33
Originally posted by "ilsensine"

L'initrd puoi anche non usarlo, se compili staticamente nel kernel (e _non_ come modulo) tutto il necessario per montare la partizione di root (driver per il file system di root, in particolare).

ok, questo mi è piuttosto chiaro, grazie.

se invece avessi la necessità di montare come moduli alcuni componenti, dovrei editare manulamente il fiel di init?

ilsensine
11-03-2003, 10:41
Originally posted by "stranamore"


se invece avessi la necessità di montare come moduli alcuni componenti, dovrei editare manulamente il fiel di init?
Il succo è: una volta che sei riuscito a montare il root fs, puoi caricarti tutti i moduli che vuoi. Senza alcuna necessità dell'initrd.

L'initrd serve per caricare i moduli necessari per montare la partizione di root; normalmente le distribuzioni lo usano in quanto il sistema operativo potrebbe essere installato su dispositivi moto diversi (scsi, raid ecc.) e quindi per non creare una immagine del kernel enorme, settano l'initrd in maniera appropriata a seconda dell'hw su cui il sistema deve partire. Ma se ti ricompili un kernel personalizzato, non c'è più alcun motivo per usarlo.

Esistono anche altri usi per l'initrd, ma il suo scopo principale è far sì che il kernel possa montare la sua root. Il resto sono "giochetti cosmetici".

stranamore
13-03-2003, 12:43
ho controllato. ho modificato esattamente il file menu nella directory /boot/grub, ma non è successo niente!!!!

sembra proprio che GRUB, per il fatto di risiedere sull'MBR, abbia da qualche parte un altro file di configurazione. qualcuno ha qualche idea?

ilsensine
13-03-2003, 12:50
Originally posted by "stranamore"

ho controllato. ho modificato esattamente il file menu nella directory /boot/grub, ma non è successo niente!!!!
menu.lst

sembra proprio che GRUB, per il fatto di risiedere sull'MBR...
non c'entra nulla dove risiede
...abbia da qualche parte un altro file di configurazione.
Questo è possibile, nel senso che nel momento di installazione può essere specificato quale file usare.
Sulla mia Mandrake lo script usato dal programma di setup per installare grub è stato salvato come /boot/grub/install.sh:

grub --device-map=/boot/grub/device.map --batch <<EOF
install (hd0,0)/grub/stage1 d (hd0) (hd0,0)/grub/stage2 p (hd0,0)/grub/menu.lst
quit
EOF

da cui desumo immediatamente che il file di menu è /grub/menu.lst situato dentro hd0,0 (=/boot sul mio sistema), quindi /boot/grub/menu.lst.
Controlla se sul tuo computer esiste uno script simile, almeno puoi risalire a quale sia il file di menu. Mi sembra molto strano, comunque, che non sia stato utilizzato il nome "standard" per tale file.

stranamore
13-03-2003, 13:20
ok, grazie. ora tenterò.

comunque che il file di configurazione non sia lo stesso lo assicura anche la circostanza che, indipendentemente dalle mie modifiche, il file menu.lst, non abbia la struttura corretta (per esempio le etichette dei vari SO avviabili non corrispondono ai nomi effettivamente visualizzati nel menu di boot).

per inciso la mia distribuzione è la RH8.0

ilsensine
13-03-2003, 13:32
Ok prendo atto che la RH ha sentito la necessità di cambiare anche questo standard :muro:

stranamore
13-03-2003, 13:54
a proposito di RH... io sono 2 settimane che cerco in tutti i modi di installare i driver per linux della NVIDIA, ma ogni volta ho errori di compilazione, installazione dell'rpm e così via.

a tua avviso è un problema dei diver o... della RH, che forse non ha installato proprio tutto quello che avrebbe dovuto installare?
Possibile che alcune librerie della RH siano bacate o non perfettemanet compatibili, magari colla versione del kernel, o con la versione del gcc installata?

Nella disperazione sto valutando l'idea di installare un'altra distribuzione...

ilsensine
13-03-2003, 13:57
Errori di compilazione -> ti mancano i sorgenti del kernel
Errori di installazione del driver rpm precompilato -> stai usando il pacchetto errato, devi scegliere quello che coincide _esattamente_ con la versione del tuo kernel e della tua distribuzione

stranamore
13-03-2003, 14:01
ho controllato l'esistena dei sorgenti... e li ho installati (almeno credo... come lo verifico con esattezza?)
pare sia necessario installare anche alcuni header(?)

per quanto riguarda l'rpm... più di usare la versione per RH8.0 architettura athlon , kernel standard, non so che fare

ilsensine
13-03-2003, 14:30
Originally posted by "stranamore"

ho controllato l'esistena dei sorgenti... e li ho installati (almeno credo... come lo verifico con esattezza?)
Devi poter "sfogliare" la directory /lib/modules/<versione del kernel>/build/include

pare sia necessario installare anche alcuni header(?)
Dipende da come la distribuzione ha strutturato il tutto. In genere i pacchetti kernel-header sono gli header per programmi in user space, e non possono essere utilizzati per compilare driver o altro. Possibile (anche se improbabile) che la Redhat abbia voluto far eccezione a questa regola.

per quanto riguarda l'rpm... più di usare la versione per RH8.0 architettura athlon , kernel standard, non so che fare
cat /proc/version ti dice la versione del kernel. Non è detto che ti è stato installato il kernel compilato per l'athlon, controlla con kpackage il nome dell'rpm del kernel.

stranamore
13-03-2003, 14:34
Originally posted by "ilsensine"



cat /proc/version ti dice la versione del kernel. Non è detto che ti è stato installato il kernel compilato per l'athlon, controlla con kpackage il nome dell'rpm del kernel.

ehi, questa frase è illuminante!
magari non è il motivo vero, ma in effetti è una possibilità che non avevo preso in considerazione.
proverò stasera. chissa che non sia la volta buona.

taiger
13-03-2003, 19:28
scaricaricati i src.rpm

e usa il comando
rpmbuild
per compilarli, te li metto sotto /usr/src/redhat/rpm... non ricordo e poi

poi
rpm -i nome_pack

per installarli.

ricorda di modificare il file di conf di X come da README!