# [TOOL] Gufo: Organizzare la ricompilazione con nuove cflags

## neon

Gufo: Organizzare la ricompilazione con nuove cflags

Gufo e' uno script Python che ricompila i pacchetti con CFLAGS differenti da quelle in uso nel sistema.

E' utile nel caso in cui per risparmiare tempo durante l'installazione si parte da stage3 e successivamente si vogliono ricompilare i pacchetti con le proprie ottimizzazioni o in generale in tutti i casi in cui si vogliono cambiare le CFLAGS in maniera graduale (senza ricorrere ad un emerge -e world)

--> Progetto su SourceForge

Changelog:

mar ago  9 2005

- Dopo piu' di un anno di inattivita il Gufo ritorna.

  Cambia l'approccio, la vecchia versione era afflitta

  da un fastidiosissimo bug che bloccava l'esecuzione

  di dialog. La nuova versione presente sul sito: gufo-kiss

  ovvero gufo (keep it super simple) e' una versione snellita

  delle precedenti (ovvero niente dialog e niente opzioni, semplice no?)

  che anticipa la 0.3. Quest'ultima sara' finita quando avro' il tempo e la voglia

  di cimentarmi nella risoluzione del seguente intoppo

https://forums.gentoo.org/viewtopic-t-364677.html

gio mag 13 2004:

- Nuova release (0.2), il codice per la ricerca dei pacchetti e'

  stato riscritto completamente, le librerie ora sono scritte

  interamente in python (prima utilizzavano grep). Aggiunta ricerca

  inversa delle flag e da ora se il programma viene avviato senza

  specificare l'opzione -c sono lette automaticamente le CFLAGS in

  /etc/make.conf. Manca ancora un file di config per i pacchetti

  da non ricompilare (tipo package.mask per intenderci). La

  ricompilazione dei masked dovrebbe funzionare se li specificate

  in /etc/portage/package.keywords (come consigliato dalla guida

  del portage)

ven gen 30 2004:

- Nuova versione semplificata di gufo basata unicamente su dialog

gio gen 29 2004:

- Nuova interfaccia per la selezione dei pacchetti basata su dialog

dom nov 23 2003:

- Corretto MACRO-BUG sulla ricompilazione dei pacchetti (avevo lasciato una riga della versione di prova)

- Aggiunta opzione -a (per compilare i tutti pacchetti senza doverli selezionare)

mar nov 11 2003:

- L'output ï¿½ ordinato e colorato.

----------

## neon

Il post che diede inizio al tutto

L'altro giorno, dopo aver cambiato la mia variabile CFLAGS ho pensato bene di ricompilare tutto il sistema con

```
# emerge -e world
```

Il processo si ï¿½ bloccato qualche volta, ma risolti i problemi bastava dare un

```
# emerge --resume
```

e tutto continuava liscio. Tutto ha continuato ad andare liscio fino a quando una libreria (non ricordo quale) non si ï¿½ bloccata, l'unico modo per far andare la compilazione era aggiornarla. ODDIO... avevo appena perso il resume dei 150 ebuild appena compilati, che fare? ricominciare da capo? No, inventare il Gufo  :Cool: 

Storie a parte ho scritto uno scriptino in python, per imparare il linguaggio, che effettua una ricerca per flags dei pacchetti e permette di ricompilare quelli scelti. Lo script lo trovate qui.

Fatemi sapere se ci sono bugs o se vi interesserebbe qualche funzione in particolare, ah sono ben accetti anche aiuti nella scrittura del codice (che per ora fa quasi pena)  :Wink: 

Bye bye Gecozzi... vado a nanna...

----------

## teknux

dai anche il tempo di leggere il post, a me è caduto l'occhio solo ora  :Razz: 

guardo cos'è, come funziona e poi ti dico  :Wink: 

saluti,

tek

----------

## shev

 *neon_it wrote:*   

> 
> 
> A quanto ho capito questo progetto non interessa a molti 

 

Tranquillo, ogni progetto dei gechi (e non solo) è interessante. Purtroppo ho poco tempo in questi giorni (non che di solito ne abbia molto, vero Teknux?  :Razz:  ) quindi non so quando riuscirò a dargli un'occhiata (ho almeno un paio di progetti con/di Tek da vedere, fa un po' tu  :Very Happy:  ). In ogni caso grazie anche a te per il tuo operato, spero di potrene godere presto  :Wink: 

----------

## Diggs

Sono contento che te abbia creato tale tool  :Wink: .

----------

## neon

 *teknux wrote:*   

> dai anche il tempo di leggere il post, a me è caduto l'occhio solo ora

 

 :Razz: 

 *Shev wrote:*   

> Tranquillo, ogni progetto dei gechi (e non solo) è interessante.

 

^_^

 *leonardo wrote:*   

> Sono contento che te abbia creato tale tool .

 

Sapete com'è un centinaio di letture e nemmeno una risposta tipo: "Guarda che un tool simile esiste già" oppure "non funziona una mazza". Mi ero insospettito.

Cmq mi sto sbattendo con queste benedette use e soprattutto sto cercando un modo per far si che una ricerca del tipo "-use -cflag" mostri il risultato delle ricerche concatenate (non so se sono chiaro, non mi capisce mai nessuno quando parlo, no non sono un vittimista, non sono nemmeno paranoico, mmm ok la smetto  :Mad: )

----------

## cerri

Utile, non c'e' che dire  :Smile: 

----------

## fedeliallalinea

Molto bello, non e' la prima volta che anchee a me emerge -e mi si blocca...

----------

## cerri

Dove posso aprire un bug report?  :Smile: 

----------

## neon

Sto aspettando che accettino il progetto su sourceforge. Questione di qualche giorno credo (Dicono entro Lunedì o Martedì)

Spero che a nessuno dia fastidio se nel frattempo per arrangiare lo posti qui. (spero)

----------

## Alakhai

porc proprio il programma che cercavo

uno smanettone come me non può farne a meno  :Very Happy: 

ok mo appena riesco a far partire tutto lo provo  :Smile: 

per il momento prego e smadonno

----------

## Rotterdam

ancora nn ho provato lo scriptino di neon ma volevo chiedervi una cosa: se nel make.conf ho impostato 

```
 #ACCEPT_KEYWORDS="~arch"

 
```

 e volessi decommentare la riga e mettere 

```
 #ACCEPT_KEYWORDS="~x86"  
```

 per ricompilare tutto il sistema..cosa dovrei fare? enjoy gentoo world  :Very Happy: 

----------

## codadilupo

 *Rotterdam wrote:*   

> per ricompilare tutto il sistema..cosa dovrei fare? enjoy gentoo world 

 

per quello, ti basta:

```
#ACCEPT_KEYWORDS=~x86" emerge -UD world
```

ma non é proprio consigliabile. Un conto é usare versioni dev per i programmi, un conto é avere l'intero sistema base, instabile/di-sviluppo   :Very Happy: 

Coda

----------

## Peach

 *codadilupo wrote:*   

> ma non é proprio consigliabile. Un conto é usare versioni dev per i programmi, un conto é avere l'intero sistema base, instabile/di-sviluppo  
> 
> Coda

 

a proposito vorrei ricordare i casini successi recentemente con aggiornamenti un po' troppo aggiornati di baselayout!!!

----------

## Benve

 *codadilupo wrote:*   

> 
> 
> ma non é proprio consigliabile. Un conto é usare versioni dev per i programmi, un conto é avere l'intero sistema base, instabile/di-sviluppo  
> 
> Coda

 

Concordo pienamente

----------

## neon

 *codadilupo wrote:*   

> Un conto é usare versioni dev per i programmi, un conto é avere l'intero sistema base, instabile/di-sviluppo  

 

Esatto, infatti vi consiglio di usare la patch indicata in questo post, in modo da aggiornare solo i pacchetti voluti  :Wink:  (mi sono sbattuto un casino per trovarla)

----------

## Gandalf98

A volte è anche questione di fortuna, penso. Io ho molti pacchetti di sistema ~x86, e non ho mai avuto un problema!!!

```
emerge -up world

These are the packages that I would merge, in order:

Calculating world dependencies ...done!

[ebuild     UD] sys-libs/readline-4.3-r4 [4.3-r5]

[ebuild     UD] sys-devel/libperl-5.8.0 [5.8.1]

[ebuild     UD] dev-lang/perl-5.8.0-r12 [5.8.1-r2]

[ebuild     UD] sys-devel/binutils-2.14.90.0.6-r6 [2.14.90.0.7]

[ebuild     UD] sys-devel/gcc-3.2.3-r2 [3.3.2-r2]

[ebuild     UD] sys-libs/glibc-2.3.2-r3 [2.3.2-r8]

[ebuild     UD] sys-devel/m4-1.4 [1.4-r1]

[ebuild     UD] sys-devel/autoconf-2.57-r1 [2.58]

[ebuild     UD] sys-devel/automake-1.7.5-r2 [1.7.8]

[ebuild     UD] media-libs/alsa-lib-0.9.2 [0.9.8]

[ebuild     UD] media-libs/xine-lib-1_beta12 [1_rc2]

[ebuild     UD] sys-apps/man-1.5l-r6 [1.5m]

[ebuild     UD] dev-libs/openssl-0.9.6k [0.9.6l]

[ebuild     UD] net-misc/wget-1.9 [1.9-r1]

[ebuild     UD] dev-libs/pth-1.4.0 [1.4.1]

[ebuild     UD] sys-devel/bison-1.35 [1.875]

[ebuild     UD] sys-apps/findutils-4.1.7-r5 [4.1.20-r1]

```

----------

## codadilupo

 *Peach wrote:*   

>  *codadilupo wrote:*   ma non é proprio consigliabile. Un conto é usare versioni dev per i programmi, un conto é avere l'intero sistema base, instabile/di-sviluppo    
> 
> a proposito vorrei ricordare i casini successi recentemente con aggiornamenti un po' troppo aggiornati di baselayout!!!

 

 *Benve wrote:*   

> Concordo pienamente

 

uheh, sto diventando bravo: due certificazioni GGAU* approved su due   :Cool: 

Coda

*Gechi, Gentoo Advanced Users

----------

## neon

 *cerri wrote:*   

> Dove posso aprire un bug report? 

 

https://sourceforge.net/projects/gfr/  :Smile:   :Smile:   :Smile: 

----------

## leon_73

Ciao,

inizio con il complimentarmi per il tuo prg  :Smile: 

... e poi ti aggiungo i miei 2 eurocents:

nei Changelog Penso sia meglio scriverli dal piu' recente al piu' vecchio.

Leo

----------

## neon

 *leon_73 wrote:*   

> nei Changelog Penso sia meglio scriverli dal piu' recente al piu' vecchio.

 

Vero  :Very Happy:  (detto fatto)

Sai che ti dico, mi hai risvegliato la developmania. Il progetto stagna su sourceforge da un bel pò.

Ho in mente di usare dialog per effettuare la selezione dei pacchetti  :Twisted Evil: 

Mi metto subito al lavoro...

----------

## leon_73

 *neon_it wrote:*   

> Sai che ti dico, mi hai risvegliato la developmania.

 

AAAARRRGGGHHH!!! HO CREATO UN MOSTROOO  :Twisted Evil:   :Surprised:   :Shocked:   :Twisted Evil: 

 :Wink: 

Leo

----------

## mrgamer

mitico! quando lo vedro nel portage?  :Very Happy: 

----------

## neon

 *mrgamer wrote:*   

> mitico! quando lo vedro nel portage? 

 

Sono già abbastanza impegnato a capire come funziona l'amministrazione dei progetti su sourceforge.

Quando il progetto sarà più maturo avremo sicuramente un ebuild.

per ora: TESTATE!!! la new 0.1.4  :Twisted Evil:   :Twisted Evil:   :Twisted Evil: 

----------

## IgaRyu

Scusate l'OT ma vorrei sapere che perche lenoardo nella sua signature punta al mio server ???

 *Quote:*   

>  The things I see
> 
> IRCNET NICK: proudhomm on IRCNET, AZZURRA.ORG and FREENODE.ORG
> 
> WEB: http://gentoo.no-ip.biz

 

Joe

----------

## cerri

Dimenticavo: TIP Award!  :Very Happy: 

----------

## neon

 *cerri wrote:*   

> Dimenticavo: TIP Award! 

 

Many thanks  :Surprised: 

Allora, ho postato anche sul forum internazionale e proprio oggi la_Nce, un utente del forum, mi ha mandato una patch che evita la ricompilazione dei pacchetti kernel e permette la compilazione degli ~x86.  :Cool: 

La sto ancora analizzando ma sembra molto interessante...

Dato che il codice di Gufo 0.1 non mi convice più molto (ho stravolto la struttura per creare l'interfaccia dialog) credo che scriverò uno 0.2 per facilitare gli aggiornamenti e l'inserimento delle features della patch. Non so quando avrò di nuovo tutto questo tempo da dedicare al progetto (l'influenza è passata, ci vorrebbe di nuovo la febbre  :Wink: ). Nel frattempo ho pubblicato su SF una versione semplificata che utilizza solo dialog (38 righe contro le 99 del gufo 0.1.4)

----------

## neon

Allora, le features che vorrei implementare nella nuova versione sono:

se lo script è eseguito senza parametri viene letto il contenuto del make.conf e vengono cercati tutti i pacchetti compilati con cflags diverse da quelle trovate nel file

nuova opzione -v per effettuare la ricerca inversa

file di configurazione in cui specificare i pacchetti che non devono essere considerati durante una ricerca (mplayer, kernel, ecc)

possibilità di compilare anche pacchetti ~x86 (~ppc?)

ricerca delle useflags (magari non proprio nella prossima versione)

Richieste?

----------

## shev

 *neon_it wrote:*   

> [*]possibilità di compilare anche pacchetti ~x86 (~ppc?)

 

Togli il punto di domanda dopo ~ppc, la mia unica richiesta  :Very Happy: 

----------

## anborn

 *Shev wrote:*   

> Togli il punto di domanda dopo ~ppc, la mia unica richiesta

 

Mac addicted, eh?  :Very Happy: 

Comunque, Neon.. figata!!  :Wink: 

Anb

----------

## neon

 *Shev wrote:*   

> Togli il punto di domanda dopo ~ppc, la mia unica richiesta 

 

Io il punto lo tolgo, ma tu vedi di betatestare appena mando i primi script  :Evil or Very Mad: 

----------

## shev

 *neon_it wrote:*   

> Io il punto lo tolgo, ma tu vedi di betatestare appena mando i primi script 

 

Su ppc? E' ovvio, per chi mi hai preso  :Very Happy: 

/me che deve ancora testare la storia dei moduli di motaboy (domani ho il penultimo esame, poi qualche giorno libero per smanettare, abbi pazienza  :Wink:  )

----------

## t0mcat

bella idea davvero, ma ho un problema:

ho scompattato il pacchetto dentro la mia opt (che è un symlink a /usr/opt ) ed eseguito ./gufo-sim.py , e dopo aver scelto i pacchetti da recompilare mi da st'errore:

Traceback (most recent call last):

  File "./gufo-sim.py", line 34, in ?

    list2 = d.checklist("Select packages to recompile", list=list)

  File "/usr/opt/gufo-simple/dialog.py", line 190, in checklist

    indexList  = map(lambda x: int(x[1:-1]), split(output))

  File "/usr/opt/gufo-simple/dialog.py", line 190, in <lambda>

    indexList  = map(lambda x: int(x[1:-1]), split(output))

ValueError: invalid literal for int():

una manina?

cmq ho visto che su sourceforge nn c'è uno straccio di documentazione, che per i niubbi come me è una gran brutta cosa  :Sad: 

----------

## neon

 *t0mcat wrote:*   

> bella idea davvero

 

tnx, ne approfitto per darti il benvenuto concittadino  :Wink: 

 *t0mcat wrote:*   

> ma ho un problema: [...] una manina?

 

Purtoppo utilizzo una libreria esterna per l'accesso a dialog e gli unici test che posso fare sono sulla mia macchina (su cui pare funzionare), se hai modo di mandarmi un pm (messaggio privato in forum) con un tuo contatto (icq o msn) possiamo vedere di risolvere il problema...

 *t0mcat wrote:*   

> cmq ho visto che su sourceforge nn c'è uno straccio di documentazione, che per i niubbi come me è una gran brutta cosa 

 

Già solo che il progetto si sta ancora evolvendo e mi viene difficile fare tutto da solo (prog, test, doc, ecc, ecc). Chiedo venia  :Rolling Eyes: 

Intanto vedo molti interessati, ma uno $*#*% che mi dia una mano? So che ci sono molti programmatori Python in forum  :Twisted Evil:  vi devo venire a stanare?

----------

## ^zanDarK

Hola! neon_it, io avrei scritto un piccolo script simile al tuo soltanto che è per le USE invece delle CFLAGS.

In pratica mi sono trovato a dover aggiungere una USE, e siccome nn avevo voglia di ricompilare tutti i pacchetti ma solo quelli necessari, ho scritto questo script. 

Se vuoi e lo ritieni necessario lo possiamo integrare con il tuo. 

Problema: è scritto in perl. Cmq penso che per tradurlo in python nn ci voglia tanto. 

ciao

Lorenzo

----------

## Neomubumba

Ciao !!!

scusate per l'ignoranza ma come si fa ad usare questo script?

Non ne so molto di programmazione e mi sareste di grande aiuto se mi spiegaste come usarlo.

Grazie & poi vi farò sapere se mi funzia tutto ok!!! Grazie ancora

----------

## neon

Nuova versione:

- Supporto per la ricerca inversa

- Lettura di /etc/make.conf

Manca solo il file di config stle package.mask per i pacchetti da non compilare e siamo apposto. Ho deciso di rinunciare alla funzione per i masked (con ~) perchè configurando bene portage non danno problemi (vedi /etc/portage/package.keywords). Spero vi piaccia, fatevela bastare per ora perchè inizio a studiare per gli esami di stato e non posso dedicare tempo al gufetto fino a fine estate (un viaggio per le vacanze me lo concederete no?)

Progetto

P.S. grazie a Lorenz B. e Nicola F. per il codice che mi hanno mandato (purtroppo non l'ho ancora letto  :Rolling Eyes: )

x Neomubumba: (e gli altri con problemi) Purtroppo non esiste documentazione (non posso fare mica tutto io, e poi si sa i coder odiano scrivere doc), se hai problemi anche con la nuova vers puoi chiedere qui.

----------

## FonderiaDigitale

aaaah finalmente la ricerca inversa  :Smile: 

appena posso lo provo e ti so dire

----------

## FonderiaDigitale

allora:

- dovresti bindare sia -h che --help

- dovrebbe skippare cose evidenti come linux-headers:

```
Goliath gufo-0.2 # ./gufo.py -v -c -fstack-protector|grep \*|grep headers

*  sys-kernel/linux-headers-2.4.23

*  sys-kernel/linux-headers-2.6.3-r1
```

- manca una opzione --compact, che listi i pacchetti senza * e colori e cflags, da usare ad esempio con altri script per passargli la lista

questo e' quanto  :Smile: 

buon lavoro

----------

## neon

 *FonderiaDigitale wrote:*   

> - dovresti bindare sia -h che --help
> 
> - dovrebbe skippare cose evidenti come linux-headers:
> 
> - manca una opzione --compact, che listi i pacchetti senza * e colori e cflags, da usare ad esempio con altri script per passargli la lista

 

Zi badrone  :Razz: 

-h --help e --compact li sistemo subito, per quanto riguarda i pacchetti da non ricompilare ho già in mente di controllare l'inherit dell'ebuild in modo da eliminare quelli che usano cflags prorie (vedi quelli in eclass come kernel o flag-o-matic) e dato che è un lavorone lo farò dopo, quando implementero anche un file di config per gli ebuild da "saltare"  :Wink: 

P.S. proprio per i pacchetti sys-kernel/ in quella versione c'è un commento che ho dimenticato =)

```
#if "sys-kernel/" in ebuild["NAME"]:

#       print "pippo"
```

 *FonderiaDigitale wrote:*   

> buon lavoro

 

anche a te  :Wink: 

----------

## neon

Allora, sul forum internazionale mi hanno segnalato un nuovo problemino...

Prefazione: Il funzionamento di gufo è molto semplice, praticamente controlla i log di emerge e confronta le cflags.

Ora, cosa succede se mettiamo caso io installo un pacchetto con le mie vecchie cflags, poi dopo un bel pò di tempo decido di cambiarle, ma il pacchetto in questione è ormai vecchio e non è più incluso in portage. In questo caso gufo cerca comunque di ricompilare il pacchetto in oggetto, dando ovviamente errore  :Wink: 

Dubbio che mi sorge... se gufo cerca di compilarmi tutte le vecchie versioni del pacchetto, che ormai ho aggiornato da tempo ma che cmq avevo ricompilato con le vecchie cflags... beh credo proprio che si comporti così. Se qualcuno ha notato che dopo una ricompilazione con gufo i pacchetti in questione venivano aggiornati da emerge -u world mi informi please.

Workaround: La nuova versione di gufo (0.2.2) include una nuova opzione -g che compila il pacchetto generico (quindi senza specificare una particolare versione)...

By the way this is not a bug, it's a feature  :Wink: 

Ultima cosa, cerco documentazione sulla libreria portage di emerge, se qualcuno sapesse dirmi dove posso trovare info. (lo so dovrei chiedere nelle ml di gentoo-dev, ma sono pigro) o acora meglio l'avesse utilizzata è pregato di contattarmi per aiutarmi a far diventare gufo il più possibile integrato con emerge  :Razz: 

----------

## neon

Dopo TAAAANTO Tempo in cantina ho tirato fuori i sorgenti...

Ho modificato il gufo 0.2.2 in modo da non listare i pacchetti che usano flag-o-matic* (come ad esempio gcc ed altri pacchetti delicati) avrei bisogno di qualche tester di questa versione dev (importante controllare che i pacchetti filtrati siano solo quelli che non permettono di modificare le CFLAGS

Se qualcuno fosse a conoscenza di altri inherit interessanti (pensavo di filtrare anche kernel) mi faccia sapere

Grazie del supporto  :Wink: 

QUI trovate il gufo in questione.

* Per chi non lo sapesse flag-o-matic è una eclass che filtra le CFLAGS di alcuni ebuilds

----------

## xchris

```

xchris@lyra xchris $ su

Password:

root@lyra xchris # ./gufodev.py

Traceback (most recent call last):

  File "./gufodev.py", line 164, in ?

    getOpt()

  File "./gufodev.py", line 65, in getOpt

    options["CFLAGS"] = getMakeFlags()

  File "./gufodev.py", line 111, in getMakeFlags

    result = result.group()[9:-1]

AttributeError: 'NoneType' object has no attribute 'group'

```

dai che il gufo e' proprio bello e mi serve  :Laughing:   :Wink: 

ciao

----------

## neon

Quell'errore vuol dire che non hai delle CFLAGS settate in make.conf (o cmq che gufo non riesce a leggerle). Io l'ho riprodotto commentando le mie. Dato che gufo cerca lì se non vengono passate da linea di comando. Per passarle come argomenti usa:

```
# ./gufodev.py -C O3
```

Fammi sapere, al massimo aggiungo un segnale di errore tipo: "Error: you don't have CFLAGS in your make.conf. Use -C"

----------

## xchris

e' vero...

da poco ho commentato CFLAGS per portare il sistema gradualmente a i686..

riprovero'  :Smile: 

grazie

EDIT:potresti leggere da make.profile se non sono settate.

----------

## neon

Allora? funziona? trova pacchetti strani? ne omette alcuni? posso aggiornare il codice su sourceforge? (i need some testers)  :Wink: 

----------

## xchris

prometto che oggi testo..

abbi un po' di pazienza  :Smile: 

Sto migrando un Athlon XP a i686...

ti faccio sapere..

ciao

----------

## Manuelixm

Io lo stavo provando, ho riscontrato uno strano comportamento con i kernel, ossia mi scarica tutti i kernel anche i 2.4.x e me li compila.

Il fatto è che io ho sempre usato la versione 2.6.x, bo, ora ho interrotto e ho dato un bel emerge -e world.

Ho usato gufo.py -a .

----------

## xchris

questo perche' hai ancora dei kernel vecchi installati credo...

controlla  :Smile: 

ciao

----------

## Manuelixm

Scusa xchris, sono tonot, non ho capito. Io non ho installato la versione 2.4.x, ho installato solo delle versioni del 2.6.x. Ora verifico.

----------

## Manuelixm

Ho rimosso e unmergiato i vecchi kernel che comunque erano della versione 2.6.x seguendo un post di fedeliallalinea. Appena finisce di compilare riprovo col gufo, non so se mi restituirà qualcosa, penso di no.

----------

## xchris

prova a postare:

```

find /var/db/pkg/sys-kernel/ | grep ".ebuild"

```

ciao

EDIT:non avevo letto il tuo ultimo post

----------

## Manuelixm

Figurati, ho solo da imparare, comunque eccoti:

```

$ find /var/db/pkg/sys-kernel/ | grep ".ebuild"

/var/db/pkg/sys-kernel/gentoo-dev-sources-2.6.9-r1/gentoo-dev-sources-2.6.9-r1.ebuild

/var/db/pkg/sys-kernel/gentoo-dev-sources-2.6.8-r10/gentoo-dev-sources-2.6.8-r10.ebuild

/var/db/pkg/sys-kernel/linux-headers-2.4.21-r1/linux-headers-2.4.21-r1.ebuild

```

----------

## xchris

sembra ok...

prova poi il gufo.

ho usato il nuovo gufo ed ecco le impressioni.

Non ho avuto problemi particolari...

ma ti lascio cmq le mie impressioni:

- dovrebbe leggere CFLAGS non solo da make.conf

(se vuoi tagliate la testa al toro prendi le info da emerge --info cosi' non devi preoccuparti dei cascade profile) o per lo meno dovrebbe intercettare l'errore.

- se lanciato con -g in visualizzazione non funziona. (mostra le versioni)

- io non lo lancio mai in automatico perche' preferisco avere + controllo e mergiare quello che dico io.Farebbe comodo --no-color.

Dovrebbe avvisare se la versione installata non e' + presente in portage.

(magari switchare sulla versione nuova)

Su sistemi vecchi in automatico non funziona bene per le versioni slotted in particolare. (se uso -g mi ricompila solo l'ultima...)

A parte queste critiche (del tutto personali e non condivisibili) reputo il gufo uno strumento essenziale! Grazie!

ciao

EDIT:ormai con gufo,revdep-rebuild,usetool,unclepine sono in grado di sistemare completamente un sistema e di snellirlo!! OTTIMO  :Very Happy: 

----------

## neon

 *Manuelixm wrote:*   

> Io lo stavo provando, ho riscontrato uno strano comportamento con i kernel, ossia mi scarica tutti i kernel anche i 2.4.x e me li compila.

 

Si è un bug che ho trovato tempo fa. Ho aggiunto l'opzione -g proprio per questo prova con quella...

 *xchris wrote:*   

> questo perche' hai ancora dei kernel vecchi installati credo...
> 
> controlla Smile
> 
> ciao

 

Purtroppo è dovuto al fatto che se sono stati installati si trovano nel db anche dopo essere stati rimossi. Fare un ulteriore controllo sui pacchetti in db ma non installati renderebbe il programma moooolto lento. Per ora consiglio di provare -g

 *xchris wrote:*   

> - se lanciato con -g in visualizzazione non funziona. (mostra le versioni)

 

Azz, vero. Correggo subito, il fatto è che li compila senza versione ma li mostra con. Che sbadato  :Wink: 

 *xchris wrote:*   

> Farebbe comodo --no-color

 

Detto fatto. Nella prossima versione ci sarà anche questo.

 *xchris wrote:*   

> Su sistemi vecchi in automatico non funziona bene per le versioni slotted in particolare. (se uso -g mi ricompila solo l'ultima...)

 

Non ho ancora inserito alcun controllo sugli slot e per ora non è in programma. Dopo aver corretto alcune cosette magari =)

 *xchris wrote:*   

> A parte queste critiche (del tutto personali e non condivisibili) reputo il gufo uno strumento essenziale! Grazie!

 

Grazie a te, il tuo è stato uno dei report più dettagliati che ho ricevuto. (insieme a quelli di fonderia)  :Wink:  è solo grazie a questi consigli che il gufo non è solo uno scriptino del mio sistema.

PS: Le statistiche di sf indicando che al momento siamo a 351 download, considerando che ieri il gufo ha fatto il compleanno  :Wink:  è quasi un download al giorno  :Cool: 

----------

## mrfree

Sto provando gufo ma ho notato qualche problema (sto usando la 0.2.2)...

```
./gufo.py --cflags="-malign-double"
```

Ritorna la lista dei pacchetti compilati con il flag -malign-double

```
./gufo.py --cflags="-malign-double" --recompile
```

Invece non da segni di vita rimane a 

```
Please wait a moment, scanning database...
```

 anche con top sembra che non ci sia nessun processo in running legato a gufo

Non conosco python ma credo che il problema sia nella selectOutput()

Edit: utilizzando l'opzione auto funziona!

----------

## fedeliallalinea

Non e' che la linea deve essere

```
./gufo.py --cflags="-malign-double" --recompile
```

----------

## mrfree

Si, scusa ho sbagliato a scrivere nel post   :Wink: 

Adesso l'ho corretto

----------

## mrfree

Un'altra cosetta IMHO utile, potrebbe essere un'opzione che permette di skippare determinati pacchetti.

Ad esempio nel mio caso devo compilare prima le glibc poi eseguire il localedef opportuno e solo in seguito avviare l'emerge tramite gufo, ovviamente non ho intenzione di riemergere glibc altrimenti il localedef sarebbe vanificato

Insomma un --no-pkg "glibc" mi farebbe comodo   :Wink: 

----------

## neon

 *mrfree wrote:*   

> Un'altra cosetta IMHO utile, potrebbe essere un'opzione che permette di skippare determinati pacchetti.
> 
> [...]
> 
> Insomma un --no-pkg "glibc" mi farebbe comodo  

 

E' in programma un file di config tipo gufo.mask in cui mettere i pacchetti (stile categoria/pacchetto-versione) ma ultimamente lo sviluppo è fermo.

Per quanto riguarda il problema, appena arrivo a casa controllo  :Wink: 

edit: dimenticavo. Posta 

```
# python -V
```

e

```
# dialog --version
```

----------

## mrfree

 *Quote:*   

> E' in programma un file di config tipo gufo.mask in cui mettere i pacchetti (stile categoria/pacchetto-versione)

 

Ottimo  :Wink: 

```
# python -V

Python 2.3.4

# dialog --version

Version: 1.0-20040731
```

----------

## neon

 *mrfree wrote:*   

> 
> 
> ```
> # dialog --version
> 
> ...

 

E' lui... non so cosa abbiano cambiato ma con questa versione non funziona.

Nemmeno con la 0.9_beta20031207 funziona. A me funzionava perchè non avevo ancora aggiornato quella versione. L'unica soluzione è scaricare la 0.9_beta20030308-r1 metterla in PORTDIR_OVERLAY e dare:

```
emerge =dialog-0.9_beta20030308-r1
```

Qualcuno ha informazioni in proposito??? Lo script chiama dialog e poi si blocca aspettando l'output...

----------

## j4ck

Salve a tutti, come avevo già accennato a neon_it ho fatto una versione grafica del gufo http://mio.discoremoto.virgilio.it/j4ck/gufoG.py .

 Funziona come il gufo originale ha solo un paio di opzioni in più, --tkinter per avviare l' interfaccia grafica e -s o --saved per ricompilare i pacchetti salvati in un file.

 Per sicurezza, ho commentato i comandi per l' emerge

```

def emerge():

     global selected, options

     print selected

#   out = ""

#   for i in selected:

#            if options["GENERIC"]:

#                      out += " " + pkgsplit(i["NAME"])[0]

#            else:

#                      out += "=" + i["NAME"] + " "

#    if out:

#             os.system("emerge --oneshot " + out)

```

Ciao,

 j4ck

P.S. Richiede che python sia compilato con la USE "tcltk".

----------

## codarin

Ciao a tutti,

ho aggiunto due opzioni a Gufo (senza GUI) relative a:

--fetchonly che personalmente mi è utile quando (disponendo solo temporanemante di banda larga) voglio fare solo il download di tutti i pacchetti occorrenti per la gufata e compilarli in un secondo momento

--pretend per sapere quanti pacchetti gufo mi vuole ricompilare... a me sono risultati utili... non sono un pythonaro... quindi li ho aggiunti alla meno peggio...

```

#! /usr/bin/env python

#

#    This program is free software; you can redistribute it and/or modify

#    it under the terms of the GNU General Public License as published by

#    the Free Software Foundation; either version 2 of the License, or

#    (at your option) any later version.

#

#    This program is distributed in the hope that it will be useful,

#    but WITHOUT ANY WARRANTY; without even the implied warranty of

#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

#    GNU General Public License for more details.

#

#    You should have received a copy of the GNU General Public License

#    along with this program; if not, write to the Free Software

#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

#

# Gufo 0.2 Copyright 2003 Luca Marra <annoiato@aliceposta.it>

#

# Thanks to: Lorenz B. and Nicola F.

import os.path, re, sys, getopt, commands

from output import bold, green, darkgreen

from portage import pkgsplit

dir = "/var/db/pkg/"

options = {"CFLAGS":"", "COMPACT":False, "INVERT":False, "COMP":False, "AUTO":False, "GENERIC":False, "FETCHONLY":False, "PRETEND":False}

ebuilds = []

selected = []

def printUsage():

 print "usage: ./gufo.py [options]"

 print """

 -h, --help  this message

 -C, --cflags=cflags cflags to search

 -v, --invert-match invert the sense of matching

 -r, --recompile  recompiles selected packages

 -a, --auto  auto (impilies recompile)

 -g, --generic  compiles the generic package

    (not the specific version)

 -c, --compact  compact output

 --fetchonly  fetches only packages

 --pretend  executes pretend to evaluate the number of packages to be compiled

 """  

def getOpt():

 global options

 opts, args = getopt.getopt(sys.argv[1:], "harvcgC:", ["help", "auto", "recompile", "invert-match", "cflags=", "compact", "generic", "fetchonly", "pretend"])

 for o, a in opts:

  if o == "-h" or o == "--help":

   printUsage()

   sys.exit()

  if o == "-r" or o == "--recompile":

   options["COMP"] = True

  if o == "-a" or o == "--auto":

   options["COMP"] = True

   options["AUTO"] = True

  if o == "-v" or o == "--invert-match":

   options["INVERT"] = True

  if o == "-C" or o == "--cflags":

   options["CFLAGS"] = a

  if o == "-c" or o == "--compact":

   options["COMPACT"] = True

  if o == "-g" or o == "--generic":

   options["GENERIC"] = True

  if o == "-f" or o == "--fetchonly":

   options["FETCHONLY"] = True

  if o == "-p" or o == "--pretend":

   options["PRETEND"] = True

 if options["CFLAGS"] == "":

  options["INVERT"] = True

  options["CFLAGS"] = getMakeFlags()

 return

def find(string, sub):

 p = re.compile(sub)

 result = p.findall(string)

 return result

def grep(file, string):

 global ebuilds, options

 f = open(file)

 cflags = f.read()

 f.close

 result = find(cflags, string)

 name = file[12:-7]

 cflags = cflags[:-1]

 ebuild = {"NAME":name, "CFLAGS":cflags}

 if result:

  if options["INVERT"] == False:

   ebuilds.append(ebuild)

 else:

  if options["INVERT"]:

   ebuilds.append(ebuild)

def getFiles(arg, dirname, files):

 for file in files:

  if file == "CFLAGS":

   grep(dirname + "/" + file, arg)

def getMakeFlags():

 f = open("/etc/make.conf")

 mconf = f.read()

 f.close

 result = re.compile("\nCFLAGS=.+").search(mconf)

 result = result.group()[9:-1]

 return result

def doSomething():

 global ebuilds, selected, options

 if options["COMP"]:

  if options["AUTO"]:

   selected = ebuilds

   emerge()

  else:

   pack = selectOutput()

   emerge()

 else:

  printOutput(ebuilds, options["COMPACT"])

def selectOutput():

 global ebuilds, selected

 out = ""

 for i in ebuilds:

  out += "\"" + i["NAME"] + "\" \"" + i["CFLAGS"] + "\" off "

 cmd = "dialog --clear --separate-output --title \"Gufo Selector\" \

 --checklist \"Select packages to recompile\" 0 0 0 " + out

 pack = commands.getoutput(cmd)

 if pack:

  pack = pack.split("\n")

  for i in pack:

   ebuild = {"NAME":i}

   selected.append(ebuild)

  return 1

 return 0

def printOutput(list, compact=False):

 print

 if compact:

  for i in list:

   print bold(i["NAME"] + ": ") + i["CFLAGS"]

 else:

  for i in list:

   print green("*") + bold("  " + i["NAME"])

   print darkgreen("      CFLAGS: ") + i["CFLAGS"]

   print   

def emerge():

 global selected, options

 out = ""

 for i in selected:

  if options["GENERIC"]:

   out += " " + pkgsplit(i["NAME"])[0]

  else:

   out += "=" + i["NAME"] + " "

 #Added fetchonly feature [ivan]

 if options["FETCHONLY"]:

  out += " -f "

 #Added pretend feature [ivan]

 if options["PRETEND"]:

  out += " -p "

 if out:

  os.system("emerge " + out)

getOpt()

if options["CFLAGS"]:

 print "Please wait a moment, scanning database..."

 os.path.walk(dir, getFiles, options["CFLAGS"])

 if ebuilds:

  doSomething()

 else:

  print "Error: no packages found"

```

Ciao

----------

## neon

https://forums.gentoo.org/viewtopic-p-1990669.html#1990669

 *codarin wrote:*   

> Grazzie... bello sia equery che un cat sul pacchetto!
> 
> Grazie, ora ho più coraggio a ricompilare!
> 
> Tra le altre cose gufo (BY GEKIT) ho visto che mi fa il parsing anche dei GRP e quindi gufo stesso estrae le cflag con cui le cose sono state compilate!
> ...

 

Wow, figata... non lo sapevo mica (ahahahahahahahahahah)

Dite che puo' essere utile una opzione verbosa che mostra tutte le info con cui e' stato compilato un pacchetto? (basta guardare in /var/db/pkg)

----------

## neon

Ecco una nuova versione di gufo. Le vecchie sono state nascoste (non rimosse) da sourceforge perche' hanno un fastidioso bug che blocca il gufo durante la schermata di selezione dei pacchetti.

Gufo-kiss presenta la lista di pacchetti e chiede se ricompilare o meno (super simple) niente di piu' niente di meno...

Al momento il gufo non e' ancora perfetto, ma sicuramente e' migliore rispetto alle vecchie versioni, il problema e' il seguente: https://forums.gentoo.org/viewtopic-t-364677.html

In questa versione viene aggirato, quando sara' risolto uscira' la versione 0.3 di gufo che avra' tutte le vecchie opzioni (e si spera anche alcune nuove)

gufo-kiss e' giovine ed e' poco betatestato vi prego di segnalare qualunque problema  :Wink: 

----------

## fctk

l'ho provato per la prima volta, e devo dire che è veramente bello!  :Razz: 

comunque, dopo averlo eseguito la prima volta (e aver compilato i pacchetti che diceva), ora mi trovo davanti a questa lista "immutabile":

```
thorium gufo-kiss # gufo-kiss.py

Please wait: Scanning portage db

*  x11-misc/gtodo-0.14

      CFLAGS:  -Os -march=athlon-xp -pipe

*  sys-devel/patch-2.5.9-r1

      CFLAGS:  -Os -march=athlon-xp -pipe -DLINUX -D_XOPEN_SOURCE=500

*  sys-devel/binutils-2.16.1

      CFLAGS: -Os -march=athlon-xp -pipe

*  net-libs/gecko-sdk-1.7.8

      CFLAGS: -march=athlon-xp -pipe -Wno-return-type -w

re-emerge listed packages? (y/n) n

Ok, bye ;)
```

con ogni probabilità si tratta di pacchetti che filtrano alcune CFLAGS e quindi non potranno mai essere compilate con tutte le CFLAGS correnti, e cioè con:

```
CFLAGS="-Os -march=athlon-xp -pipe -fomit-frame-pointer"
```

ad esempio... binutils non viene compilato con -fomit-frame-pointer, ma a parte quella tutte le altre cflags con cui è stato compilato corrispondono esattamente a quelle che ho settato in make... quindi secondo me gufo non dovrebbe chiederne la ricompilazione... chiedo troppo?  :Laughing: 

----------

## neon

 *fctk wrote:*   

> con ogni probabilità si tratta di pacchetti che filtrano alcune CFLAGS e quindi non potranno mai essere compilate con tutte le CFLAGS correnti

 

Esatto.

 *fctk wrote:*   

> ad esempio... binutils non viene compilato con -fomit-frame-pointer, ma a parte quella tutte le altre cflags con cui è stato compilato corrispondono esattamente a quelle che ho settato in make... quindi secondo me gufo non dovrebbe chiederne la ricompilazione...

 

Il problema e' quello di cui parlo nell'altro post, al momento gufo filtra gcc e gli ebuilds che contengono le stringhe "replace-flags" e "filter-flags", il problema e' che alcuni ebuild (che io chiamo magici ma semplicemente non ho capito come funzionano) pur non contenendo queste funzioni filtrano le CFLAGS ad esempio binutils-2.15.92.0.2-r10.ebuild:

```
# Copyright 1999-2005 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/sys-devel/binutils/binutils-2.15.92.0.2-r10.ebuild,v 1.5 2005/05/31 22:04:27 vapier Exp $

PATCHVER="2.5"

UCLIBC_PATCHVER="1.1"

inherit toolchain-binutils

KEYWORDS="-* alpha amd64 -arm hppa ia64 m68k ~mips -ppc ~ppc64 sparc x86"

~

```

E' un pacchetto virtuale... che non contiene filtri... eppure filtra le CFLAGS.

 *fctk wrote:*   

> chiedo troppo? 

 

No chiedi il giusto ma sinceramente conosco a stento il 5% del codice di portage ed al momento non ho idee brillanti...

qualche consiglio?

----------

## fctk

 *neon wrote:*   

>  *fctk wrote:*   chiedo troppo?  
> 
> No chiedi il giusto ma sinceramente conosco a stento il 5% del codice di portage ed al momento non ho idee brillanti...
> 
> qualche consiglio?

 

nessuno, purtroppo  :Sad:  sono troppo niubbo in questo campo...  :Embarassed: 

----------

## 102376

riprendo questo post senza aprirne uno nuovo.

io ho fatto un installazione da stage 3 e volevo ricompilare solo la parte dello stage 3. non c'è un modo per aggiornare solo i pacchetti che hanno le cflag diverse?????

----------

