# [TOOL ] - bininfo -info dai binari prima di installarli

## xchris

Piccolo tool usando roba di portage.

Utilizzo:

```

./bininfo file.tbz2

```

elenchera' "use" utilizzate e altri parametri come cflags,chost..

nato da questo post...

https://forums.gentoo.org/viewtopic.php?t=223399

download

```

wget http://www.xchris.net/download.php?file=files/bininfo.gz -O bininfo.gz

```

http://www.xchris.net/download.php?file=files/bininfo.gz

ciao

----------

## mouser

Scarricato e provato.

Ottimo tool.

mouser

----------

## randomaze

 *xchris wrote:*   

> Piccolo tool usando roba di portage.

 

Sarebbe interessante se usassi i binari  :Razz: 

ultimamente sei diventato una macchina per scripting  :Rolling Eyes: 

----------

## fedeliallalinea

Aggiunto a post utilissimi sezione tools

----------

## xchris

consiglio a chi l'ha scaricato da + di 5 minuti di riscaricarlo....

troppa fretta a metterlo su :S

ora va meglio.

@randomaze: mmmm si vede che mi sto un po' scassando in questo periodo?   :Laughing:  (in realta' era una quasi promessa per zuglio)

pure io non uso i binari....a meno di openoffice..  :Smile: 

----------

## xchris

spero che questo sia l'ultimo update...

uppata ver nuova (scusate :S)

un simil screenshot:

```

./bininfo /usr/portage/packages/All/postfix-2.1.3.tbz2

BinInfo - ver 0.1

*mail-mta/postfix-2.1.3

    USEFLAGS        : +ipv6 +pam -ldap +mysql -postgres +ssl -sasl -vda -mailwrapper -mbox

    CXX             : g++

    CC              : gcc

    CHOST           : i686-pc-linux-gnu

    CFLAGS          : -O3 -march=pentium4 -fomit-frame-pointer -pipe

    CXXFLAGS        : -O3 -march=pentium4 -fomit-frame-pointer -pipe

    SLOT            : 0

    PROVIDE         : virtual/mta virtual/mda

    LICENSE         : IPL-1

```

ciao

----------

## zUgLiO

 *xchris wrote:*   

> (in realta' era una quasi promessa per zuglio)
> 
> 

 

Grazie grazie grazie..era esattamente quello che mi serviva   :Smile:   , se il 9 ottobre vieni a ferrara al codejam ti offro una superpizza   :Very Happy: 

----------

## xchris

 :Very Happy: 

chi lo sa... :Smile: 

cmq e' stata una cosa interessante  :Wink: 

ciao

----------

## Ty[L]eR

bellissimo... concordo con gli altri che ti fanno i complimenti per le tonnellate di script che fai... io mi sto ancora cimentando con ziopino (mi sono appena svegliato e l'ho riprovato, ghgghh) lo reputo troppo utile  :Very Happy: 

----------

## xchris

 :Embarassed: 

grazie   :Embarassed: 

----------

## Benve

Sarebbe perfetto da usare per il GIW https://forums.gentoo.org/viewtopic.php?t=230186

Volevo gia` creare pacchetti binari di kde3.3 e gnome2.8 ma mi mancava un qualcosa di automatico per controllare la compatibilita` tra pacchetto e macchina.

In teoria se un binario ha le stesse use flags ed e` compilato per lo stesso processore dovrebbe non dare problemi.

La prossima settimana faro` un poco di prove.

----------

## xchris

ottimo  :Smile: 

se guardi il codice vedrai che e' molto semplice...

potrai facilmente adattarlo.

eventualmente dovesse servirti qc di particolare o nn pitoneggi molto chiedimi pure.

ciao

----------

## Benve

 *xchris wrote:*   

> ottimo 
> 
> se guardi il codice vedrai che e' molto semplice...
> 
> potrai facilmente adattarlo.
> ...

 

Non mi pitoneggio per niente, ma credo che per ora usero bash e diff con l`output dello script, magari scriviamo qualcosa di meglio la settimana prossima, oppure per il Linux Day

----------

## xchris

se mi spieghi meglio cosa ti serve magari te lo faccio..

non ci sono pb.

ciao  :Smile: 

----------

## Benve

servirebbe un programma per gestire i pacchetti binari, come si parlava in dei post vecchi

Si potrebbe fare così:

Ogni volta che qualcuno compila, usa -b per creare i pacchetti

Alla fine si fa partire uno script che copia in una directory montata (o qualcosa di simile), il pacchetto binario, aggiungendogli al nome una stringa univoca, magari generata a partire da bininfo.

Es. compilo grep

dentro /usr/portage/packages ci sarà grep-2.5.1-r6.tbz2

con bininfo:

```
 /home/benve/bininfo grep-2.5.1-r6.tbz2 

BinInfo - ver 0.1 

*sys-apps/grep-2.5.1-r6

        USEFLAGS    : -build -nls -pcre -static -uclibc -debug

        CXX         : g++

        CC          : gcc

        CHOST       : i686-pc-linux-gnu

        CFLAGS      : -O2 -march=pentium4 -fomit-frame-pointer -pipe

        CXXFLAGS    : -O2 -mcpu=i686 -pipe

        SLOT        : 0

        PROVIDE     : 

        LICENSE     : GPL-2

```

il primo script copia in file nel "database dei binari"

in /mnt/dbb/ ci sarà  grep-2.5.1-r6.STRINGAUNIVOCAGENERATA.tbz2

Il secondo cript serve per installare un pacchetto.

Se in un altra macchina devo installare grep lancerò

script2 grep

Questo dovrebbe interrogare emerge e avere una lista di pacchetti, dipendenze e le use associate.

Poi con emerge info prende le info per l'architettura della macchina.

A questo punto copia i file giusti da /mnt/dbb/ a /usr/portage/packages/All e avvia un emerge -k grep

I file sono scelti tra quelli che hanno caratteristiche giuste (stesse use flag, stesso processore)

Questa è una sintesi estrema, ma da l'idea, se vuoi lo sviluppiamo insieme

----------

## xchris

certo.

sembra interessante  :Smile: 

andrebbe pensata per bene... intanto con nfs di potrebbe condividere /usr/portage/packages

non tutto /usr/portage altrimenti le ricerche rallenterebbero' troppo..

appena mi libero' un po' ci penso su  :Smile:  e troviamo assieme il sistema migliore... cosi' magari potra' essere riutilizzata anche in altri gentoo-party

ciao

EDIT: ho detto una caxxata! se scrivono tutti su packages...si sovrascrivono  :Very Happy: 

----------

## Benve

Grazie, comunque l'uso di nfs era un esempio. Come si accede ai file e agli attributi dovrebbe essere una libreria/oggetto/modulo (cosa cavolo c'è nel pyton), per permettere di poter usare anche altri sistemi per la condivisione di file.

Per esempio in facoltà ci sono spazi riservati ai dati degli studenti accedibili solo tramite ssh/scp.

Il massimo sarebbe il p2p, come si parlava in vecchi post.

----------

## xchris

il p2p implicherebbe troppi manualismi  :Smile:  (a meno di non riscrivere un client)

meglio il vecchio nfs  :Smile: 

appena mi libero un po' da ziopino e altri impegni ci pensiamo su per bene  :Smile: 

ciao

----------

## Benve

Ora ti faccio un prototipo in bash o perl, poi se ti ispira e hai tempo possiamo convertirlo in Pyton

----------

## xchris

bash sarebbe per me un po' meglio perche' perl l'ho mollato in favore di python (troppo incasinato per i miei gusti)

ciao

----------

## xchris

secondo me sarebbe carino fare una cosa del genere:

classificare le cpu in questo modo:

A:amd

I:intel

P:ppc

.....

poi per ognuna delle cpu intel ad es:

486:1

586:2

.....

cosi' se paragoni il pc locale con i binari disponibili e vedi che c'e' una versione compatibile la installi

Magari dai la possibilita' di dire:

-exactmatch

-compatiblematch

cosi' uno installa solo se e' compilato allo stesso identico modo o in modo compatibile...

che ne pensi?

----------

## Benve

Problema:

come mai bininfo non riporta le parentesi di alcune use?

```
emerge -pv grep

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

Calculating dependencies ...done!

[ebuild   R   ] sys-apps/grep-2.5.1-r6  -build -debug -nls +pcre -static -(uclibc)  0 kB 

Total size of downloads: 0 kB

```

```
./bininfo grep-2.5.1-r6-B0.tbz2 

BinInfo - ver 0.1 

*sys-apps/grep-2.5.1-r6

        USEFLAGS    : -build -nls -pcre -static -uclibc -debug

        CXX         : g++

        CC          : gcc

        CHOST       : i686-pc-linux-gnu

        CFLAGS      : -O2 -march=pentium4 -fomit-frame-pointer -pipe

        CXXFLAGS    : -O2 -mcpu=i686 -pipe

        SLOT        : 0

        PROVIDE     : 

        LICENSE     : GPL-2

```

uclibc prima ha le parentesi dopo no.

----------

## xchris

controllo appena posso.

promesso  :Smile: 

----------

## xchris

le parentesi vengono usate per useflag mascherate!

E' quindi normale che bininfo le tolga.

emerge -pv ti segna che cmq non e' attivabile con i metodi convenzionali.

(perche' in teoria il comando serve per vedere cosa supporta in compilazione)

Bininfo o altri tool invece mostrano "come e' effettivamente compilato".

...e riportano correttamente -uclib

Per il tuo script conviene semplicemente eliminare le parentesi...

ciao

----------

## Benve

 *xchris wrote:*   

> 
> 
> Per il tuo script conviene semplicemente eliminare le parentesi...
> 
> 

 

è quello che farò, grazie

----------

## silian87

E' molto ma molto utile.

----------

## Benve

Posto quà il prototipo di binmerge.

Lo script è semplicissimo e serve solo a dare un'idea di quello che può essere fatto coi binari

submit.sh:

```
#! /bin/bash

BPDIR="/mnt/packages" #dir dove stanno i binari generici

PKGDIR="/usr/portage/packages/All" #dir coi binari specifici da usare

OUT=`ls $PKGDIR`

for i in $OUT

 do

 echo -n $i

 sum=`md5sum $PKGDIR/$i | cut -d " " -f 1`

 name=`basename $(./bininfo2 $PKGDIR/$i | head -n1)`

 

 if ! [ -e "$BPDIR/$name-$sum.tbz2" ];

  then

  echo -n " copio in $BPDIR/$name-$sum.tbz2"

  cp $PKGDIR/$i $BPDIR/$name-$sum.tbz2

  

 fi                     

 echo " "

        

done

```

Questo è lo script che inserisce i binari compilati localmente (PKGDIR) in BPDIR

ogni binario viene copiato aggiungendo al nome l'md5, per distinguere binari della stessa versione di software ma compilati con use diverse

binmerge.sh

```
#!/bin/bash

#echo $1

BPDIR="/mnt/packages" #dir dove stanno i binari generici

PKGDIR="/usr/portage/packages/All" #dir coi binari specifici da usare

#prendo informazioni sull'ebuild che devo installare e sulle sue dipendenze

OUT=`emerge -pv $1 | grep 'ebuild'`

iFIELD=0 #campo dell'ebuild

iUSE=0

PACKAGES=""

for i in $OUT

  do

  if [ $i == '[ebuild' ]; then

      iFIELD=0

      iUSE=0

  fi

#   echo "SONO I -> $i"

  case $iFIELD in

      0 | 2 )

     ;;

      1 ) #stato ebuild

     EBUILD[1]=$i

     

     ;;

      3 ) #nome-versione ebuild

     EBUILD[0]=$i

     PACKAGES=`ls $BPDIR | grep $(basename $i)`

     ;;

      * )

     tmp=`echo $i | cut -c1`

     PKTMP=""

     if [[ $tmp == + || $tmp == - ]]; then

         U=`echo $tmp$(echo ${i#[+-]} | cut -d ")" -f 1 | cut -d "(" -f 2)`

         

         for pk in $PACKAGES

            do

               if [[ -n `./bininfo2 $BPDIR/$pk | grep USEFLAGS | grep -- $U` ]] 

               then

                      #echo "pk" $pk $PKTMP

                      PKTMP=`echo $pk $PKTMP`  

               fi

            done

         iUSE=$[$iUSE+1]

         PACKAGES=$PKTMP

         #echo $PACKAGES

     fi

     ;;

  esac

    

  #echo "$i" 

  iFIELD=$[$iFIELD+1]

done

echo $PACKAGES
```

Questo script ci dice quali pacchetti sono compatibili con le nostre use.

Non fa altro che stampare a video il pacchetto compatibile.

Il codice lo so fa veramente schifo, è stato stritto in mezzora spalmata in una settimana.

Va invocato col nome del software es:

./binmerge grep

----------

