Come avere un Kernel minimale solo per il nostro hardware

 

 

 

Quella che si vede sopra è l'immagine di come in realtà è il nostro kernel Linux dopo l'installazione di una tipica distribuzione GNU/Linux. Il kernel Linux diventa sempre più grasso poichè vengono sempre inseriti nuovi supporti all'hardware. Adesso indicherò un modo semplice per ottenere un kernel minimale con solo quello che ci serve, e cioè un kernel fatto su misura per il nostro pc, senza tirarsi dietro i circa 2000 moduli in più che non ci servono. Tanto tempo fà, chì come me si è cimentato a ricompilarsi il kernel per ottimizzare il proprio hardware scadente, si è accorto fin da subito del tanto tempo che ci voleva, e soprattutto, di tutte le volte che si andava incontro ad un kernel panic, poichè si toglieva qualcosa di "vitale". Comunque anche dopo molteplici tentativi ed ore-giorni sprecati, non si era completamente soddisfatti, almeno io. Il pc con cui mi sono accanito era un Olidata pentium 3 ad 800mh con (se non ricordo male) la ram portata a 512, una scheda video Matrox ed un hard disk da 16G ecc. ecc. Comunque andando al sodo, riepilogo i passi per la ricompilazione del kernel, per poi soffermarmi su l'opzione che permetterà di snellire il nostro kernel.

 

# apt-get install build-essential bin86 kernel-package libncurses5 libncurses5-dev fakeroot module-init-tools

# cd /usr/src

# uname -r

# apt-get install linux-source-2.6.38

# bzip2 -dc linux-source-2.6.38.tar.bz2 |tar xf -

# ln -sf linux-source-2.6.38 linux

# cd linux

# cp /boot/config-2.6.38-686 .config

 

a questo punto in genere si usa a secondo delle esigenze:

 

# make menuconfig oppure make oldconfig

 

per ottenere invece un kernel minimale, bisogna usare:

 

# make localmodconfig

 

che si occuperà di lanciare lsmod per conoscere i moduli caricati sul nostro sistema e leggerà tutti i Makefiles, e alla fine rimuoverà tutti i moduli che non serviranno, come si può leggere anche quà. La ricompilazione risulterà molto veloce, in virtù di quanto detto sopra. Alla fine per generare linux-image e linux-headers, per chì ha due cpu, può usare:

 

# CONCURRENCY_LEVEL=2 make-kpkg --initrd --append-to-version=-nome kernel-image kernel-headers

 

adesso il nostro tux, sarà più bello e più magro.

 

 

 

 

enjoy 😉

Autore: Franco Conidi aka edmond

Senior System Integrator, Network Administrator, Sys Admin Linux, Linux User, Consulente Informatico.

35 pensieri riguardo “Come avere un Kernel minimale solo per il nostro hardware”

  1. Edmond! Sempre tu sia lodato!!! 😉 Proprio un’oretta fa un amico mi ha portato un pc con un Celeron 2.0GHz e 1024 di RAM per vedere se riuscivo a sveltirlo un po’ rispetto all’XP di default (“tu che dici sempre che linux bla bla… cosa si riesce a fare con il mio vecchio pc?”), già che ci sono gli ricompilo il kernel in questo modo!
    A tal proposito, già che ci sono ne approfitto:
    1) Gnome ci gira decentemente secondo voi o è meglio un LXDE? (fosse per me metterei il secondo ma provenendo lui da Win non volevo mettergli su una cosa troppo scarna)
    2) ho un Pentium 4 Willamette 1.7 GHz che dovrebbe essere perfettamente funzionante (almeno quando lo smontai lo era), tu cosa dici, dovrebbe essere + veloce del suo Celeron?
    Grazie 1000!

  2. Mi scuso con chi ha scritto e non vede apparire il proprio commento, ma per errore lo eliminato dato che mi era
    finito nello spam. Lo invito a ripostare 🙂

    @ Fabio
    per quanto riguarda Gnome ti dico subito che io lo usavo sul pentium 3 a 800mh e girava bene.
    il pentium 4 dovrebbe essere “migliore” del celeron
    grazie e ciao 😉

    @Andy
    quello che c’è scritto sopra ti crea appunto i due pacchetti da installare, quindi ci sarà
    come sempre la nuova voce nel menu di Grub.

    @picchio
    grazie a te…ciao 😉

  3. Se un modulo non serve non verra’ caricato, no? es: RAID, XFS, etc

    quali sono i miglioramenti, alla fine dei conti?

    – minor spazio disco occupato
    – maggiore velocita’ di boot (mia esperienza: dimezzato tempo di boot su un vecchio cassone Pentium2)
    – minore ram occupata

    ma non credo ci sia un’accellerazione nelle attivita’ “solite”, cioe’ firefox resta il mattone di sempre etc.

  4. @maddaix
    bhe…..diciamo che con i pc moderni ci si può permettere il kernel di default, ma come dicevo nel post,
    su un Olidata pentium 3 800mh con poca ram ed hard disk da 16g, i vantaggi sono notevoli. Se poi si considera il tempo ridottissimo per la compilazione, ti puoi permettere di modificare ed inserire tutto a tuo piacimento quando vuoi. A spanne ti dico che per ricompilare un kernel minimale ci avrò messo 15 minuti circa.

  5. apt-get install linux-source-`uname -r` piu’ veloce e con la sicurezza di scaricare il kernel in uso.

  6. grazie, post utilissimo 🙂
    mi sono compilato molte volte il kernel e non so quante ore ho perso per togliere i moduli non necessari
    e adesso… grazie al tuo post in 15 minuti ho un kernel su misura per il mio PC 🙂
    mi hai fatto veramente risparmiare ore

    vorrei comunque modificare il file .config ottenuto con
    # make localmodconfig

    per esempio vorrei aggiungere FUSE, pensi che possa editare il file di testo .config?
    grazie 🙂

  7. Uhm, correzione!
    Facendo “apt-get install linux-source-`uname -r`” si ha la certezza di *non* scaricare nulla, perche’ i kernel, hanno tutti un’ulteriore versione, cosa che il sorgente non ha.
    Esempio “uname -r” sul mio riporta “2.6.38-f3ja”, che non ha nessun sorgente corrispondente con lo stesso nome :-)))
    Comunque, sui netbook si vola, e sul mio vecchissimo dns (pentium 200 mmx) questa procedura fu un vero toccasana!

  8. @Paride
    infatti è così, il mio “uname -r” è 2.6.38.2-ck3-edm 🙂

    @cipolla
    puoi aggiungere quello che vuoi, intanto come hai notato il tempo di compilazione è bassissimo.

  9. Io ho commesso l’errore di non cronometrare, ma non credo di aver superato i dieci minuti…

    Certo, sul mio fisso (quad processor, amd64, ati, 4 giga) i benefici si apprezzano pochissimo (~ niente), ma mi/vi chiedo: su un netbook questa procedura quanto tempo dovrebbe, ad occhio e croce, sottrarmi?

    Infine, un ringraziamento: non conoscevo questa “novità” del localmodconfig!!!

    Ciao
    Doc

  10. @Doc
    per quanto riguarda il netbook ti riferisci al tempo di ricompilazione o ad altri vantaggi tipo boot ecc ecc.
    Per quanto riguarda la ricompilazione ti farò sapere precisamente il tempo, dato che sto per rifare la procedura.
    Il tuo fisso è molto potente ok, ma quando ricompili con localmodconfig, ti puoi permettere di farlo ogni sera, per
    aggiungere questo o quello 😉

  11. Mi riferivo ai tempi di compilazione (sono molto pigro!), tuttavia elencami pure i benefici concreti, per capire quanto e se ne vale la pena.

    Grazie
    Doc

    P.S.: non ci penso nemmeno a rifarlo ogni sera! 😉

  12. Brutte notizie: il kernel appena compilato non mi consente di montare pennini usb.
    Me ne sono accorto ora!
    Studio la cosa un altro giorno!

    Ciao
    Doc

    P.S.: certo, se ci devo perdere tutto questo tempo… 🙁

  13. Ogni tanto c’e’ qualcuno che si sveglia dicendo che il kernel Linux non e’ piu’ quello di una volta, che ora ci sono troppi drivers, che e’ pesante, e via cosi’…

    Uno che dice cosi’ (senza offesa, Edmont) evidentemente non capisce un fico secco di come Linux funziona. La maggior parte dei driver, in percentuale variabile tra il 95 e 98% a seconda della distribuzione, e’ compilato come modulo, e quindi non occupa nessuna risorsa del sistema. I files del kenel occuperanno piu’ spazio disco, sicuramente, ma si parla di qualche decina di Mb, che non creano nessun problema neanche all’hardisk del computer citato nel post. Idem dicasi per le performances del kernel stesso come dei tempi di avvio: nessuna differenza misurabile.

    Tutt’altro problema, invece, nel momento in cui arriva una periferica nuova (o una vecchia per la quale non si sono compilati i driver corretti, @Doc!), che non funzionera’ piu’ al primo collegamento. Bella forza, segate le gambe ad uno dei piu’ grandi vantaggi di Linux rispetto alla maggior parte dei sistemi operativi “competitori”: il riconoscimento istantaneo di (quasi) qualunque dispositivo.

    Ha sempre fatto molto “figo” e probabilmente continuera’ a farlo per anni a venire, ricompilarsi il proprio kernel, ma a meno di sistemi veramente particolari (embedded, per dirne uno?) o di server in cui la sicurezza e’ critica (disabilitare il caricamento di moduli dinamici), non solo il gioco non vale la candela, ma e’ anche deleterio.

    Finito lo sfogo, chiunque si senta libero di sperimentare e giocare a ricompilare il kernel del proprio sistema, ma non si dica che serve a qualcosa in termini di prestazioni, a meno che non si riportino numeri, misure e nomi e cognomi dei moduli che hanno fatto la differenza (hint: non ce ne sono).

    FP

  14. @Doc
    mi sono accorto anche io di questo problema sull’Acer Apire One, è evidente che localmodconfig ha dimenticato qualcosa.
    Come ho un attimino di tempo controllo, se poi mi vuoi anticipare, meglio 🙂
    Per quanto riguarda i tempi di compilazione sull’Aspire One i numeri sono i seguenti:

    edmond@SqueezeOnebox:~$ uname -a
    Linux SqueezeOnebox 2.6.38.6-ck3-edm-min #1 SMP Sun May 15 23:08:19 CEST 2011 i686 GNU/Linux

    real 21m40.604s
    user 24m2.678s
    sys 3m4.997s

  15. @FussyPenguin

    cit : “Ogni tanto c’e’ qualcuno che si sveglia dicendo che il kernel Linux non e’ piu’ quello di una volta, che ora ci sono troppi drivers, che e’ pesante, e via cosi’

    bhe più che qualcuno, dato che sulla rete lo pensano in tanti. Poi per quanto riguarda i vantaggi di un kernel full, per il
    riconoscimento immediato (o quasi) di periferche, è senz’altro comodissimo.

    cit: “Uno che dice cosi’ (senza offesa, Edmond) evidentemente non capisce un fico secco di come Linux funziona.”

    nessuna offesa, infatti quando scrivi ti esponi anche a delle critiche ed a volte a delle inesattezze, fa parte del gioco, su questo
    spazio, che tra l’altro leggono in 4 gatti, non filtro nemmeno i commenti, c’è massima libertà.

    Poi al di là dei numeri che al momento sinceramente non ho nemmeno voglia e tempo di verificare, io penso che uno snellimento del proprio kernel, con un repulist di tutto quello che non usi o t’interessa, qualche vantaggio lo porti.

    ciao edmond

  16. @ Edmond
    Grazie mille, intanto per i numeri. A questo punto, non so se ne vale la pena.

    In effetti, chiarisco la mia posizione, anche alla luce del dibattito sopra avviato.
    Ha senso ricompilarsi il kernel? A mio avviso, la cosa ha senso solo se comporta una spesa MINIMA di tempo, SENZA DANNI collaterali. Se per qualche magagna debbo spendere anche 5 minuti, allora non ne vale la pena.
    È certo innegabile che uno snellimento sia utile, ma se queste diete devono causare perdite di tempo…. meglio essere grassi!!!

  17. @FussyPenguin

    C’e’ molta piu’ gente di quello che pensi che si ricompila il kernel. io personalmente sul mio notebook ce l’ho completamente statico senza nessun modulo, proprio per prevenire l’eventuale inserimento di moduli per completare un’eventuale compromissione. Spesso la differenza sul ricompilare o meno il kernel e’ legata proprio alla professione che si fa ed al livello di paranoia di ognuno 🙂

  18. Ricompilato in 5/6 minuti e risolto il problema USB, con un trucchetto semplice semplice.
    Mi ero accorto che lsmod dava risultati diversi se lanciato a “freddo” (computer acceso da poco) o dopo aver inserito un pennino.
    Quindi la compilazione l’ho fatta DOPO aver ficcato un pennino.
    Ora tutto sembra andare come prima, ma con un config di 2832 righe contro le 4752. I vantaggi pratici non sono percettibili, almeno per ora, ma almeno abbiamo imparato una cosa (per me) nuova!!!

    Ciao e grazie!
    Doc

  19. @Doc
    Per quanto riguarda il ricompilarsi il kernel io la penso esattamente come @Paride.
    Per il problema USB, immaginavo anche io fosse un qualcosa di simile, e quindi i proc dell Aspire One lavoreranno anche questa sera 🙂

  20. @Doc @Tutti
    chiedo scusa per l’errore fatto nel dare il tempo di compilazione sull’Aspire One,
    ma il tempo effettivo è il seguente:

    real 21m40.604s
    user 24m2.678s
    sys 3m4.997s

    di conseguenza ho modificato anche il commento sopra. 21 minuti mi sembrano un tempo accettabile.
    Nessun problema con le USB.

  21. @Edmond
    Mi inchino al tuo stile, apprezzo il tuo spirito ed il modo in cui hai affrontato le critiche 🙂
    Uso questo nick per fini “educativi”, come questo, per cercare di diffondere un po’ di spirito critico fra i pinguini.

    A proposito del peso del kernel, il fatto che ci sia tanta gente che se ne lamenta non vuol dire che sia un vero problema. I dettagli che fanno la differenza sono altri, come la scelta dello schedulatore, o la disabilitazione del profiling (roba da sviluppatori per monitorare le performances del kernel, attivo di default su quasi tutte le distro, credo), ma raramente chi si lamenta ne e’ a conoscenza.

    Ripeto: piu’ moduli non vuol dire kernel piu’ lento. Le differenze di prestazioni tra un kernel con driver statici e uno modulare non sono misurabili.
    Piuttosto, 20 minuti di compilazione suggeriscono che stai compilando un sacco di roba che in realta’ non ti serve. Una manciata di minuti su un computer moderno (magari multicore) dovrebbero essere piu’ che sufficienti per un kernel personalizzato.

    @Paride
    Va benissimo essere paranoici, ma disabilitare il DKMS ha senso in un contesto multi-utente, dove la macchina e’ usata da piu’ persone o servizi e dove un approccio ‘stealth’ (mettere su un sistema furto di dati in transito su un server) potrebbe essere piu’ importante. Inoltre, i dispositivi collegati ad un server sono in genere molto poco variabili e avere un riconoscimento hot-plug e’ un optional trascurabile.

    Invece su un portatile, molto probabilmente mono-utente e configurato con sudo, questo ha poco senso, perche’ per avere accesso al sistema (fisicamente o remotamente) e ricompilare l’eventuale modulo pericoloso devono compromettere il tuo (unico) utente, per cui tutti i dati sono a loro volta compromessi. Non avere il DKMS in questo caso non fa la minima differenza (a parita’ di professione).
    Molto piu’ dannoso, a mio avviso, dover ricompilare il kernel *ogni volta* che vuoi usare una PCMCA, lo scanner in ufficio, la stampante a casa della fidanzata, il sistema home theater della nonna… Inoltre, con buona probabilita’, visto che devi ricompilare vorrai prendere una versione del kernel nuova-nuova-ancora-calda, che e’ un grosso passo falso in termini di sicurezza.

    Detto questo, penso che compilare un kernel specifico per il proprio hardware resti un ottimo esercizio per imparare un sacco di cosette belle su com’e’ un pinguino visto da dentro.

    Buon divertimento.

  22. @FussyPenguin
    infatti sul pc desktop ci ho messo pochi minuti a compilare, i 20 minuti si riferiscono invece al
    “localmodconfig” fatto sul netbook Acer Aspire One. Comunque al di là di tutti i discorsi tecnici e le prove “cronometrate”
    che non ci sono, io penso che la compilazione del kernel per alcuni pinguini, è più che un ottimo esercizio, ed esprime
    quel senso di libertà, potenza, controllo, e forse anche un pò di illusione che è alla base di questo O.S:

  23. ciao!
    è la prima volta che affronto una operazione del genere.
    ho seguito passo passo; avendo una sola cpu mi sono fermato a questa operazione:
    # make localmodconfig

    adesso in /usr/src mi ritrivo con la directory linux-source-2.6.38 con dentro vari file e cartelle.
    di tutto ciò che devo agiungere a grub per avviar questo kernel??

  24. @ Matteo
    Ti rispondo io.
    In generale, per conoscere il numero di CPU, basta dare
    grep -c ^processor /proc/cpuinfo

    Poniamo che questo comando ti dia 1. Allora, per compilarti il kernel, dopo il localmodconfig, dovrai dare, sempre da root e da dentro la cartella dei sorgenti
    CONCURRENCY_LEVEL=1 make-kpkg –initrd –append-to-version=-nome_personalizzato kernel-image kernel-headers
    (modifica a tuo piacimento “nome_personalizzato”: io uso la data).

    Finita la compilazione,
    # cd ..
    # dpkg -i linux-image* linux-headers*

    Beninteso, dopo tutto e, soprattutto, dopo esserti accertato che il nuovo kernel funziona a dovere, puoi anche fare pulizia, cancellando i debs generati ed installati (magari, copiateli da qualche parte), nonché la cartella scompattata dei sorgenti del kernel (che occupa circa 2 giga).

  25. Io dovrei configuare il kernel su un netbook samsung n200 con LMDE a 64 bit… c’è qualche consiglio in proposito??

  26. lo farò.. non appena finisco di configurare la linux mint debian edition ^^

  27. spero di non dire una cosa banale, ma dopo
    # make localmodconfig
    mi sembra utile fare anche
    # make menuconfig
    per affinare ulteriormente il kernel

  28. @cipolla
    localmodconfig lo fai quando hai già tutto quello che ti serve e vuoi togliere il superfluo.

  29. Se vuoi davvero snellire kernel, e costruirlo per la tua macchina,
    (cioè non userai mai la periferiche citate da FussyPenguin 😀 ), non è tanto importante diminuire il numero di moduli da compilare, quanto spulciarsi tutta la configurazione e togliere i supporti statici a periferiche non utilizzate, la disabilitazione delle varie opzioni di debug, la scelta dello schedulatore, la scelta delle patch da applicare, insomma non lo fai in 5 minuti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *