Tecnologia e non solo

maggio 11, 2008

Pacchetti deb linux-headers custom: come “fixarli”

Filed under: Debian,Gutsy,Hardy,Sid — telperion @ 3:08 pm

Come già segnalato la generazione dei pacchetti deb degli headers del kernel con i tools di kernel-package,
già dal kernel 2.6.24 e successivi, causa riunificazione architetture x86-32/64,
produce pacchetti debian inutilizzabili costringendoci a mantere in /usr/src tutto il sorgente compilato del kernel che sono parecchie centinaia di MB (oltre 500 nel mio caso).

Vediamo come rimediare ai problemi degli headers (pacchetti i386 architettura x86)

immagine fix kernel-headers

Supponiamo di avere in /usr/src il sorgente del kernel linux-2.6.25.3 da compilare,
quindi il sorgente è in

/usr/src/linux-2.6.25.3

Configuriamolo e poi compiliamo il tutto con il classico:

sudo make-kpkg --initrd --append_to_version -mc kernel_image kernel_headers

quindi il nostro kernel è

2.6.25.3-mc

Otterremo dopo un certo tempo i 2 pacchetti:

linux-headers-2.6.25.3-mc_2.6.25.3-mc-10.00.Custom_i386.deb
linux-image-2.6.25.3-mc_2.6.25.3-mc-10.00.Custom_i386.deb

installiamoli con dpkg -i e procediamo a fixare i problemi.
I kernel-headers del nostro pacchetto vengono installati in

/usr/src/linux-headers-2.6.25.3-mc

Il primo fix è correggere i link simbolici source e build in /lib/modules/2.6.25.3-mc/
che puntano a /usr/src/linux-2.6.25.3 ma noi dobbiamo cancellare quella cartella, quindi con

sudo rm -f /lib/modules/2.6.25.3-mc/build /lib/modules/2.6.25.3-mc/source

cancelliamo i link poi con

sudo ln -s /usr/src/linux-headers-2.6.25.3-mc /lib/modules/2.6.25.3-mc/build

creiamo un nuovo link simbolico build (basta questo) che punta ai nostri headers /usr/src/linux-headers-2.6.25.3-mc

E fin qui nulla di nuovo, succedeva anche prima se si installa linux-image-2.6.25.3-mc mentre è ancora presente il sorgente in /usr/src, lo script di postintall linka al sorgente non agli headers.

Ora saremmo a posto ma in realtà gli headers contengono, per i motivi detti all’inizio, degli errori che non ci consentono di compilare nessun modulo del kernel come driver nvidia vboxdrv eccetera.

Dopo attenta osservazione e analisi degli headers che su archlinux funzionano correttamente,
ho trovato 2 problemi.

Il link simbolico interrotto
/usr/src/linux-headers-2.6.25.3-mc/include/asm

che punta ad una architettura i386 che non esiste più chiamandosi ora x86.
Fissiamo il problema con

sudo ln -sf /usr/src/linux-headers-2.6.25.3-mc/include/asm-x86 /usr/src/linux-headers-2.6.25.3-mc/include/asm

o se preferite per chiarezza:

cd /usr/src/linux-headers-2.6.25.3-mc/include/

ln -sf asm-x86 asm

e questo è sistemato, c’è ancora un problema.

Nella cartella
/usr/src/linux-headers-2.6.25.3-mc/arch/x86/

non viene copiato il file Makefile_32.cpu
Rimediamo alla svista con

sudo cp /usr/src/linux-2.6.25.3/arch/x86/Makefile_32.cpu /usr/src/linux-headers-2.6.25.3-mc/arch/x86/

che copia il detto file dai sorgenti alla cartella negli headers.

Piccolo controllo finale verifichiamo i 3 link simboli ed il file copiato, se è tutto ok
possiamo eliminare la cartella dei sorgenti /usr/src/linux-2.6.25.3 e viveri felici
con 43MB occupati invece di >500MB, e tutto funzionerà tranquillamente.

Ecco un script elementare per semplificare la vita

#!/bin/bash
#
sorgente=$1
kernel=$2
#
echo "kernel $kernel"
echo ""
echo "operazioni da compiere:"
echo ""
echo "sudo rm -f /lib/modules/$kernel/build /lib/modules/$kernel/source"
echo “”
echo “sudo ln -s /usr/src/linux-headers-$kernel /lib/modules/$kernel/build”
echo ""
echo "sudo ln -sf /usr/src/linux-headers-$kernel/include/asm-x86 /usr/src/linux-headers-$kernel/include/asm"
echo ""
echo "sudo cp /usr/src/linux-$sorgente/arch/x86/Makefile_32.cpu /usr/src/linux-headers-$kernel/arch/x86/"
echo ""
#

salvatelo come comandifix
ed eseguitelo con

sh comandifix sorgente kernel

nell’esempio fatto:

sh comandifix 2.6.25.3 2.6.25.3-mc

produrrà la lista dei comandi da eseguire da usare col copia incolla nel terminale,
visto la delicatezza dell’operazione meglio lasciare l’incombenza a voi.

Il sistema è provato e funzionante su Debian ed Ubuntu.

Quando disinstallate i pacchetti (perchè avete installato un kernel successivo)
dovrete rimuovere a mano la cartella /usr/src/linux-headers-2.6.25.3-mc
visto che contenendo file extra oltre a quelli del pacchetto,
non viene eliminata.

POLEMICA (HOT)

Ora, io non sò se il pacchetto kernel-package sia abbandonato,
ma visto che viene fornito
sarebbe il caso di “fixarlo” invece che fare
il classico “scaricabarile” da 6 mesi.

I problemi li ho trovati io che sono
IL RE DEGLI IGNORANTI,
possibile che un programmatore non ci possa perdere 5 minuti?

Altrimenti ELIMINATE IL PACCHETTO dalla distribuzione
e lasciate l’incombenza di compilarlo ed usarlo agli utenti,
e sopratutto non fate GLI GNORRI quando utenti segnalano il problema
dicendo che NON SONO PROBLEMI VOSTRI!

Come sempre i problemi sono esclusivamente di altri,
e fondamentalmente dell’utente.

E oggi sono buono e mi trattengo.

Annunci

21 commenti

  1. Domandina ina ina ina:

    ma questo fix funziona/è necessario anche col sistema a 64 bit?

    Commento di Cobra78 — maggio 11, 2008 @ 3:22 pm

  2. Cobra78:
    penso di si, il link asm è lo stesso (asm-x86) e il file Makefile_32.cpu male non fà
    Ovviamente solo sui pacchetti kernel kernel-headers che compili tu.
    Quelli “ufficiali” che scarichi sono fatti in altro modo e sono a posto,
    iol problema è di kernel-packages.
    Poi non avendo un 64 non posso verificare.

    Commento di telperion — maggio 11, 2008 @ 3:36 pm

  3. E meno male che sei buono oggi…

    Ma è la realtà, quindi hai il diritto di incavolarti su questa cosa. 🙂

    Commento di Piplos — maggio 11, 2008 @ 4:28 pm

  4. E tu dici che la comunità non esiste Telperion? tu ti sbatti, indaghi, e condividi per rendere la vita più facile a chi ne sa di meno, e come te anche altri, lo hai dimostrato in svariate circostanze. Tu fai parte della comunità linux, quella reale.

    Commento di Sfinge — maggio 11, 2008 @ 4:35 pm

  5. Questo si fa anche nelle comunità di utenti Windows, da che ne vedo (15 anni), quindi per piacere smettiamola con sto falso mito da Gipiellisti convinti che la comunità Linux è “er mejo” perchè “noi si che ci si aiuta guarda invece quegli zozzi sfigati che usano erfinestra ahahahahaha”.

    Non OT: about Polemica: La “comunità” è strapiena di questi piccoli esempi, e di Bug list e di Feature request che stanno li a marcire nel limbo per anni prima di incontrare un “si” “no” “forse”. Si prenda ad esempio una qualsiasi di queste, quella di Gnome, si faccia un giro e si constati che è proprio così.
    Non puoi avere il fix perchè chi lo dovrebbe gestire, puo’ decidere, a sua discrezione (alla faccia della comunità), che di quel Bug non gliene fotte un fagiolo.

    Comunità. In quale film ? Ma finiamola.

    Commento di LuNa — maggio 11, 2008 @ 9:04 pm

  6. se si vuole che i bug vengano eliminati, veramente, si faccia bug hunting. ma che lo facciano i programmatori. Fin quanto si considera che gli utenti finali sono dei beta tester, non si concluderà mai assolutamente niente

    Commento di LuNa — maggio 11, 2008 @ 9:17 pm

  7. @LuNa …
    sò rrrrraagaaaazzziiiiiii!

    Commento di telperion — maggio 11, 2008 @ 10:29 pm

  8. @Sfinge:
    per rigraziarti per gli elogi, ho messo una tua foto nel post successivo.

    https://telperion.wordpress.com/2008/05/11/google-earth-43/trackback/

    😀

    Commento di telperion — maggio 11, 2008 @ 10:32 pm

  9. Poi ci si chiede perchè Linux non sfonda…

    P.S. Ieri ho provato ad avviare la live di Ubuntu 8.04 amd64… Il risultato? Questo! https://bugs.launchpad.net/ubuntu/+source/casper/+bug/97306

    Presente da Feisty!! E nemmeno catalogato… No comment.

    Commento di Daniele — maggio 11, 2008 @ 11:48 pm

  10. @ Telperion:
    Troppo gentile 🙂
    @ Luna:
    chiaramente concordo sul fatto delle “comunità ufficiali”, mi riferivo a persone come Telperion, che secondo me con le loro guide si prendono la briga di spiegare come rimediare ai bug che non vengono per i motivi che citati (ossia menefreghismo) risolti. Che poi il bug debba essere chiuso dai maintainers è fuori dubbio. Intanto però invece del carrozzone del sorgente mi tengo gli headers di 32M in /usr/src e lo devo grazie a Telperion, non era mia intenzione polemizzare, era solo un grazie a Telperion tutto qui.

    Commento di Sfinge — maggio 12, 2008 @ 10:58 am

  11. @Daniele dubito che il motivo per cui gnu/linux ha una percentuale decimale (o quasi) di utenti siano i bug più o meno curati, o il sistema di sviluppo…

    Commento di shaitan — maggio 12, 2008 @ 11:14 am

  12. Salve, sono un apprendista ubuntoniano.Ho appena finito la compilazione al kernel 2.6.25.3, ed ho seguito alla lettera la guida di ubuntu http://wiki.ubuntu-it.org/AmministrazioneSistema/CompilazioneKernel?highlight=(compila)|(kernel).

    A questo punto, riavvio, lancio la versione compilata e …magicamente non si sente l’audio e non va in Internet.
    Cliccando sull’icona dell’audio, dice che forse la scheda audio nn è configurata.
    Per la scheda di rete, nn so cosa dire. Ho provato sia con la penna wlan che col cavo ethernet, ma nulla.
    Sapresti mica darmi una dritta?Forse con la tua guida risolvo?

    Commento di zazze — maggio 13, 2008 @ 9:25 pm

  13. […] Anche se non è proprio il momento migliore. […]

    Pingback di XENofobo « All DNS Leads To Me — maggio 15, 2008 @ 1:34 am

  14. @1
    confermo che anche in un sistema 64bit con kernel “custom” i link simbolici source e build puntano ai sorgenti compilati e non al pacchetto installato

    @telperion
    good job! 🙂

    Commento di bassl — maggio 23, 2008 @ 10:58 pm

  15. Grazie mille, funziona e mi hai risolto un qualche ora di bestemmie che GIA’ stavo prevedendo.

    Se posso dire la mia…ormai gli sviluppatori T33N stanno perdendo il loro tempo per le menate tipo compiz e porcate “che fan figo” , le cose piu sistemistiche le lasciano andare…

    Commento di kraba — maggio 28, 2008 @ 2:56 pm

  16. @kraba
    grazie,
    per gli sviluppatori mi sembra che tutto proceda con estrema lentezza anche su compiz e varie.
    Esclusi i progetti “finanziati” in qualche modo, grandissima stasi generale.

    Commento di telperion — maggio 28, 2008 @ 3:45 pm

  17. […] Telperion mi ha inoltre segnalato che i kernel_headers prodotti da kernel package ultimamente non vanno. Per fixare possiamo benissimo usare la sua guida. […]

    Pingback di Compilare il kernel “alla Debian”. | Bl@ster's Home — luglio 9, 2008 @ 5:19 pm

  18. Salve ho notato però un problema. Infatti durante la compilazione dei driver madwifi vengono richiesti alcuni file ( mach_* e irq_*) che non si trovano + in asm/include ma vengono messi in delle cartelle (mach-default oppure mach-generic etc….). Qualcuno sà qualcosa a riguardo ?

    Commento di campo — novembre 16, 2008 @ 6:26 pm

  19. Risolto era da copiare pure il file /usr/src/linux-headers-2.6.24-by-campo/arch/x86/Makefile_32 (non solo Makefile_32.cpu)

    Grazie comunque.

    Commento di campo — novembre 16, 2008 @ 6:36 pm

  20. @campo
    io Makefile_32 non l’ho mai visto.
    C’è nei sorgenti */arch/x86
    Makefile e Makefile_32.cpu

    Commento di telperion — novembre 16, 2008 @ 6:59 pm

  21. […] se non è proprio il momento migliore. compilazione, Kernel, SID, […]

    Pingback di XENofobo — ottobre 8, 2010 @ 2:15 am


RSS feed for comments on this post.

%d blogger hanno fatto clic su Mi Piace per questo: