# [TOOL] EWO - emerge (-e) world optimizer

## mrfree

Maggiori informazioni e le ultime versioni sono disponibili sulla

Homepage Ufficiale

Ho scritto questo script perché mi è capitato durante un emerge -e world di non avere la possibilità di fare il resume (a causa di un emerge lanciato al blocco del primo per risolvere alcune cosette), spero sia utile anche a voi...

Idea: utilizzando genlop trovo la data del primo emerge (nel mio caso gcc-4.1.1) che scatena quella che viene definita ricompilazione termo-nucleale globale, l'ottimizzazione sta nel: "non ricompilo quello che ho già ricompilato"  :Smile: 

Doverosa premessa... usare a proprio rischio e pericolo

Importante: Nuova versione 0.2!!!

Quella che segue è la prima release di EWO, è consigliabile utilizzare l'ultima versione disponibile

Modificare opportunamente nel codice from_date e toskip

from_date: data (formato genlop) dalla quale ha avuto inizio la ricompilazione totale

toskip: pacchetti da non includere nella ricompilazione (formato, vedi esempio)

Ecco il codice da copiare nel file ewo.py

```
#! /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

#

# Emerge (-e) World Optimizer (EWO)

# EWO 0.1 Copyright 2006 Frittella Laurento <mrfree@infinito.it>

import re, commands

from portage import pkgsplit

from_date = 'Thu Aug 31 16:17:17 2006'

world = []

alreadydone = []

toskip = ['media-tv/democracy', 'sys-libs/db-3.2.9-r10', 'sys-devel/gcc-3.4.6-r1']

todo = []

out = ''

def fill_world_ng():

   global world

   raw_emerge_pattern = re.compile('\[.+\]\s+([^\s]+).*')

   raw_pkglist = commands.getstatusoutput('emerge -ep --quiet --nospinner world')

   if raw_pkglist[0] == 0:

      pkglist = raw_pkglist[1].split('\n')   

      for pkg in pkglist:

         match = raw_emerge_pattern.match(pkg)

         if match:

            world.append(match.group(1))

   else:

      raise Exception('Oops! No world packages list...')

def fill_alreadydone():

   global alreadydone, from_date

   raw_genlop_pattern = re.compile('.+>>>\s+([^\s]+).*')

   raw_alreadydone_pkglist = commands.getstatusoutput('genlop -ln --date ' + from_date)

   if raw_alreadydone_pkglist[0] == 0:

      alreadydone_pkglist = raw_alreadydone_pkglist[1].split('\n')

      for pkg in alreadydone_pkglist:

         match = raw_genlop_pattern.match(pkg)

         if match:

            alreadydone.append(match.group(1))

   else:

      raise Exception('Oops! No already-done packages list...')

fill_world_ng()

fill_alreadydone()

      

for pkg in world:

   if alreadydone.count(pkg) == 0 and toskip.count(pkg) == 0:

      todo.append(pkg)

for pkg in todo:

   if toskip.count(pkgsplit(pkg)[0]) == 0:

      out += '=' + pkg + ' '

print out
```

Permettiamone ora l'esecuzione

```
# chmod +x ewo.py
```

Esempio di utilizzo

```
# emerge -1 -va `./ewo.py`
```

Requisiti (oltre ai classici)

app-portage/genlop

TODO

from_date e toskip definibili da linea di comando

varie ed eventuali

Curiosità: Sviluppato con Anarchy in the UK dei Sex Pistols, in rigoroso loop

----------

## X-Act!

Ciao MrFree, come va?

Appena avrò modo cercherò di provare il tuo script, ma volevo segnalare che c'è già un altro tool per gestire gli emerge -e world ed è Gufo.

Io non ho provato neanche questo e non ti so dire se ci sono differenze sostanziali, ma una volta leggevo che era consigliatissimo... Mi sembra però che non sia molto aggiornato.

Magari tu che sei più esperto di me potresti darci un'occhiata e vedere se c'è qualche spunto da prendere...

A presto!

----------

## mrfree

Ueeee X-Act!   :Very Happy: 

Grazie per la segnalazione ma Gufo lo conosco, l'ho già usato in passato  :Wink: 

L'idea alla base dei due tool è differente, Gufo si basa sulle CFLAGS mentre EWO sulla cronologia delle installazioni; per questo motivo se stai ricompilando il sistema senza (sostanziali) variazioni nelle CFLAGS probabilmente Gufo non è proprio adatto. Inoltre ha qualche problema con il filtraggio delle CFLAGS fatto dai vari ebuild (c'è un bug-report aperto su questo) che tende a generare diversi "falsi positivi".

Ho scelto di buttare giù 2 righe di python proprio perché Gufo non mi sembrava adatto all'occasione, e poi python è un linguaggio che mi piace ma che non conosco ancora bene... quindi ho approfittato  :Wink: 

Gufo nasce per organizzare la ricompilazione del sistema a fronte di un cambiamento delle CFLAGS, EWO appositamente per la ricompilazione termo-nucleale globale che può nascere da un desiderio irrefrenabile di compilazione anche "pseudo-giustificata"  :Smile: 

----------

## Ic3M4n

io in simili casi do l'emerge --resume e subito lo stoppo con CTRL-z, faccio quello che devo sistemare e  poi con fg faccio ripartire la vecchia compilazione. cmq appena mi capita proverò il tuo nuovo script.   :Wink: 

----------

## tizio

stavo cercando proprio qualcosa del genere per "rateizzare" un pò l'emerge -e world  :Smile: 

grazie mille

lo sto già usando e sembra funzioni benone!

----------

## skypjack

Sto provando lo script...

Appena posso, faccio sapere qualcosa...

Appunto: Piena fiducia!!

Ok, provato...

Direi che è un pò "scomodo" (per modo di dire) il fatto di dover inidcare minuziosamente la data e quindi devi comunque cercarla con genlop o altri metodi, ma per il resto funziona perfettamente.

Mi ha ripristinato un emerge -e world interrotto al 298 pacchetto e mi vedevo già perso in altre ore...

Grazie, uno script molto utile!!

Voto: 10!!  :Smile: 

----------

## mrfree

Grazie ragazzi troppo gentili!

Mi fa piacere che il tool sia utile anche ad altri...

----------

## mrfree

 *skypjack wrote:*   

> Direi che è un pò "scomodo" (per modo di dire) il fatto di dover inidcare minuziosamente la data e quindi devi comunque cercarla con genlop o altri metodi

 

Se con minuziosamente ti riferisci al fatto che nell'esempio ho indicato anche ore:min:sec è solo perché ho fatto copia-incolla da genlop, se però non è necessario puoi indicare solo il giorno ad esempio o qualcosa del tipo yesterday dai uno sguardo al man di genlop per maggiori info in quanto il formato della variabile from_date è esattamente quello utilizzato da genlop

----------

## crisandbea

domanda molto probabilmente banale,   dopo aver lanciato il tuo script, ed ovviamente dopo un pò di ore per vari motivo devo stoppartlo, non sò con un control-c ,  per riprendere da dove ero rimasto prima ovviamente di stoppare come devo fare che non ho ben capito??

grazie mille

----------

## mrfree

 *crisandbea wrote:*   

> domanda molto probabilmente banale,   dopo aver lanciato il tuo script, ed ovviamente dopo un pò di ore per vari motivo devo stoppartlo, non sò con un control-c ,  per riprendere da dove ero rimasto prima ovviamente di stoppare come devo fare che non ho ben capito??

 

Mi auguro che il mio script non "giri" per qualche ora   :Very Happy: 

A parte gli scherzi, lo script genera solo un elenco di pacchetti. Probabilmente quello che vuoi stoppare dopo qualche ora è l'emerge world, se non ho capito male il tuo quesito. Per stoppare "volontariamente" e riprendere l'emerge ci sono diversi modi (prova a fare una ricerca sul forum ci dovrebbero essere diversi post in merito) CTRL+Z e per riprendere fg oppure kill con CTRL+C e poi riprendi con emerge --resume

Comunque sia se rilanci il comando emerge "accoppiato" con l'ewo (come nell'esempio del mio post) i pacchetti che hai già ri-emergo nella compilazione termonucleareglobale verranno abilmente skippati... è fatto per quello  :Wink: 

----------

## crisandbea

 *mrfree wrote:*   

>  *crisandbea wrote:*   domanda molto probabilmente banale,   dopo aver lanciato il tuo script, ed ovviamente dopo un pò di ore per vari motivo devo stoppartlo, non sò con un control-c ,  per riprendere da dove ero rimasto prima ovviamente di stoppare come devo fare che non ho ben capito?? 
> 
> Mi auguro che il mio script non "giri" per qualche ora  
> 
> A parte gli scherzi, lo script genera solo un elenco di pacchetti. Probabilmente quello che vuoi stoppare dopo qualche ora è l'emerge world, se non ho capito male il tuo quesito. Per stoppare "volontariamente" e riprendere l'emerge ci sono diversi modi (prova a fare una ricerca sul forum ci dovrebbero essere diversi post in merito) CTRL+Z e per riprendere fg oppure kill con CTRL+C e poi riprendi con emerge --resume
> ...

 

il mio "problema" è esattamente quello, ovvero lancio emerge -e world, poi dopo un pò lo stoppo con un CTRL+Z oppure CTRL+C, e per riprenderlo volevo sapere se potevo rilanciare direttamente il comando del tuo esempio, ed ovviamente se andare o meno a modificare qualche parametro del tuo script a parte la data.

penso di esserci, ieri ho lanciato emerge -e world, poi stoppato dopo 58 pacchetti, perchè dovevo staccare il pc,  oggi lanciando l'emerge con il tuo script come da tuo esempio, ho visto che partiva dal pacchetto successivo all'ultimo emerso ieri.    

ciao e grazie

ciao e grazie

----------

## Kardo

proprio quello che mi serve per evitare una nuova ricompilazione termo-nucleare globale ,come dici tu   :Mr. Green: 

devo aver combinato qualche pasticcio perchè mi restituisce quest errore 

```
Traceback (most recent call last):

  File "./ewo.py", line 62, in ?

    fill_alreadydone()

  File "./ewo.py", line 59, in fill_alreadydone

    raise Exception('Oops! No already-done packages list...')

Exception: Oops! No already-done packages list...

 
```

Ho creato il file ewo.py copiando il codice che hai linkato, ho cambiato la data inserendo quella relativa al pacchetto da cui voglio ripartire.

Ho eseguito il chmod

ma quando lancio 

```
./ewo.py
```

 mi da l' errore postato sopra

----------

## mrfree

Posta per favore l'output del comando

```
genlop -ln --date <<la_stessa_stringa_che_hai_in_from_date>>
```

----------

## Kardo

```
genlop -ln --date Fri Nov 24 00:14:23 2006 
```

restituisce questo    :Confused: 

```
 ERROR: Date::Manip unable to determine TimeZone.

 at /usr/lib64/perl5/vendor_perl/5.8.8/Date/Manip.pm line 3635

        Date::Manip::Date_TimeZone called at /usr/lib64/perl5/vendor_perl/5.8.8/Date/Manip.pm line 676

        Date::Manip::Date_Init() called at /usr/lib64/perl5/vendor_perl/5.8.8/Date/Manip.pm line 1446

        Date::Manip::ParseDate('ARRAY(0x60bc50)') called at /usr/bin/genlop line 153

        main::parse('--date') called at /usr/bin/genlop line 715

```

acciderbolina mi sa che c'è un problema con il TimeZone

Ditemi che non devo rifare la compilazione termonucleare   :Neutral: 

----------

## mrfree

 *Kardo wrote:*   

> Ditemi che non devo rifare la compilazione termonucleare  

 

Una volta risolto il problema del timezone ewo dovrebbe andare  :Wink: 

Dai uno sguardo qui e qui per la soluzione

----------

## Kardo

strano , ma da cosa può dipendere il fatto che la Timezone non sia più a posto?

Tornando all ewo..... ho sistemato la timezone e lo script sembra ok

Non so come si fanno quegli strani apici che racchiudono l' ./ewo.py nel tuo esempio , son proprio noob   :Embarassed: 

comunque ho provvisoriamente risolto con un copia e incolla   :Cool: 

Quando lancio 

```
 emerge -eav `./ewo.py`
```

 ricomincia tutto dall inizio senza skippare   :Shocked: 

Tutto incomincio così..... :Mr. Green: 

1-Il primo emerge world è stato stoppato volontariamente da me;

2- sono ripartito con un --resume ma la compilazione si è fermata per un errore , l ho corretto emergendo un altro pacchetto ma a   questo punto mi sono giocato la possibilità di fare un altro --resume

3- ho utilizzato il tuo script e come data ho inserito quella relativa al resume del "punto 2"

E' giusto come procedimento o avrei dovuto mettere la data relativa al primo emerge world ?

----------

## mrfree

Avresti potuto utilizzare anche la data del primo pacchetto emerso dal primo emerge world.

Per quegli strani apici... si ottengono premendo l'apice con l'ALTGR  :Wink: 

----------

## Kardo

Grazie per la dritta "apice" 

Ho provato a cambiare la data, mettendo quella del primo lancio dell' emerge world ma riparte sempre dal primo pacchetto e non skippa nulla!!!   :Sad: 

----------

## mrfree

Posta per favore l'output del comando

```
genlop -ln --date <<la_stessa_stringa_che_hai_in_from_date>>
```

----------

## Kardo

```
 genlop -ln --date  Thu Nov 23 20:33:30 2006 
```

restituisce:

```
   Thu Nov 23 20:33:30 2006 >>> sys-libs/zlib-1.2.3-r1

     Thu Nov 23 20:33:59 2006 >>> sys-libs/gpm-1.20.1-r5

     Thu Nov 23 20:36:14 2006 >>> sys-libs/ncurses-5.5-r3

     Thu Nov 23 20:37:34 2006 >>> app-shells/bash-3.1_p17

     Thu Nov 23 20:38:06 2006 >>> sys-libs/readline-5.1_p4

     Thu Nov 23 20:38:09 2006 >>> virtual/libiconv-0

     Thu Nov 23 20:42:18 2006 >>> sys-devel/gettext-0.15

     Thu Nov 23 20:42:48 2006 >>> sys-apps/diffutils-2.8.7-r1

     Thu Nov 23 20:42:50 2006 >>> virtual/libintl-0

     Thu Nov 23 20:43:32 2006 >>> sys-apps/texinfo-4.8-r5

     Thu Nov 23 20:45:05 2006 >>> sys-apps/groff-1.19.2-r1

     Thu Nov 23 20:45:12 2006 >>> app-portage/portage-utils-0.1.20

     Thu Nov 23 20:45:16 2006 >>> dev-java/java-config-wrapper-0.12-r1

     Thu Nov 23 20:45:22 2006 >>> dev-java/java-config-2.0.30

     Thu Nov 23 20:45:47 2006 >>> sys-apps/sed-4.1.5

     Thu Nov 23 20:45:55 2006 >>> dev-java/java-config-1.3.7

     Thu Nov 23 20:46:20 2006 >>> dev-java/blackdown-jre-1.4.2.03-r13

     Thu Nov 23 20:46:29 2006 >>> virtual/perl-Test-Simple-0.64

     Thu Nov 23 20:46:34 2006 >>> dev-perl/Locale-gettext-1.05

     Thu Nov 23 20:46:40 2006 >>> sys-apps/help2man-1.36.4

     Thu Nov 23 20:46:42 2006 >>> sys-devel/automake-wrapper-2-r1

     Thu Nov 23 20:46:45 2006 >>> sys-devel/autoconf-wrapper-3.2-r2

     Thu Nov 23 20:47:12 2006 >>> sys-devel/m4-1.4.6

     Thu Nov 23 20:47:22 2006 >>> sys-devel/autoconf-2.60

     Thu Nov 23 20:47:25 2006 >>> sys-devel/gnuconfig-20060702

     Thu Nov 23 20:47:36 2006 >>> sys-devel/automake-1.9.6-r2

     Thu Nov 23 20:47:49 2006 >>> sys-apps/man-1.6d

     Thu Nov 23 20:48:28 2006 >>> sys-apps/findutils-4.3.0

     Thu Nov 23 20:48:31 2006 >>> sys-devel/binutils-config-1.9-r2

     Thu Nov 23 20:52:08 2006 >>> sys-devel/binutils-2.16.1-r3

     Thu Nov 23 20:53:02 2006 >>> sys-devel/libtool-1.5.22

     Thu Nov 23 20:54:02 2006 >>> dev-util/pkgconfig-0.20

     Thu Nov 23 20:54:10 2006 >>> x11-misc/util-macros-1.1.0

     Thu Nov 23 20:54:20 2006 >>> x11-proto/kbproto-1.0.3

     Thu Nov 23 20:54:28 2006 >>> x11-proto/xextproto-7.0.2

     Thu Nov 23 20:54:35 2006 >>> x11-proto/xf86bigfontproto-1.1.2

     Thu Nov 23 20:54:42 2006 >>> x11-proto/inputproto-1.3.2

     Thu Nov 23 20:54:51 2006 >>> x11-proto/xproto-7.0.7

     Thu Nov 23 20:55:11 2006 >>> x11-libs/libXau-1.0.2

     Thu Nov 23 20:55:18 2006 >>> x11-proto/bigreqsproto-1.0.2

     Thu Nov 23 20:55:50 2006 >>> x11-libs/libXdmcp-1.0.1

     Thu Nov 23 20:55:58 2006 >>> x11-proto/xcmiscproto-1.1.2

     Thu Nov 23 20:56:06 2006 >>> x11-libs/xtrans-1.0.1

     Thu Nov 23 21:01:17 2006 >>> x11-libs/libX11-1.0.3

     Thu Nov 23 21:01:49 2006 >>> x11-libs/libICE-1.0.1

     Thu Nov 23 21:02:12 2006 >>> x11-libs/libSM-1.0.1

     Thu Nov 23 21:03:23 2006 >>> x11-libs/libXt-1.0.2

     Thu Nov 23 21:03:52 2006 >>> x11-libs/libXext-1.0.1

     Thu Nov 23 21:03:58 2006 >>> media-sound/alsa-headers-1.0.13

     Thu Nov 23 21:07:09 2006 >>> sys-apps/coreutils-6.4

     Thu Nov 23 21:09:09 2006 >>> sys-kernel/linux-headers-2.6.11-r2

     Thu Nov 23 21:09:18 2006 >>> sys-apps/sysvinit-2.86-r5

     Thu Nov 23 21:09:31 2006 >>> sys-apps/baselayout-1.12.6

     Thu Nov 23 21:09:58 2006 >>> sys-apps/module-init-tools-3.2.2-r1

     Thu Nov 23 21:10:08 2006 >>> sys-apps/debianutils-2.15-r1

     Thu Nov 23 21:10:34 2006 >>> sys-devel/make-3.81

     Thu Nov 23 21:10:38 2006 >>> sys-apps/hotplug-base-20040401

     Thu Nov 23 21:10:55 2006 >>> sys-fs/udev-087-r1

     Thu Nov 23 21:13:14 2006 >>> sys-kernel/gentoo-sources-2.6.17-r8

     Thu Nov 23 21:14:16 2006 >>> media-sound/alsa-driver-1.0.13

     Thu Nov 23 21:16:10 2006 >>> media-libs/alsa-lib-1.0.13

     Thu Nov 23 21:16:46 2006 >>> x11-libs/libXi-1.0.1

     Thu Nov 23 21:16:54 2006 >>> x11-proto/recordproto-1.13.2

     Thu Nov 23 21:17:12 2006 >>> x11-libs/libXtst-1.0.1

     Thu Nov 23 21:17:20 2006 >>> x11-proto/printproto-1.0.3

     Thu Nov 23 21:17:45 2006 >>> x11-libs/libXp-1.0.0

     Thu Nov 23 21:27:02 2006 >>> dev-java/sun-jdk-1.5.0.08

     Thu Nov 23 21:27:04 2006 >>> virtual/jdk-1.5.0

     Thu Nov 23 21:30:41 2006 >>> sys-libs/db-4.2.52_p4-r2

     Thu Nov 23 21:32:43 2006 >>> sys-devel/libperl-5.8.8-r1

     Thu Nov 23 21:37:54 2006 >>> dev-lang/perl-5.8.8-r2

     Thu Nov 23 21:41:40 2006 >>> dev-libs/openssl-0.9.8d

     Thu Nov 23 21:41:45 2006 >>> perl-core/Test-Harness-2.56

     Thu Nov 23 21:41:48 2006 >>> app-admin/perl-cleaner-1.04.3

     Thu Nov 23 21:41:55 2006 >>> perl-core/PodParser-1.34

     Thu Nov 23 21:42:02 2006 >>> app-misc/ca-certificates-20050804

     Thu Nov 23 21:42:19 2006 >>> dev-libs/expat-1.95.8

     Thu Nov 23 21:45:05 2006 >>> dev-lang/python-2.4.3-r4

     Thu Nov 23 21:45:09 2006 >>> dev-python/python-fchksum-1.7.1

     Thu Nov 23 21:45:55 2006 >>> sys-apps/sandbox-1.2.17

     Thu Nov 23 21:46:02 2006 >>> app-misc/pax-utils-0.1.13

     Thu Nov 23 21:46:15 2006 >>> dev-python/pycrypto-2.0.1-r5

     Thu Nov 23 21:46:23 2006 >>> sys-apps/portage-2.1.1-r1

     Thu Nov 23 21:46:54 2006 >>> sys-apps/man-pages-2.39

     Thu Nov 23 21:47:02 2006 >>> app-i18n/man-pages-it-0.3.4

     Thu Nov 23 21:47:25 2006 >>> sys-apps/grep-2.5.1-r8

     Thu Nov 23 21:47:37 2006 >>> sys-apps/pciutils-2.2.0-r1

     Thu Nov 23 21:47:57 2006 >>> dev-util/dialog-1.0.20050206

     Thu Nov 23 21:48:18 2006 >>> media-sound/alsa-utils-1.0.13

     Thu Nov 23 21:48:31 2006 >>> sys-libs/timezone-data-2006o

     Thu Nov 23 21:48:39 2006 >>> sys-devel/gcc-config-1.3.13-r4

     Thu Nov 23 21:51:26 2006 >>> dev-libs/gmp-4.2.1

     Thu Nov 23 21:52:02 2006 >>> sys-devel/bison-2.2

     Thu Nov 23 21:53:40 2006 >>> dev-libs/mpfr-2.2.0_p10

     Thu Nov 23 22:54:19 2006 >>> sys-devel/gcc-4.1.1

     Fri Nov 24 00:05:00 2006 >>> sys-libs/glibc-2.4-r4

     Fri Nov 24 00:06:59 2006 >>> dev-libs/glib-2.10.3

     Fri Nov 24 00:07:29 2006 >>> dev-perl/XML-Parser-2.34

     Fri Nov 24 00:07:40 2006 >>> dev-util/intltool-0.35.0

     Fri Nov 24 00:10:42 2006 >>> dev-libs/libxml2-2.6.26

     Fri Nov 24 00:11:01 2006 >>> x11-misc/shared-mime-info-0.17-r2

     Fri Nov 24 00:12:05 2006 >>> media-libs/freetype-2.1.10-r2

     Fri Nov 24 00:12:13 2006 >>> x11-proto/renderproto-0.9.2

     Fri Nov 24 00:12:37 2006 >>> x11-libs/libXrender-0.9.1

     Fri Nov 24 00:14:02 2006 >>> media-libs/fontconfig-2.3.2-r1

     Fri Nov 24 00:14:33 2006 >>> x11-libs/libXft-2.1.10

     Fri Nov 24 00:14:36 2006 >>> virtual/xft-7.0

     Fri Nov 24 00:15:49 2006 >>> media-libs/libpng-1.2.12-r1

     Fri Nov 24 00:17:01 2006 >>> x11-libs/cairo-1.0.4-r1

     Fri Nov 24 00:17:41 2006 >>> media-libs/jpeg-6b-r7

     Fri Nov 24 00:19:08 2006 >>> media-libs/tiff-3.8.2-r2

     Fri Nov 24 00:19:16 2006 >>> x11-proto/fixesproto-4.0

     Fri Nov 24 00:19:36 2006 >>> x11-libs/libXfixes-4.0.1

     Fri Nov 24 00:19:44 2006 >>> x11-proto/randrproto-1.1.2

     Fri Nov 24 00:20:03 2006 >>> x11-libs/libXrandr-1.1.1

     Fri Nov 24 00:20:25 2006 >>> x11-libs/libXcursor-1.1.7

     Fri Nov 24 00:20:33 2006 >>> x11-proto/xineramaproto-1.1.2

     Fri Nov 24 00:21:09 2006 >>> dev-libs/atk-1.12.1

     Fri Nov 24 00:21:18 2006 >>> x11-proto/xf86miscproto-0.9.2

     Fri Nov 24 00:21:36 2006 >>> x11-libs/libXxf86misc-1.0.1

     Fri Nov 24 00:22:00 2006 >>> x11-libs/liblbxutil-1.0.1

     Fri Nov 24 00:22:28 2006 >>> x11-libs/libxkbfile-1.0.3

     Fri Nov 24 00:22:47 2006 >>> x11-libs/libxkbui-1.0.2

     Fri Nov 24 00:22:54 2006 >>> x11-proto/xf86dgaproto-2.0.2

     Fri Nov 24 00:23:02 2006 >>> x11-proto/videoproto-2.2.2

     Fri Nov 24 00:23:43 2006 >>> x11-libs/libXmu-1.0.2

     Fri Nov 24 00:24:20 2006 >>> x11-libs/libXpm-3.5.5

     Fri Nov 24 00:24:30 2006 >>> sys-apps/ed-0.2-r6

     Fri Nov 24 00:25:58 2006 >>> x11-libs/libXaw-1.0.2

     Fri Nov 24 00:26:06 2006 >>> x11-proto/trapproto-3.4.3

     Fri Nov 24 00:26:14 2006 >>> x11-proto/xf86driproto-2.0.3

     Fri Nov 24 00:26:26 2006 >>> app-arch/bzip2-1.0.3-r6

     Fri Nov 24 00:26:59 2006 >>> sys-apps/file-4.17-r1

     Fri Nov 24 00:27:10 2006 >>> app-admin/eselect-1.0.2

     Fri Nov 24 00:27:16 2006 >>> app-admin/eselect-opengl-1.0.3

     Fri Nov 24 00:27:25 2006 >>> x11-apps/rgb-1.0.1

     Fri Nov 24 00:27:34 2006 >>> x11-apps/iceauth-1.0.1

     Fri Nov 24 00:27:42 2006 >>> x11-proto/fontsproto-2.0.2

     Fri Nov 24 00:28:02 2006 >>> x11-libs/libfontenc-1.0.2

     Fri Nov 24 00:28:12 2006 >>> x11-apps/mkfontscale-1.0.1

     Fri Nov 24 00:28:21 2006 >>> media-fonts/encodings-1.0.0

     Fri Nov 24 00:28:31 2006 >>> media-fonts/font-util-1.0.1

     Fri Nov 24 00:28:38 2006 >>> x11-proto/fontcacheproto-0.1.2

     Fri Nov 24 00:30:17 2006 >>> x11-libs/libXfont-1.2.2

     Fri Nov 24 00:30:26 2006 >>> x11-apps/bdftopcf-1.0.0

     Fri Nov 24 00:30:34 2006 >>> x11-apps/mkfontdir-1.0.2

     Fri Nov 24 00:31:25 2006 >>> media-fonts/font-adobe-75dpi-1.0.0

     Fri Nov 24 00:31:33 2006 >>> media-fonts/font-alias-1.0.1

     Fri Nov 24 00:31:40 2006 >>> x11-proto/xf86rushproto-1.1.2

     Fri Nov 24 00:32:19 2006 >>> media-fonts/font-misc-misc-1.0.0

     Fri Nov 24 00:32:27 2006 >>> x11-proto/damageproto-1.0.3

     Fri Nov 24 00:32:37 2006 >>> media-fonts/font-cursor-misc-1.0.0

     Fri Nov 24 00:32:45 2006 >>> x11-proto/resourceproto-1.0.2

     Fri Nov 24 00:33:04 2006 >>> x11-libs/libXres-1.0.1

     Fri Nov 24 00:33:20 2006 >>> x11-apps/xkbcomp-1.0.2

     Fri Nov 24 00:33:36 2006 >>> x11-misc/xkeyboard-config-0.8

     Fri Nov 24 00:33:45 2006 >>> x11-proto/evieext-1.0.2

     Fri Nov 24 00:33:55 2006 >>> x11-apps/xauth-1.0.1

     Fri Nov 24 00:34:04 2006 >>> x11-misc/xbitmaps-1.0.1

     Fri Nov 24 00:34:14 2006 >>> x11-misc/makedepend-1.0.0

     Fri Nov 24 00:34:22 2006 >>> x11-proto/xf86vidmodeproto-2.2.2

     Fri Nov 24 00:34:32 2006 >>> x11-proto/glproto-1.4.8

     Fri Nov 24 00:34:53 2006 >>> x11-libs/libXxf86vm-1.0.1

     Fri Nov 24 00:35:12 2006 >>> x11-libs/libdrm-2.0.2

     Fri Nov 24 00:40:18 2006 >>> media-libs/mesa-6.5.1-r1

     Fri Nov 24 00:40:29 2006 >>> x11-apps/xrdb-1.0.2

     Fri Nov 24 00:40:44 2006 >>> x11-wm/twm-1.0.1

     Fri Nov 24 00:41:07 2006 >>> sys-libs/cracklib-2.8.9-r1

     Fri Nov 24 00:41:30 2006 >>> sys-devel/flex-2.5.33-r1

     Fri Nov 24 00:43:39 2006 >>> sys-libs/pam-0.78-r3

     Fri Nov 24 00:43:50 2006 >>> net-misc/netkit-rsh-0.17-r7

     Fri Nov 24 00:44:03 2006 >>> x11-apps/xsm-1.0.1

     Fri Nov 24 00:44:14 2006 >>> x11-apps/xclock-1.0.2

     Fri Nov 24 00:44:32 2006 >>> x11-apps/xinit-1.0.2-r6

     Fri Nov 24 00:44:40 2006 >>> app-crypt/hashalot-0.3-r2

     Fri Nov 24 00:45:24 2006 >>> sys-libs/com_err-1.39

     Fri Nov 24 00:45:55 2006 >>> sys-libs/ss-1.39

     Fri Nov 24 00:47:01 2006 >>> sys-fs/e2fsprogs-1.39

     Fri Nov 24 00:47:40 2006 >>> sys-apps/util-linux-2.12r-r4

     Fri Nov 24 00:47:51 2006 >>> sys-apps/which-2.16

     Fri Nov 24 00:48:19 2006 >>> app-arch/cpio-2.6-r5

     Fri Nov 24 00:48:23 2006 >>> app-arch/rpm2targz-9.0-r3

     Fri Nov 24 00:48:34 2006 >>> sys-libs/libutempter-1.1.4.1

     Fri Nov 24 00:49:01 2006 >>> x11-terms/xterm-218

     Fri Nov 24 00:49:08 2006 >>> x11-proto/compositeproto-0.3.1

     Fri Nov 24 00:49:16 2006 >>> x11-proto/scrnsaverproto-1.1.0

     Fri Nov 24 01:06:23 2006 >>> x11-base/xorg-server-1.1.1-r1

     Fri Nov 24 01:07:26 2006 >>> x11-drivers/xf86-video-vga-4.1.0

     Fri Nov 24 01:09:01 2006 >>> x11-drivers/xf86-video-nv-1.2.0

     Fri Nov 24 01:10:52 2006 >>> x11-drivers/xf86-video-vesa-1.2.1

     Fri Nov 24 01:11:12 2006 >>> x11-drivers/xf86-input-mouse-1.1.1

     Fri Nov 24 01:11:37 2006 >>> x11-drivers/xf86-video-apm-1.1.1

     Fri Nov 24 01:11:55 2006 >>> x11-libs/libXv-1.0.1

     Fri Nov 24 01:12:17 2006 >>> x11-libs/libXvMC-1.0.2
```

Compilazione interrota da me, ho ricominciato tramite --resume

```
  Fri Nov 24 14:05:58 2006 >>> x11-libs/pango-1.12.3

     Fri Nov 24 14:06:11 2006 >>> sys-devel/automake-1.7.9-r1

     Fri Nov 24 14:14:01 2006 >>> x11-libs/gtk+-2.8.19

     Fri Nov 24 14:14:46 2006 >>> rox-base/rox-2.2.0

     Fri Nov 24 14:14:51 2006 >>> net-analyzer/netselect-0.3-r1

     Fri Nov 24 14:14:53 2006 >>> app-portage/mirrorselect-1.2

     Fri Nov 24 14:14:56 2006 >>> virtual/glu-7.0

     Fri Nov 24 14:14:58 2006 >>> virtual/opengl-7.0

     Fri Nov 24 14:15:47 2006 >>> media-libs/audiofile-0.2.6-r2

     Fri Nov 24 14:17:45 2006 >>> media-libs/libsdl-1.2.11

     Fri Nov 24 14:18:21 2006 >>> dev-libs/glib-1.2.10-r5

     Fri Nov 24 14:18:28 2006 >>> sys-devel/automake-1.4_p6

     Fri Nov 24 14:22:18 2006 >>> x11-libs/gtk+-1.2.10-r12

     Fri Nov 24 14:23:36 2006 >>> media-libs/smpeg-0.4.4-r8

     Fri Nov 24 14:23:51 2006 >>> media-libs/sdl-gfx-2.0.13-r1

     Fri Nov 24 14:23:57 2006 >>> dev-perl/yaml-0.62

     Fri Nov 24 14:24:06 2006 >>> dev-perl/Compress-Zlib-1.42

     Fri Nov 24 14:24:09 2006 >>> dev-perl/IO-Zlib-1.04

     Fri Nov 24 14:24:12 2006 >>> virtual/perl-Test-Harness-2.56

     Fri Nov 24 14:24:15 2006 >>> dev-perl/IO-String-1.08

     Fri Nov 24 14:24:19 2006 >>> dev-perl/Archive-Tar-1.29

     Fri Nov 24 14:24:26 2006 >>> dev-perl/module-build-0.28.05

     Fri Nov 24 14:24:30 2006 >>> dev-perl/ExtUtils-CBuilder-0.18

     Fri Nov 24 14:24:35 2006 >>> dev-perl/extutils-parsexs-2.15

     Fri Nov 24 14:25:16 2006 >>> media-libs/sdl-mixer-1.2.7

     Fri Nov 24 14:25:40 2006 >>> media-libs/sdl-ttf-2.0.8

     Fri Nov 24 14:25:48 2006 >>> media-libs/sdl-net-1.2.5

     Fri Nov 24 14:26:18 2006 >>> media-libs/sdl-image-1.2.5-r1

     Fri Nov 24 14:26:41 2006 >>> dev-perl/sdl-perl-2.1.3-r2
```

Interrotto per un errore....

Correzioni varie

```
  Fri Nov 24 14:41:27 2006 >>> media-libs/libmikmod-3.1.11-r2

     Fri Nov 24 14:42:04 2006 >>> media-libs/sdl-mixer-1.2.7

     Fri Nov 24 14:44:03 2006 >>> media-libs/libmikmod-3.1.11-r2

     Fri Nov 24 14:44:37 2006 >>> media-libs/sdl-mixer-1.2.7

     Fri Nov 24 14:59:49 2006 >>> dev-perl/DateManip-5.44

     Fri Nov 24 14:59:52 2006 >>> app-portage/genlop-0.30.5
```

Dopo lo script ewo ricomincia da capo 

```

     Sat Nov 25 01:06:26 2006 >>> sys-libs/zlib-1.2.3-r1

     Sat Nov 25 15:35:15 2006 >>> virtual/libiconv-0

     Sat Nov 25 15:40:24 2006 >>> sys-devel/gettext-0.15

     Sat Nov 25 15:40:47 2006 >>> sys-libs/gpm-1.20.1-r5

     Sat Nov 25 15:43:26 2006 >>> sys-libs/ncurses-5.5-r3

```

 :Rolling Eyes: 

----------

## mrfree

Farò dei test, non vorrei che nelle ultime versioni di portage e genlop qualcosa sia cambiato.

Posta intanto le versioni che tu utilizzi.

----------

## Kardo

ok ti ringrazio ma non vorrei aver sbagliato qualcosa io   :Rolling Eyes: 

inserisco la data nell ewo.py

poi lancio 

```
   ./ewo.py 
```

e infine

```
emerge -eav  `./ewo.py`
```

La versione di genlop è la 0.30.5

mentre portage è 2.1.1-r1

grazie , ciauz

----------

## mrfree

ECCO il problema!!  :Smile: 

```
emerge -eav  `./ewo.py`
```

non devi utilizzare l'opzione -e!!!

Il comando giusto è questo (forse dovevi leggere con più attenzione il mio primo post  :Wink: )

```
emerge -1 -va `./ewo.py`
```

Buona ricompilazione!

----------

## Kardo

Perfetto ora funziano tutto   :Very Happy: 

Avevo visto che mancava la "-e" ma era più forte di me e la inserivo sempre   :Rolling Eyes: 

grazie, ciauzzzzzzzzzzzz

----------

## mrfree

 *Kardo wrote:*   

> Perfetto ora funziano tutto

 Bene!

 *Kardo wrote:*   

> Avevo visto che mancava la "-e" ma era più forte di me e la inserivo sempre

 Ehhhh bisogna imparare a resistere a certe tentazioni  :Smile: 

----------

## fabius

Ho leggermente modificato lo script per specificare la data di partenza da linea di comando.

```
#! /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

#

# Emerge (-e) World Optimizer (EWO)

# EWO 0.1 Copyright 2006 Frittella Laurento <mrfree@infinito.it>

import re, commands, sys, getopt, os

from portage import pkgsplit

world = []

alreadydone = []

toskip = []

todo = []

def fill_world_ng():

   global world

   raw_emerge_pattern = re.compile('\[.+\]\s+([^\s]+).*')

   raw_pkglist = commands.getstatusoutput('emerge -ep --quiet --nospinner world')

   if raw_pkglist[0] == 0:

      pkglist = raw_pkglist[1].split('\n')   

      for pkg in pkglist:

         match = raw_emerge_pattern.match(pkg)

         if match:

            world.append(match.group(1))

   else:

      raise Exception('Oops! No world packages list...')

def fill_alreadydone(from_date):

   global alreadydone

   raw_genlop_pattern = re.compile('.+>>>\s+([^\s]+).*')

   raw_alreadydone_pkglist = commands.getstatusoutput('genlop -ln --date ' + from_date)

   if raw_alreadydone_pkglist[0] == 0:

      alreadydone_pkglist = raw_alreadydone_pkglist[1].split('\n')

      for pkg in alreadydone_pkglist:

         match = raw_genlop_pattern.match(pkg)

         if match:

            alreadydone.append(match.group(1))

   else:

      raise Exception('Oops! No already-done packages list...')

def usage():

   print "Usage: " + os.path.basename(sys.argv[0]) + " [-h] -d date\n"

   print "  -d date: set the starting date"

   print "       -h: print this help message"

def main():

   try:

      opts, args = getopt.getopt(sys.argv[1:], "d:h", ["date=", "help"])

   except getopt.GetoptError:

      print "Wrong syntax!!!\n"

      usage()

      sys.exit(2)

   from_date = ''

   for o, a in opts:

      if o in ("-h", "--help"):

         usage()

         sys.exit()

      if o in ("-d", "--date"):

         from_date = a

   if from_date == '':

      usage()

      sys.exit()

   fill_world_ng()

   fill_alreadydone(from_date)

      

   for pkg in world:

      if alreadydone.count(pkg) == 0 and toskip.count(pkg) == 0:

         todo.append(pkg)

   out = ''

   for pkg in todo:

      if toskip.count(pkgsplit(pkg)[0]) == 0:

         out += '=' + pkg + ' '

   print out

if __name__ == "__main__":

   main()

```

Ora mancherebbe un'opzione per caricare la blacklist da file o da linea di comando

----------

## mrfree

 *fabius wrote:*   

> Ho leggermente modificato lo script per specificare la data di partenza da linea di comando.
> 
> [...]
> 
> Ora mancherebbe un'opzione per caricare la blacklist da file o da linea di comando

 

Bene, mi fa piacere che lo script risulti utile  :Wink: 

Implementerò le nuove funzionalità appena possibile, approfittando di questa occasione per raffinare le mie conoscenze di python  :Wink: 

----------

## fabius

 *mrfree wrote:*   

> Implementerò le nuove funzionalità appena possibile, approfittando di questa occasione per raffinare le mie conoscenze di python 

 

Per me, invece, sono state le prime righe di codice scritte in python  :Laughing: 

----------

## mrfree

 *fabius wrote:*   

> Per me, invece, sono state le prime righe di codice scritte in python 

 

Beh allora l'ewo porta bene, per me è stato il primo script scritto in python  :Wink: 

----------

## mrfree

Ecco la nuova versione 0.2 con alcune migliorie, tra le principali:

* migliore gestione della data di inzio ricompilazione termonucleareglobale (opzioni {-s, -P, -v})

* utilizzo della directory ~/.ewo per i file utilizzati dal programma

* non è più necessario modificare manualmente lo script per specificare pacchetti da "skippare" e data di inizio

Ho scelto di non postare il codice direttamente sul forum, potere scaricarlo (e verificarlo) in questo modo

```
$ wget http://sulmonalug.altervista.org/mrfree/ewo-0.2.py http://sulmonalug.altervista.org/mrfree/ewo-0.2.py.DIGEST

$ md5sum -c ewo-0.2.py.DIGEST

```

```
$ ./ewo-0.2.py --help

EWO - Emerge (-e) World Optimizer (v0.2)

usage: ewo-0.2.py [options]

options:

  --version             show program's version number and exit

  -h, --help            show this help message and exit

  -s TOUCH_FROMDATE, --setstart=TOUCH_FROMDATE

                        set the starting point (possible values are 'NOW' or a

                        genlop-style date like 'Mon Jun 05 11:09:37 2007')

  -P, --purgestart      remove the previously set starting point

  -v, --showstart       show the already set starting point

  -f, --fetchonly       use the --fetchonly option in the emerge command

  -m MODE, --mode=MODE  using mode 'exec' an 'emerge -1 [...]' will start

                        automatically; using 'pretend' ewo simply shows the

                        todo packages list on the stdout and using 'emerge-

                        pretend' (Default) the output of 'emerge -1vp [...] |

                        less' will be shown
```

Dovrebbe essere abbastanza intuitivo, in caso contrario postate pure le vostre osservazioni e modificherò EWO di conseguenza (oppure mi deciderò a scrivere una guida sul wiki)  :Wink: 

```
~/.ewo/package.skip
```

Questo file da utilizzare per specificare gli ebuild che non si intende ricompilare (pacchetti binari tipo openoffice-bin ad esempio), un file di esempio viene creato alla prima esecuzione di EWO

Uno "screenshot"... che non guasta mai:

```
$ ./ewo_ng.py 

EWO - Emerge (-e) World Optimizer (v0.2)

Using 'Mon Feb 05 12:15:38 2007' as starting date

Checking ALL installed packages...

Checking Already-Done (re-compiled) packages...

'-e world' packages   : 876

Already done packages : 49

TODO packages         : 833

Skipped packages      : 2

   media-tv/democracy

   media-sound/hydrogen-0.9.3

Here is the todo package list:

(start EWO with '--mode=exec' to automatically start a convenient emerge)
```

----------

## Luca89

 *mrfree wrote:*   

> Ho scelto di non postare il codice direttamente sul forum, potere scaricarlo (e verificarlo) in questo modo
> 
> 

 

Se vuoi possiamo aggiungerlo al gechi-overlay per rendere l'installazione ancora più semplice per gli utenti  :Wink: 

```
~/.ewo/pck_to_skip
```

Io vedrei più leggibile "~/.ewo/package.skip", così è in linea con gli altri file di portage, volendo lo si potrebbe mettere direttamente nella directory /etc/portage.

----------

## mrfree

 *Luca89 wrote:*   

> Se vuoi possiamo aggiungerlo al gechi-overlay per rendere l'installazione ancora più semplice per gli utenti

  Benissimo. Non può che farmi piacere   :Cool: 

 *Luca89 wrote:*   

> Io vedrei più leggibile "~/.ewo/package.skip", così è in linea con gli altri file di portage, volendo lo si potrebbe mettere direttamente nella directory /etc/portage.

 Si in effetti hai ragione (ho modificato il sorgente linkato)

Per il path per adesso manterrei ~/.ewo e ci penso un po', vediamo magari anche gli altri cosa ne pensano  :Wink: 

----------

## Luca89

 *mrfree wrote:*   

>  *Luca89 wrote:*   Se vuoi possiamo aggiungerlo al gechi-overlay per rendere l'installazione ancora più semplice per gli utenti  Benissimo. Non può che farmi piacere   

 

Fatto.   :Wink: 

----------

## lopio

ciao

vi  risulta che ewo versione 2 funzioni anche nel sync attuale (stabile)?

Ho avuto come molti problemi con aggiornamento expat  alla versione 2 e visto che non ne vengo fuori volevo ricompilare il tutto con ewo ma ottengo degli errori iniziali relativi al comando emerge  (per ora non posso postare nulla).

grazie ciao

----------

