# Creare pacchetti generici x86 automaticamente con l'emerge

## jesus_was_rasta

Ciao a tutti!   :Very Happy: 

Mi frulla per la testa un'idea matta, chiedo consiglio a voi su come fare.

Ho appena assemblato una bella macchina AMD, piuttosto performante.

Gentoo gira a meraviglia, e gli emerge sono velocissimi...  :Wink: 

Vorrei allestire altre macchine con Gentoo, alcune delle quali un po' vecchiotte...

Mi chiedevo se era possibile fare in modo che, durante un emerge, mi venissero generati i pacchetti binari (il buildpkg di portage) facendo in modo perÃ² che questi non siano generati con le specifiche del make.conf della macchina attuale (ottimizzazioni per AMD) ma con delle flag molto piÃ¹ "sciallo" (=tranquille  :Laughing:   ) compatibili per le macchine 686, in modo da poterli poi installare sulle altre macchine all'occorrenza senza spendere tempo in lunghi emerge.

E' possibile?

Mi conviene forse perdere un po' di tempo ad installare e a configurare distcc?   :Confused: 

Grazie!

EDIT: mi sa che Ã¨ un po' una ca@@ta 'sta mia idea...   :Shocked: 

Alla fine il pacchetto dovrebbe essere ricompilato, e quindi doppio tempo sprecato...

A 'ste punto metto distcc e faccio prima...

Scusa l'idiozia del post!   :Laughing: 

Comunque se la cosa fosse fattibile puÃ² comunque essere una cosa utile sapere come fare!   :Wink: 

----------

## Ic3M4n

personalmente non ti consiglio distcc. lo utilizzo su un paio di macchine perchÃ¨ non ho altra scelta perÃ² la fase di configure Ã¨ lentissima.

se hai la possibilitÃ  ti consiglierei di esportare la / come da questo thread https://forums.gentoo.org/viewtopic-t-443007-highlight-datati.html

oppure puoi modificare il tuo make.conf (credo che basti un piccolo script con due symlink al make.conf del tuo pc ed a quello meno performante e cambiarlo all'occorrenza. ed utilizzare la features buildpkgonly. 

altrimenti monti lo share via nfs ed esporti la root ed imposti la variabile ROOT in make.conf come da man.

----------

## nitbix

Se vuoi velocizzare gli emerge dovresti anche considerare un paio di cose molto interessanti, oltre a distcc:

1) usare un tmpfs per /tmp/portage http://gentoo-wiki.com/TIP_Speeding_up_portage_with_tmpfs

2) usare ccache http://gentoo-wiki.com/TIP_Use_ccache

3) scaricare mentre compili http://gentoo-wiki.com/TIP_Downloading_dependencies_while_compiling

Ovviamente questo oltre a tutto il resto. Trovo che se installi su macchine simili crearti i pacchetti binari non sia una cattiva idea. Se n'e' parlato poco fa a Gentoo UK 2006, soprattutto dell'utilizzo in server farm dove sono tutti uguali (o quasi..)

----------

## lavish

Anche se abbiamo capito che non ti servirà più a nulla (  :Laughing:  ), la soluzione per quello che hai chiesto è proprio quella detta da Ic3M4n, cioè usare la features buildpkg

Dai un'occhiata a /etc/make.conf.example per i dettagli  :Wink: 

Ciao!

----------

## jesus_was_rasta

Grazie mille dei consigli!   :Very Happy: 

@Ic3M4n

Ecco, sospettavo che con distcc potessero non essere tutte rose e fiori....

Grazie mille per il link al post dei PC datati, non me lo ricordavo!

Comunque l'dea era di fare come dicevi tu, usando due make.conf da alternare secondo le esigenze; e naturalmente davo per scontato l'utilizzo di buildpkg per farmi i pacchetti di installazione...   :Wink: 

@nitbix

Grazie!

ccache lo uso da sempre; col nuovo portage poi ho scoperto la funzione del fetching in background che ho subito abilitato...  :Smile: 

La storia del tmpfs l'avevo letta, ma non mi azzardavo a farlo perché mi sembrava di andare a complicarmi troppo la vita... In effetti la macchina ha 1GB di ram DDR400 dual-channel, niente male, chissà che un giorno di questi non ci provi...

@lavish

Ok, farò proprio così!  :Wink: 

Ciao!   :Very Happy: 

----------

## nitbix

tmpfs e' proprio una cosa da 5 minuti, giusto questione di aggiungere una riga a /etc/fstab.

A me ha accelerato di *molto*molto*molto. Diciamo che ci metto piu' o meno la meta'.

Provalo, ne vale la pena!

----------

## jesus_was_rasta

Lo volevo provare, anche se mi è sorto un problema...   :Confused: 

Grazie mille!   :Wink: 

----------

## jesus_was_rasta

Ho seguito la procedura per abilitare il tmpfs trovata su Gentoo Wiki.

Uso quello script, temerge, postato in fondo al wiki.

A dire il vero però non mi sembra che abbia migliorato di tanto le cose...   :Confused: 

Ho 512 MB di RAM ed ho montato un file system in tmpfs da 1024MB, per essere al sicuro anche in compilazioni di grossi pacchetti.

Pensavo: con 512MB di RAM e 1024 di tmpfs swapperà una cifra, sarà per quello...

Mentre invece non swappa affatto...   :Shocked: 

Boh!

Vabbè, sto andando troppo off-topic...   :Rolling Eyes: 

Ciao!

----------

## MeMyselfAndI

scusa ma se hai 512 MB di ram cosa monti a fare 1024 MB di tmpfs? tanto non li hai a disposizione....

----------

## .:deadhead:.

il motivo è che tempfs usa solo quel che gli serve percui se in compilazione nessun prog ha occupato tutto quello spazio è normale che non abbia swappato

----------

## jesus_was_rasta

 *MeMyselfAndI wrote:*   

> scusa ma se hai 512 MB di ram cosa monti a fare 1024 MB di tmpfs? tanto non li hai a disposizione....

 

PerchÃ¨ se compilo pacchetti piÃ¹ grossi 512MB non bastano...

Alemno cosÃ¬ il sistema swappa ma non mi va a remengo la compilazione!   :Wink: 

 *.:deadhead:. wrote:*   

> il motivo ï¿½ che tempfs usa solo quel che gli serve percui se in compilazione nessun prog ha occupato tutto quello spazio ï¿½ normale che non abbia swappato

 

Infatti... Che pirla che sono...   :Embarassed: 

Me ne sono accorto 2 minuti dopo aver postato.

Grazie mille!   :Wink: 

----------

## ^Stefano^

Salve a tutti. Riapro questo 3D perchè anche io da qualche giorno sto cercando un metodo per installare velocemente i programmi su un piccolo celeron 700mhz con 128mb di ram che sta nella mia LAN. Ho letto l'howto "portatile felice" ma non mi piace come soluzione. Ho provato a seguire il suggerimento di Ic3M4n che dice "altrimenti monti lo share via nfs ed esporti la root ed imposti la variabile ROOT in make.conf come da man".

riesco benissimo a montare l'harddisk del celeron via nfs, esporto la root, lanciando dall'amd64 il comando export ROOT=/path/, poi lancio l'installazione di un programma; qua ho due strade per farlo:

A) uso il make.conf della macchina amd64, l'installazione va a buon fine ma quando poi sul celeron vado ad avviare il programma ricevo

```
redeyes nello # update-eix

bash: /usr/bin/update-eix: cannot execute binary file
```

B) uso sull'amd64 il make.conf del celeron per installare il programma, ma qua si blocca al configure

```
checking for i686-pc-linux-gnu-g++... no

checking for i686-pc-linux-gnu-c++... no

checking for i686-pc-linux-gnu-gpp... no

checking for i686-pc-linux-gnu-aCC... no

checking for i686-pc-linux-gnu-CC... no

checking for i686-pc-linux-gnu-cxx... no

checking for i686-pc-linux-gnu-cc++... no

checking for i686-pc-linux-gnu-cl... no

checking for i686-pc-linux-gnu-FCC... no

checking for i686-pc-linux-gnu-KCC... no

checking for i686-pc-linux-gnu-RCC... no

checking for i686-pc-linux-gnu-xlC_r... no

checking for i686-pc-linux-gnu-xlC... no

checking for g++... g++

checking for C++ compiler default output file name... configure: error: C++ compiler cannot create executables

See `config.log' for more details.
```

Ora i casi sono due, o questo metodo è valido solo per macchine con uguale architettura, o io sbaglio qualcosa...

Ad ogni modo ho pensato anche alla FEATURES buildpkg ma non mi sono chiare un paio di cose:

questa features crea un pkg del programma che stai installando, ma poi creato il pkg si ferma e non installa realmente (tipo checkinstall su slackware o debian per esempio), oppure installa tutto sulla macchina e poi crea il pkg?

come funziona il discorso del make.conf per questa features? perchè poi anche se andassi ad usarla dovrei comunque risolvere gli errori che ho riscontrato nella prima parte di questo post.

Sperando di essermi spiegato decentemente...se avete bisogno di qualsiasi informazione sono qua!

----------

## Scen

Hai provato ad eseguire quest'installazione tramite un CHROOT a 32 bit?

Comunque usando la FEATURES buildpkg viene creato un pacchetto binario successivamente all'emerge del pacchetto, ovvero l'equivalente di

```

emerge <pacchetto>

quickpkg <pacchetto>

```

Nel tuo caso non penso si possa applicare, in quanto stai compilando su una Gentoo AMD64, e i pacchetti installati, ovviamente, sono a 64 bit!

----------

## lavish

Certamente non puoi pensare di usare questa metodologia per macchine con architettura diversa. Una è a 64bit e una a 32bit, non hai la minima speranza che ti funzioni  :Wink: 

Anche usando la stessa architettura ma processori diversi, avresti sicuramente problemi nel caso usassi -march per una determinata CPU. 

Il mio consiglio è quello di usare il subset comune (i686 con buona probabilità).

Detto questo, la FEATURE  buildpkg, installa il pacchetto _e_ crea un .tbz2 in /usr/portage/packages/ (o dove hai specificato la variabile PKGDIR  :Wink:  )

Ciao!

----------

## ^Stefano^

Ho letto la guida al chroot32bit, davvero ben fatta. Quello che non mi è chiaro però è questo: una volta che io ho completato tutti i passaggi della guida mi ritrovo con due sistemi sul pc, giusto? il mio sistema, e un sistema base a 32bit in /mnt/gentoo32.

quindi poi, per montare lo share nfs del celeron e compilare i pkg io devo impostare /mnt/gentoo32/mnt/nfs come directory dello share, chroottarmi dentro, esportare la root, e iniziare l'emerge, giusto? Tutto questo procedimento, però, non è da poco. mi spiego:

ne vale davvero tutto questo per un pc che bene o male ha già quasi tutto installato e che comunque potrebbe a breve disporre di un upgrade di ram?

Ad ogni modo grazie per i consigli!   :Wink: 

----------

## Scen

 *^Stefano^ wrote:*   

> Ho letto la guida al chroot32bit, davvero ben fatta. Quello che non mi è chiaro però è questo: una volta che io ho completato tutti i passaggi della guida mi ritrovo con due sistemi sul pc, giusto? il mio sistema, e un sistema base a 32bit in /mnt/gentoo32.
> 
> quindi poi, per montare lo share nfs del celeron e compilare i pkg io devo impostare /mnt/gentoo32/mnt/nfs come directory dello share, chroottarmi dentro, esportare la root, e iniziare l'emerge, giusto?

 

Giusto  :Cool: 

 *^Stefano^ wrote:*   

> Tutto questo procedimento, però, non è da poco. mi spiego:
> 
> ne vale davvero tutto questo per un pc che bene o male ha già quasi tutto installato e che comunque potrebbe a breve disporre di un upgrade di ram?

 

Dipende da te: se non vuoi "stressare" il portatile questa è una delle poche vie per installare/aggiornare, tieni presente che l'aggiunta di RAM è utile fino ad un certo punto ai fini della compilazione, in quanto ci sono anche i fattori potenza CPU+velocità disco fisso.

----------

## ^Stefano^

 *Scen wrote:*   

> 
> 
> Dipende da te: se non vuoi "stressare" il portatile questa è una delle poche vie per installare/aggiornare, tieni presente che l'aggiunta di RAM è utile fino ad un certo punto ai fini della compilazione, in quanto ci sono anche i fattori potenza CPU+velocità disco fisso.

 

bhe il disco fisso è un vecchio western digital da 10gb e il pc è un fisso con un celeron 700mhz (P3). diciamo che la ram fa molto collo di bottiglia perchè sono solo 128mb. So che non è tutto, ma un aggiunta di altri 128 aiuterebbe molto.

----------

## kueitao

Mi pare d'aver capito che vuoi compilare con un GCC configurato e a sua volta compilato su e per una macchina AMD a 64bit dei programmi che vorresti far funzionare su architetture diverse (magari a 32bit)... E' così?

Se è così, sappi che un "normale" GCC e l'intera "toolchain" così come te la ritrovi installata NON PUO' FARLO.

Intendo che, per fare ciò, il compilatore dovrebbe essere configurato ed installato in un modo specifico per funzionare da "cross-compiler" e non credo che Gentoo distribuisca versioni di GCC abilitate con questa funzionalità aggiuntiva. Allo stesso modo anche altri strumenti, cioè l'intera "toolchain" con binutils, assembler e libC deve essere preparata per fare questo lavoro.

Se vuoi meglio capire di cosa si tratta e come realizzare questa cosa leggiti questi documenti:

http://en.wikipedia.org/wiki/Cross_compiler

http://gcc.gnu.org/wiki/Building_Cross_Toolchains_with_gcc

Buon divertimento.

fabio de francesco

----------

