Pagina 1 di 4
kernel headers, compilazione, glibc: un po di chiarezza
Inviato: ven 27 gen 2006, 20:20
da first
Ciaa a tutti ho deciso di aprire questo post per capire meglio il problema degli headers.
Io e gallo abbiamo questa configurazione:
Codice: Seleziona tutto
> ls -l /usr/include/{asm*,linux}
lrwxrwxrwx 1 root root 21 2005-10-17 22:11 /usr/include/asm -> /usr/include/asm-i386
lrwxrwxrwx 1 root root 35 2005-10-17 22:11 /usr/include/asm-generic -> /usr/src/linux/include/asm-generic/
lrwxrwxrwx 1 root root 32 2005-10-17 22:11 /usr/include/asm-i386 -> /usr/src/linux/include/asm-i386/
lrwxrwxrwx 1 root root 29 2005-10-17 22:11 /usr/include/linux -> /usr/src/linux/include/linux/
Linus dice di NON creare quei symlink e di non compilare mai il nuovo kernel in /usr/src/linux (qui per leggere il suo commento
http://uwsg.iu.edu/hypermail/linux/kern ... /0587.html ).
Da quel poco che ho capito io le glibc dovrebbero arrivare con i loro headers e quelli devono rimanere li, immobili, fissi per sempre, almeno finche non si aggiornano le glibc. E questi headers devono essere indipendenti dal kernel che si utilizza.
Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso.
Quindi se io voglio un nuovo kernel NON devo andare a mettere i SUOI header in /usr/include.
Ho un dubbio ora: ma se io scarico i pacchetti tgz del kernel nuovo, i pacchetti degli headers del nuovo kernel vanno a sovrascriversi in /usr/include ?
Vi prego di rispondermi solo DOPO aver letto il link di Linus
http://uwsg.iu.edu/hypermail/linux/kern ... /0587.html
Re: kernel headers, compilazione, glibc: un po di chiarezza
Inviato: sab 28 gen 2006, 9:37
da sid77
first ha scritto:Ciaa a tutti ho deciso di aprire questo post per capire meglio il problema degli headers.
topic spawning wooo-hooo

(ok torno serio)
first ha scritto:Io e gallo abbiamo questa configurazione:
Codice: Seleziona tutto
> ls -l /usr/include/{asm*,linux}
lrwxrwxrwx 1 root root 21 2005-10-17 22:11 /usr/include/asm -> /usr/include/asm-i386
lrwxrwxrwx 1 root root 35 2005-10-17 22:11 /usr/include/asm-generic -> /usr/src/linux/include/asm-generic/
lrwxrwxrwx 1 root root 32 2005-10-17 22:11 /usr/include/asm-i386 -> /usr/src/linux/include/asm-i386/
lrwxrwxrwx 1 root root 29 2005-10-17 22:11 /usr/include/linux -> /usr/src/linux/include/linux/
Linus dice di NON creare quei symlink e di non compilare mai il nuovo kernel in /usr/src/linux (qui per leggere il suo commento
http://uwsg.iu.edu/hypermail/linux/kern ... /0587.html ).
si, non serve creare quei symlink
first ha scritto:Da quel poco che ho capito io le glibc dovrebbero arrivare con i loro headers e quelli devono rimanere li, immobili, fissi per sempre, almeno finche non si aggiornano le glibc. E questi headers devono essere indipendenti dal kernel che si utilizza.
esatto
first ha scritto:Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso.
Quindi se io voglio un nuovo kernel NON devo andare a mettere i SUOI header in /usr/include.
la seconda parte è corretta, cosa intendi con "Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso" ?
quando compili un kernel quello utilizza gli headers che trova in /usr/src/linux/include/...
first ha scritto:Ho un dubbio ora: ma se io scarico i pacchetti tgz del kernel nuovo, i pacchetti degli headers del nuovo kernel vanno a sovrascriversi in /usr/include ?
assolutamente no! ma hai visto il pacchetto? prova a fare
Secondo me stai facendo un poco di confusione sull'utilizzo dei kernel-headers, prova a leggerti lo slack-desc, te lo riporto qui:
kernel-headers ha scritto:These are the include files from the Linux kernel.
You'll need these to compile most system software for Linux.
capisci? i kernel-headers ti servono se devi compilare un programma tipo acpid che deve fare chiamate al kernel. e la maggior parte dei programmi utilizza ancora i kernel-headers della serie 2.4, sono veramente pochi quelli che hanno bisogno di kernel-headers della serie 2.6
Inviato: sab 28 gen 2006, 13:10
da gallows
Pat Volkerding ha scritto:This package of 2.6.x based /usr/include/linux and /usr/include/asm headers
is being provided by request for some people who need it in order to compile
ASDL modem drivers for 2.6.x. As a general rule, installing kernel headers
that are newer than the kernel glibc was compiled with *may* cause problems,
so unless you need these for a particular reason it's best to stick with the
2.4.x kernel-headers package for now.
Note -- if you compile with NPTL then you might want to use these headers,
and glibc's NPTL was compiled using 2.6 headers, so all should be well.
In that case, specify using NPTL libs and headers with these compile
options:
-I/usr/include/nptl -L/usr/lib/nptl
Good luck!
Dopo questo e le parole di Torvalds beh.. mi sa che userò i kernel-headers originali (anche se devo ammettere di non aver avuto alcun problema fino ad ora).
Inviato: sab 28 gen 2006, 13:15
da Paoletta
gallows ha scritto:
Dopo questo e le parole di Torvalds beh.. mi sa che userò i kernel-headers originali (anche se devo ammettere di non aver avuto alcun problema fino ad ora).
è quello che ho fatto anche io caro gallo

, anche se finora avevo adottato la filosofia di meritil senza problemi;
Inviato: sab 28 gen 2006, 13:33
da sunreal
Scusate se mi intrometto da terrestre in questo discorso tra marziani, ma un po' più terra terra che vorrebbe dire, tutto sto post?
Inviato: sab 28 gen 2006, 14:41
da sid77
che non devi prendere per oro colato tutto quello che leggi su internet.
detto questo credo che il mio messaggio sparirà "in a puff of logic"
ciao
Inviato: sab 28 gen 2006, 14:42
da zzt
Azz... sto post mi sta aprendo un mondo...
Suppongo che le parole di Torvalds, in questo caso siano legge...
Ma c'è un caso che mi aveva portato a fare quei symlink:
se devo utilizzare un kernel patchato e questa patch aggiunge qualche header e devo compilare qualcosa in user-space che usa questi nuovi header, l'unica soluzione perfettamente corretta sarebbe ricompilare le glibc (e probabilmente qualsiasi cosa utilizzi direttamente una features del kernel senza passare per le glibc).... sticaz...
Il fatto che fino ad ora abbia funzionato tutto correttamente è solo perché il caso d'esempio portato da Linus è evidentemente poco frequente... ed io compilo pochissima roba...
Non si finisce mai di imparare...
Inviato: sab 28 gen 2006, 15:48
da gallows
sid77 ha scritto:detto questo credo che il mio messaggio sparirà "in a puff of logic"

Douglas Adams?
zzt ha scritto:Non si finisce mai di imparare...
Quoto.
Inviato: sab 28 gen 2006, 16:31
da sid77
colpito e affondato!
Re: kernel headers, compilazione, glibc: un po di chiarezza
Inviato: sab 28 gen 2006, 16:37
da first
sid77 ha scritto:
first ha scritto:Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso.
Quindi se io voglio un nuovo kernel NON devo andare a mettere i SUOI header in /usr/include.
cosa intendi con "Gli headers del kernel invece devono essere utilizzati unicamente se si vuole compilare parti del kernel stesso" ?
quando compili un kernel quello utilizza gli headers che trova in /usr/src/linux/include/...
Ti riporto la frase di Llinus:
not have a single symbolic link in sight (except the one that the
kernel build itself sets up, namely the "linux/include/asm" symlink
that is only used for the internal kernel compile itself)
Io l'ho interpretata cosi': quando do make esso passa al compilatore gli headers che provengono dal tallbar del kernel stesso e non quelle che ci sono in /usr/include. Ma ripeto e' una mia interpretazione.
Inviato: sab 28 gen 2006, 17:04
da first
Ora arriva il mio dubbio amletico (alcuni di voi l'avranno gia letto):
Io voglio avere tutto perfetto "alla-Linus" sulla mia slack pero' ho fatto qualche macello e vorrei ritornare alla configurazione "perfetta" vi dico cosa ho combinato in ordine storico:
1) ho installato la current aggiornata a 5 giorni fa
2) come kernel di partenza il 2.4.32 (nb in fase di installazione non ho selezionato il pacchetto kernel source e quindi non esisteva nessuna dir /usr/src/linux )
3) ho scaricato da kernel.org il 2.6.15.1 e l'ho compilato seguendo passo passo l'howto di slacky.it
4) ho cancellato tutti i pacchetti che avevo del kernel 2.4.32 (coi relativi header)
Per necessita ho dovuto ricompilare il 2.6.15.1 ma il make menuconfig si e' stoppato subito perche non trovava alcuni headers (?)
5) ho creato i sopracitati symlink e il make menuconfig e ripartito e ho potuto fare quindi le mie modifiche al kernel.
Ora che la cronostoria e' stata fatta arriva la domanda:
Quale e' la strategia migliore per riportare il mio sistema alla configurazione ideale suggerita da Linus?
che poi "credo" si possa ricondurre a questa domanda:
Come faccio a vedere con quali kernel headers e' stato fatto il pacchetto tgz delle glibc presenti nel ramo current?
Inviato: sab 28 gen 2006, 17:45
da gallows
Elimina i symlink e installa il tgz con gli headers.
Come faccio a vedere con quali kernel headers e' stato fatto il pacchetto tgz delle glibc presenti nel ramo current?
http://www.slackware.at/data/slackware- ... SlackBuild
Inviato: dom 29 gen 2006, 1:11
da first
Qui sembra che dica che mi servono anche gli header del 2.4.32
# For dual NPTL/linuxthreads support we need one set of 2.4 kernel sources
# and another set of 2.6 kernel sources under /usr/src/. This specifies the
# exact versions we want to use for compilation:
HEADERSTWOFOUR=2.4.32
HEADERSTWOSIX=2.6.14.3
Quindi presumo che le glibc della current siano state compilate usando un 2.4.32. Si spiegherebbe cosi il motivo per cui rimuovendo i pacchetti headers-kernel 2.4.32 il compilatore non compila piu perche non trova gli headers.
Ora faccio un esperimento: installa SIA il pacchetto headers 2.4.32 sia il pacchetto 2.6.14.3 poi rimuovo il pacchetto headers 2.6.14.3 e se la mia teoria e giusta riesco lo stesso a compilare. Vi faccio sapere subito.....
Inviato: dom 29 gen 2006, 1:41
da first
BINGOOOOOOOO!!!!!!!!!!
ho installato i kernel-header del 2.4.32 e quelli del 2.6.14.6
Ho rimosso quelli del 2.6.14.6 con removepkg e....
--> /usr/include/linux/adb.h was found in another package. Skipping.
--> /usr/include/linux/adfs_fs.h was found in another package. Skipping.
--> /usr/include/linux/adfs_fs_i.h was found in another package. Skipping.
--> /usr/include/linux/adfs_fs_sb.h was found in another package. Skipping.
--> /usr/include/linux/affs_fs.h was found in another package. Skipping.
etc etc
mentre ...
--> Deleting /usr/include/asm-i386/voyager.h
--> Deleting /usr/include/linux/8250_pci.h
--> Deleting /usr/include/linux/aio.h
--> Deleting /usr/include/linux/aio_abi.h
--> Deleting /usr/include/linux/arcfb.h
--> Deleting /usr/include/linux/attribute_container.h
--> Deleting /usr/include/linux/audit.h
--> Deleting /usr/include/linux/auxvec
Ovviamente riesco a compilare tutto!
Da quello che ho capito gli headers del 2.4.32 sono "la base di partenza" e NON vanno mai toccati mentre quelli del 2.6.14.6 (oppure quelli propri del kernel che ci siamo compilati noi) sono un di piu o meglio servono per compilare parti proprie di quel particolare kernel.
Inviato: dom 29 gen 2006, 9:12
da salbutamolo
Ciao a tutti,
io quando aggiorno il kernel aggiorno anche gli headers...ma pare che questa sia sbagliato. Tuttavia non ho mai avuto problemi di compilazione causati dagli headers. Have a nice day