# [IDEE GENIALI] per migliorare gli strumenti di emerge

## Mr.Evolution

Premesso:

Uso spesso a scrocco connessioni ad internet di amici perché non ho la linea telefoni  a casa ed il collegamento via GPRS mi costa una vita!

Intuizione verso mezzanotte mentra ripassavo per la terza prova di oggi (maledetta maturità)

1. Perché no è possibile tipo creare una lista dei pacchetti che vorrei installare e dopo, con un semplice comando, generare un file da fare "mangiare" a wget -i ??? con una lista di mirror vicino casa magari???

se qualcuno l'ha già inventato me lo dica perché è una passione ogni volta.

2. Uso moltissimo i package (voglia di ricompilare quando formatto zero) e, come i distfiles, si accumulano e non so mai se posso cancellarli.

esiste qualcosa per vedere i files non necessari??

----------

## Ferdinando

io faccio 

```
emerge -pfuD world 2> file
```

 e poi chiamo wget sul file generato.

L'unica pecca e` che per sapere se dei files ce li ho gia` devo guardare le faccine che escono durante l'esecuzione del comando (sono mandate su stdout) e cancellare i relativi link dal file. In effetti e` un metodo che vorrei automatizzare, ma finora non ne ho avuto il tempo...

ciao

----------

## ultimodruido

Ciao anche io uso l'universita per scaricare i file. Mi sono creato questo programma stupido (lista-new-file.py) che mi da un file da usare con wget.

io faccio cosi:

```
emerge -pf nomepacchetto &> lista

./lista-new-file.py lista
```

lui salta i sorgenti che emerge identifica come presenti nella cartella /usr/postage/distfiles e ti chiede un nome con cui salvare la lista, poi me ne vado in uni e digito:

```
wget --input-file=lista.uni
```

e aspetto. Spero che ti venga utile per quello che devi fare! questo è il codice:

```
#!/usr/bin/python

# Questo script analizza l'output di "emerge -pf nomeprogramma"

# e individua i file gia presenti in /usr/portage/distfiles

# spulciando la lista dei download dei file non necessari

import sys, os, string, commands

infile=[]

linee=[]

if len(sys.argv)>=2:

   for i in range(len(sys.argv)-1):

      fid=open(sys.argv[i+1])

      linee=linee+fid.readlines()

      fid.close()

   linee.sort()

   linee2=[]

   test=''

   for item in linee:

      if not item==test:

         linee2=linee2+[item]

      test=item

   files=[]

   http=[]

   gia=[]

   print str(len(linee2[:]))+' files'

   for item in linee2:

      if item[:7]=='http://':

         files.append(item.split(' ',1)[0][(item.split(' ',1)[0].rfind('/')+1):])

         http.append(item.split(' ',1)[0][:(item.split(' ',1)[0].rfind('/')+1)])

      elif item[:19]=='>>> md5 src_uri ;-)':

         gia.append(item.split(' ')[-1].strip())

      else:

         print 'Riga sconosciuta'

   out=raw_input('Nome file output: [lista.uni]')

   if not out:

      out='lista.uni'

   fid=open(out,'w')

   for item in files:

      try:

         gia.index(item)

      except:

         fid.write(string.strip(http[files.index(item)]+item)+'\n')

   fid.close()
```

ciao nic

PS: come indirizzo da sacaricare prende solo il primo della lista fonrita da emerge perche è più facile   :Very Happy: 

----------

## Mr.Evolution

Sembra buono NIC, non conosco molto il Pithon e molto probabilmente lo imparerò apposta. Vedo che non sono il solo ad usare la rete a scrocco...

----------

## ultimodruido

Grazie, ma nemmeno io lo conosco! anche perche sono tutto fuorche un programmatore!

Se ti servisse ne ho creato un'altro che si ciuccia lo stesso file e cerca sui cd delle riviste se ci sono gia i sorgenti cosi non scarico robe inutili

Ciao

ps per la rete a scrocco avevo due possibilita:

1) comprare redhat Magazine cosi avevo gli aggiornamenti ogni mese (naaaa)

2) usare gentoo a casa e knoppix in uni per aggirare le protezioni dell'amministratore e scaricarmi quel che mi pare

ha vinto la seconda   :Laughing: 

----------

## Mr.Evolution

Sei forte!!

Se sei di PADOVA fammi un fischio che ci conosciamo di persona!

PS: mandami anche l'altro file che male non fa (a volte compro Linux Magazine: tradotto SORGENTI SU DVD)

----------

## ultimodruido

Ciao, grazie per averlo chiesto, almeno ora l'ho finalmente messo a posto! prima si dimenticava l'url dove prelevare i file e doveva essere recuperato a mano, ora invece lo fa da solo. non guardare la pulizia del codice, ti prego!!!

questo di usa cosi:

```
./ricercasuDVD.py lista.uni dir1 dir2 dirxx 
```

mettici tutte le cartelle che ti pare e lui ti sputa fuori sempre il solito file

AVVERTENZE!!!

Onde evitare di sovrascrivere file in /usr/portage/distfiles questo script copia i sorgenti trovati in ./distfiles quindi creati tu la cartella distfiles dove lo vuoi eseguire perche se non c'è lui non la crea!!! e quindi non ti copia i file da nessuna parte, ti dice solo quali ha trovato. lo so che servirebbe solo una linea di codice in più, ma ho da studiare (merc esame   :Confused:  ) e non ho voglia di cercare nel modulo os (o quello che è) cosa devo scrivere... scusa

questo e il codice:

```
#!/usr/bin/python2.3

# Questo script analizza il file restituito dallo script

# lista-new-distfiles.py e controlla se in percorsi noti

# sono presenti i file cercati in modo da evitare il 

# download di file gia in possesso

import sys, os, string, commands

url=[]

supporti=[]

if len(sys.argv)>=3:

   fid=open(sys.argv[1])

   url=url+fid.readlines()

   fid.close()

   for i in range(2,(len(sys.argv))):

      supporti.append(sys.argv[i])

   files=[]

   for i in range(len(url)):

      files.append(url[i].split('/')[-1])

   out=raw_input('Nome file output: [lista.uni]')

   if not out:

      out='lista.uni'

   for a in range(len(supporti)):

      fid=open(out,'w')

      for i in range(len(files)):

         percorso=commands.getstatusoutput("find "+supporti[a]+" -iname '"+files[i].strip()+"'")[1]

         if percorso:

            #print percorso

            print files[i].strip()+" trovato!!!"

            commands.getstatusoutput("cp -v "+percorso+" ./distfiles/")[1]

         else:

            fid.write(url[i])

      fid.close()

      url=[]

      fid=open(out)

      url=url+fid.readlines()

      fid.close()

      files=[]

      for i in range(len(url)):

         files.append(url[i].split('/')[-1])

```

Mi spiace, ma sono di Casale M. (provincia di Alessandria) parecchio lontano, per un incontro cosi su due piedi, ma vorrei cercare di essere presente se ci sara qualche altro incontro dei gechi. 

Ciao, buona serata nic

----------

## bld

io invece credo che ci vorebbe un opzione su emerge per agiungere delle flags a ./configure tipo -cf "blah blah"

----------

## FonderiaDigitale

usate la funzione di ricerca: HOWTO

----------

## Ferdinando

 *FonderiaDigitale wrote:*   

> usate la funzione di ricerca: HOWTO

 

Ottima url! Nel mio caso penso che riadattero` lo script per winxp (dove ho l'adsl e wget grazie a $DIO si compila per win32   :Wink:  ); purtroppo pero` all'universita` ho la fibra ottica e non posso sfruttarla perche' il bofh non ha installato wget - non vuole robots (nota a margine: saranno *** miei se mi intaso la home, o no?!   :Evil or Very Mad:  Tanto c'e` pure la quota!). Allo stato attuale mi genero un file html e scarico con links.

Ciao

----------

## Mr.Evolution

 *Ferdinando wrote:*   

>  purtroppo pero` all'universita` ho la fibra ottica e non posso sfruttarla perche' il bofh non ha installato wget - non vuole robots (nota a margine: saranno *** miei se mi intaso la home, o no?!   Tanto c'e` pure la quota!). Allo stato attuale mi genero un file html e scarico con links.
> 
> Ciao

 

Se cerci con google trovi wget compilato per windows e se non lo trovi te lo invio via e-mail...io attacco la penna a scuola e lancio un bat che scarica tutto il necessario

----------

## FonderiaDigitale

quotate per bene.

----------

## Thundah

Secondo me sarebbe una cosa utile aggiungere la possibilità di rimuovere le dipendenze quando disinstalliamo un pacchetto.. mettere un contatore per ogni pacchetto (per sapere da quanti pacchetti dipende) e poi ma mano che si disinstallano pachcetti i contatori vengono scalati.. una volta a 0 si chiede all'utente se vuole effettivamente disinstallare tale dipendenza o meno. Sarebbe mega fiko..

MAuro

----------

## Mr.Evolution

Scusa fonderia ma sono ancora un newbie con le quote.....

Cmq pensavo che l'eliminazione delle dipendenze esistesse già.......Gentoo mi delude.........

----------

## xchris

 *Mr.Evolution wrote:*   

> Gentoo mi delude.........

 

esagerato!!

i vantaggi di gentoo sono per me infiniti.

se ancora manca uno strumento ufficiale efficace...questo per me non e' un grosso problema.(perche' visto il lavoro fatto fino ad ora..posso solo riporre fiducia)

Cmq in linea di massima una gentoo amministrata per bene ti permette di rimuovere vecchi pacchetti. (anche se con qualche attimo di panico  :Very Happy:  )

ciao

----------

## Mr.Evolution

Stavo scherzando!!

Finalmente ho trovato un difetto.... (è circa un anno che ne cerco uno)

Gentoo è già grande com'è e può solo crescere perché è nata benissimo

----------

## ultimodruido

Ciao a tutti... a me non sembra esistere quel difetto, un bel 

```
emerge depclean
```

 fa esattamente quello di cui state parlando rimuove i pacchetti dipendenze di pacchetti ormai rimossi.

Tempo fa aveto trovato questo TIP scritto da Morellik che isegna a tenere "pulito" un sistema gentoo

Ciao a tutti nic

----------

## fedeliallalinea

Io dico solo fate molta attenzione con depclean non funziona benissimo quindi non fidatevi troppo

----------

## xchris

io credo che emerge --depclean funzioni molto bene.

Il problema e' che usarlo non e' cosi' banale come lanciarlo.

Servono delle operazioni preliminari ,alcuni passi intermedi e delle eventuali misure di sicurezza.

Volevo fare un bel HOWTO su questo tema,includendo tutte le operazioni da evitare e come comportarsi per avere un sistema clean ma ho paura che slittera' a settembre.

vediamo se riesco prima.

(sperando di fare cosa gradita)

ciao

----------

## FonderiaDigitale

usare depcleaner no eh?  :Razz: 

----------

## xchris

Lo usavo in passato assieme a "dixan". (un mio script con approccio diverso ma dai risultati simili)

Ad un certo punto ho inventato un nuovo sistema (assurdo  :Very Happy:  ) che mi portava agli stessi identici risultati di emerge --depclean.

-script come depcleaner,il mio dixan,e similari spesso ti lasciano pkt inutilizzati per colpa di dipendenze tra pkt inutilizzati o dipendenze circolari addirittura.

Sono quindi arrivato alla conclusione + seplice.

-Usare tutti gli strumenti del portage per tenerla in ordine.

-Usare qualche tool home made di ausilio (usetool)

A questo punto emerge --depcleaner diventa una bomba!!

(con l'ausilio di usetool,senza ricompilazioni)

Volevo pero' raccontarlo in un HowTo. ( e magari discuterne in seguito visto che l'argomento e tutt'altro che banale)

ciao

----------

## fedeliallalinea

 *xchris wrote:*   

> Volevo pero' raccontarlo in un HowTo.

 

Non sarebbe una brutta idea... aspettero' settembre allora  :Very Happy: 

----------

