Kerneler riprende lo sviluppo


So che sono poco credibile visto che in passato l’avevo detto ma poi per mille motivi non mi ci sono messo! :)

Visto che ormai mancano un paio di esami prima della laurea ho chiesto ad un professore molto disponibile se fosse possibile essere seguito per sviluppare Kerneler come tesi triennale di laurea e la risposta è stata positiva!

Quindi se voglio laurearmi dovrò svilupparlo per forza :P

Ho ripreso ieri sera/notte in mano i sorgenti e ho trovato prima di ricominciare a scrivere codice alcune modifiche da fare a livello strutturale!
Come avevo promesso (e fatto) ogni passo verrà pubblicato sul blog!

Vi allego una breve relazione che ho scritto per vedere quali sono i punti principali su cui intendo concentrarmi!

Kerneler

Gli utenti GNU/Linux lamentano una certa difficoltà nel far funzionare il proprio hardware, sia per cause legate al cattivo supporto da parte delle aziende sia per le difficoltà che incontrano durante la ricompilazione del kernel.

Compilare il kernel permette di aggiungere moduli necessari per il corretto funzionamento del computer e rimuovere quelli in eccesso. Ad esempio un utilizzatore di un computer desktop non avrà nessun interesse a installare il supporto per “Network Token Ring“, che occupa inutilmente spazio disco e rende il boot più lento.

Kerneler è stato scritto per rendere molto semplice la compilazione del kernel grazie a controlli su ogni operazione, offrendo all’utente anche un processo di learning durante il quale possa acquisire confidenza con i comandi *nix.

L’utente verrà seguito durante l’operazione di ricompilazione tramite i seguenti punti:

  • Download
  • Decompressione
  • Gestione patch (revisioni e patch aggiuntive)
  • Configuratore automatico
  • Configuratore manuale
  • Compilatore
  • Installatore

1. Download

Il download è la fase più semplice durante la quale l’utente sceglierà la versione del kernel:

  • che più è gradita
  • ultima disponibile

Alcuni driver funzionano solo su determinati rami/revisioni del kernel quindi può rivelarsi inefficace l’utilizzo dell’ultima versione.

2. Decompressione

La decompressione si occuperà di posizionare e decomprimere i sorgenti del kernel su cui si andranno a eseguire operazioni.

L’utente è bene che prenda familiarità con i comandi tar, bunzip e i loro parametri di configurazione.

3. Gestione Patch

La gestione patch permette di simulare l’applicazione di una determinata patch prima di rendere definitiva la modifica “sporcando” così i sorgenti.

Le patch possono generare warning o errori ritornando così all’utente avvisi (estrapolandone l’output e suggerendo ove possibile la soluzione).

Inoltre, poiché il kernel Linux ha superato il centinaio di MB, è possibile passare da una versione all’altra attraverso l’utilizzo di patch incrementali.

Es 2.6.30.1 => 2.6.32.4

I passaggi logici saranno:

2.6.30.1 => 2.6.30 => 2.6.31 => 2.6.32 => 2.6.32.4

Il tutto è chiaramente trasparente all’utente ma spiegato in fase di funzionamento.

Inoltre potrebbero essere messe a disposizione all’utente un elenco di patch “non ufficiali” come le patch CK (Con Kolivas con scheduler BSF), patch di sviluppo “instabili” (Andrew Morton MM patchset) ecc.

4. Configuratore Automatico

Provvederà, tramite “lsmod“, di capire quali moduli siano attualmente caricati e utilizzati dal kernel in modo da aggiungerli alla configurazione del kernel.

In questa maniera sarà possibile per un utente evitare l’utilizzo di un’immagine initrd per il caricamento dinamico di moduli che rallenta notevolmente la procedura di boot.

Inoltre configurando architettura, processore, quantità di ram e altre ottimizzazioni si potranno ottenere vantaggi prestazionali notevoli rispetto alle configurazioni generiche presenti nei kernel preconfezionati delle distribuzioni.

5. Configuratore Manuale

All’utente verrà mostrata una schermata di configurazione (tramite libncurses, gtk o Qt) in modo da permettere la rimozione di supporto hardware inutile o l’aggiunta di altri moduli di cui si avrà necessità in futuro.

6. Compilatore

Sfruttando i comandi classici della ricompilazione si può procedere a compilare il kernel o volendo per distribuzioni più specifiche sarà possibile costruire pacchetti (ad esempio su debian utilizzando make-kpkg si potrà generare un pacchetto .deb utilizzabile anche su altre macchine).

Kerneler calcolerà il numeri di thread ottimale (concurrency_level) in modo da sfruttare appieno la potenza di calcolo dei processori multicore/multicpu.

7. Installatore

E’ quindi possibile installare il kernel compilato per renderlo disponibile al successivo boot.

Su distribuzioni debian-like l’aggiornamento di grub/grub2/LILO avverrà automaticamente tramite postscript presenti nel pacchetto deb generato mentre sulle altre distribuzioni verrà eseguito tramite Kerneler.

Considerazioni

L’utente, oltre ad essere coinvolto direttamente durante la compilazione, può scegliere di eseguire operazioni a mano tramite il terminale incorporato al programma che ha duplice funzione pedagogica e di debug.

Inoltre essendo modulare l’intero procedimento può essere svolto in diverse sessioni: (esempio download prima e il resto offline oppure compilazione in un secondo momento). Infatti il programma tiene traccia delle operazioni già svolte e di quelle ancora da svolgere.

Stato attuale del progetto e tecnologie usate

Attualmente kerneler è scritto in bash e interfaccia testuale/grafica gestita rispettivamente da dialog/zenity.

La versione esistente non prevede il configuratore automatico.

Complessivamente risulta poco ottimizzato, poiché si è sviluppato con uno scopo diverso, anche la struttura deve essere profondamente rivista .

Il progetto iniziale aveva un obiettivo formativo modesto e solo in tempi successivi si sono sviluppate un gran numero di funzionalità aggiuntive .

Tecnologie della nuova versione

La nuova versione in Python prevede una struttura più semplice e maggiore versatilità rispetto a bash.
La scelta di Python è motivata con le molteplici librerie e classi disponibili che permettono di interfacciarsi in modo molto semplice e efficiente con reti, sistema operativo, I/O ecc

L’interfaccia grafica verrà scritta attraverso Glade e librerie Gtk rendendola gradevole e meno vincolata rispetto a zenity, oltre eseguire modifiche in modo semplice e veloce.

Verrà resa disponibile una versione minimale in modalità testuale in modo da rendere possibile l’utilizzo anche senza Xserver.

  1. #1 di Neon il 6 aprile 2010 - 20:44

    Kerneler è un programma che ho scritto in Bash tempo fa.. la sua utilità è compilare il kernel linux (scritto in c)..

    Spesso l’interfaccia make menuconfig/gconfig/xconfig sono ostiche per utenti che non sanno configurarlo..
    Kerneler è scritto per facilitare le operazioni e aiutare l’utente a compilare senza bisogno del terminale (spiegando però passo passo le operazioni da fare in modo da avere una funzione “istruttiva”)

    Copiare il file del vecchio kernel non è sufficiente.. ad esempio processore, quantità di ram, tipo di preemption e molte altre configurazioni che ottimizzano il sistema non basta copiarle da .config..

    Inoltre copiando il .config è necessario usare l’initrd durante la procedura di boot (il che rallenta il tempo di partenza del sistema). Compilando in maniera statica i moduli di filesystem e controller del disco su cui risiete la / invece è possibile evitarlo!

    Le patch (come nel caso per esempio di scheduler alternativi) devono essere aggiunte a mano e Kerneler si prendeva il compito di eseguire simulazioni di aggiunta di patch e nel caso di una effettiva riuscita provvedeva a applicarle permanentemente.

    Attualmente ripeto è scritto in bash ma in futuro (molto presto) verrà riscritto in python.

  2. #2 di donato il 6 aprile 2010 - 20:35

    Kerneler se ti riferisci all’attuale kernel non è assoulutamente scritto in bash il kernel è scritto in c, l’interfaccia di configurazione è scritta in bash (per intenderci il (make menuconfig))
    make gconfig usa gtk
    make xconfig usa Qt
    non ho capito questa cosa di lsmod per l’autoconfigurazione, basta copilare con (make oldconfig) o semplicemente fare un cp .config del vecchio kernel nella dir del nuovo,nel caso avevi un kernel preconfigutrato basta prendere il /proc/config.gz ottenendo il conf del sistema ed usarlo come nuovo .config
    Per le patch basta scaricare il kernel da git che ti viene gia patchato

(non verrà pubblicata)