# come posso pacchettizzare il kernel complato?

## bi-andrea

può sembrare banale, ma io uso abitualmente 

```
emerge -b <nome pachetto> 
```

e lui me lo intalla e mi crea un binario in 

```
/usr/portage/packages
```

faccio così perchè ho un buon computer veloce, ma installo i binari in uno più vecchio e la cosa riesce bene senza intoppi, però col kernel è molto lento e chiedevo se si riesce ad avere un tarball o un binario simile come *.tbz2 che con un semplice comando tutti i moduli e binari vanno al loro posto.

come posso farlo?

----------

## sabayonino

Creare semplicemente un tarball (compresso o meno) della cartella /lib/modules/<kernel> , eventualmente i sorgenti in /usr/src/<kernel> e/o l'immagine e l'initramfs (se presente) in /boot  in modo da poterlo trasferire comodamente (una sorta di mini-stage-3 dedicato solo al kernel) negli altri pc 

```
# tar -cfv kernel-gentoo.tar /lib/modules/<kernel> /usr/src/<kernel> /boot/kernel-genkernel-XX /boot/initramfs-genkernel-XX
```

e ripristinarlo

```
# tar -C / -xfv kernel-gentoo.tar
```

[edit] Ovviamente assicurati che i drivers delle periferiche dell'altro pc  (inclusi o meno nel kernel) siano stati compilati   :Rolling Eyes: 

----------

## pierino_89

Volendo puoi cambiare INSTALL_PATH (default: /boot) e INSTALL_MOD_PATH (default: / a cui viene aggiunto /lib/modules/$(KERNELRELEASE) ) durante il make, così puoi installare il tutto in una cartella e poi fare un tar di quella senza andare a cercare i vari elementi in giro.

I sorgenti non starei a portarli dietro, per quelli basta emergere i gentoo-sources relativi (o i sources del caso).

Quando ripristini il kernel ricordati di lanciare "module-rebuild rebuild". Portarsi dietro questo tipo di moduli in genere è inutile perché i componenti in userspace non saranno più della stessa versione (vedi drivers nvidia).

----------

## bi-andrea

```
Quando ripristini il kernel ricordati di lanciare [b]"module-rebuild rebuild"[/b]. Portarsi dietro questo tipo di moduli in genere è inutile perché i componenti in userspace non saranno più della stessa versione (vedi drivers nvidia).
```

non lo vede come comando e mi ristituisce 

```
-bash: module-rebuild: command not found
```

----------

## pierino_89

Devi installare il pacchetto omonimo: sys-kernel/module-rebuild   :Wink: 

----------

## sabayonino

 *pierino_89 wrote:*   

> Devi installare il pacchetto omonimo: sys-kernel/module-rebuild  

 

...ed eseguire

```
# module-rebuild rebuild
```

Altre opzioni

```
module-rebuild

module-rebuild [options] action [category/package]

Version: 0.5

Where options are:

        -X       - Emerge based on package names,

                   not exact versions.

        -C       - Disable all coloured output.

Where action is one of:

        add      - Add package to moduledb.

        del      - Delete a package from moduledb.

        toggle   - Toggle auto-rebuild of Package.

        list     - List packages to auto-rebuild.

        rebuild  - Rebuild packages.

        populate - Populate the database with any

                   packages which currently install

                   drivers into the running kernel.

```

[edit] Questo comunque dipende su quale hardware viene passatto il kernel "imballato"

----------

## djinnZ

Teoricamente (molto teoricamente, genkernel fa schifo, devi gestire BOOTDIR INSTALL_MOD_PATH e le tmp) dovrebbe bastare aggiungere (ovviamente controllata da apposita use flag se vuoi fare le cose per bene) una invocazione a genkernel (per module-rebuild ci vorrebbe un semaforo e non so se emerge ammette una invocazione ricorsiva) nell'ebuild.

In questo modo dovresti trovarti nel pacchetto moduli e kernel già compilato e completo.

Il problema del tirarsi dietro i sorgenti è legato prevalentemente alle verifiche sulle variabili quindi dovrebbe bastare l'esistenza di /usr/src/linux/.config

Altrimenti potresti provare con  *Quote:*   

> ebuild kernel compile

 , compilare il kernel (anche con genkernel basta che imposti la destinazione nella sandbox)e poi continuare l'esecuzione con  *Quote:*   

> FEATURES="keeptemp keepwork" emerge -b kernel

  o  *Quote:*   

> ebuild kernel merge

 . Che è la via più banale per avere il tutto senza troppe seccature.

Sicuramente se apri un bug per proporre la patch ti risponderanno a suon di fumose illazioni di stampo sacerdotale che non va bene, quindi non lo ho mai proposto.

Come per la faccenda di aggiungere direttamente al kernel i moduli esterni (che sarebbe utile per non ammattire con slot e controslot) ma tant'è... vedi quanto è stato scritto a proposito di unionfs e non ce li vedo i devel ad andare contro le policy imposte upstream...  :Evil or Very Mad: 

Ma nulla ti vieta di farlo da te.

In genkernel, in alternativa, puoi agire con KERNCACHE INSTALL_MOD_PATH MINKERNPACKAGE e MODULESPACKAGE. Chissà perchè non c'è un modo per creare direttamente un tar.bz2 utile mah, credo che per questo si potrebbe aprire un bug.

----------

## ago

Personalmente conservo il .config e la BzImage(non ho supporto ai moduli)

----------

## bi-andrea

Il tuo discorso è molto molto interessante, analizziamo....

 *djinnZ wrote:*   

> Teoricamente (molto teoricamente, genkernel fa schifo, devi gestire BOOTDIR INSTALL_MOD_PATH e le tmp) dovrebbe bastare aggiungere (ovviamente controllata da apposita use flag se vuoi fare le cose per bene) una invocazione a genkernel (per module-rebuild ci vorrebbe un semaforo e non so se emerge ammette una invocazione ricorsiva) nell'ebuild.
> 
> In questo modo dovresti trovarti nel pacchetto moduli e kernel già compilato e completo.

 

creare un ebuild è un discroso interessante e usa script di bash quindi bisogna conoscere quel linguaggio di programmazione e nel moi caso mi servirebbe binario.

quindi penso che prima devo capire come usare anche genkernel per creare i vari moduli, lernel e intramfs in una cartella come si presenterebbe se io avessi usato tar andandoli a prendere dove li installerebbe genkernel, da lì nasce lo script.

 *Quote:*   

> Il problema del tirarsi dietro i sorgenti è legato prevalentemente alle verifiche sulle variabili quindi dovrebbe bastare l'esistenza di /usr/src/linux/.config

 

/usr/src/linux/.config

serve perchè sono i pacchetti che stiamo installando che lo cercano e infatti mi va bene solo lui anche a me

```
Altrimenti potresti provare con [quote]ebuild [i]kernel[/i] compile[/quote], compilare il kernel (anche con genkernel basta che imposti la destinazione nella sandbox)e poi continuare l'esecuzione con [quote]FEATURES="keeptemp keepwork" emerge -b [i]kernel[/i][/quote] o [quote]ebuild [i]kernel[/i] merge[/quote]. Che è la via più banale per avere il tutto senza troppe seccature.
```

come potrei scriverlo questo nell'ebuild?

 *Quote:*   

> Sicuramente se apri un bug per proporre la patch ti risponderanno a suon di fumose illazioni di stampo sacerdotale che non va bene, quindi non lo ho mai proposto.

 [/quote]

lasciamo stare mi darebbero picche

 *Quote:*   

> Come per la faccenda di aggiungere direttamente al kernel i moduli esterni (che sarebbe utile per non ammattire con slot e controslot) ma tant'è... vedi quanto è stato scritto a proposito di unionfs e non ce li vedo i devel ad andare contro le policy imposte upstream... 
> 
> Ma nulla ti vieta di farlo da te.

 

infatti

 *Quote:*   

> In genkernel, in alternativa, puoi agire con KERNCACHE INSTALL_MOD_PATH MINKERNPACKAGE e MODULESPACKAGE. Chissà perchè non c'è un modo per creare direttamente un tar.bz2 utile mah, credo che per questo si potrebbe aprire un bug.

 

questa procedura non la conosco

----------

## djinnZ

Non la conosco neppure io, so che ci sono e mi sono sempre chiesto perché non prevedere direttamente la creazione di un tar appropriato invece che due.

----------

