Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIPS] Tempi di compilazione...
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
anacleto44
n00b
n00b


Joined: 24 Aug 2005
Posts: 18

PostPosted: Thu Mar 23, 2006 3:19 pm    Post subject: [TIPS] Tempi di compilazione... Reply with quote

Sinceramente iniziare a fare l'aggiornamento del mio sistema e non sapere neanche orientativamente quanto impiegherò a completare tutto... mi ha sempre dato molto fastidio. L'utilità che ho trovato nel forum (genlop) mi permette di vedere quanto tempo ho impiegato nelle compilazioni precedenti...ma l'idea guardarmi ogni pacchetto manualmenete e singolarmente non mi andava molto giù. Così ho fatto questo piccolo script in perl che calcola quanto tempo impiegherò ad effettuare l'aggiornamento sommando tutti i tempi di ogni pacchetto nelle compilazioni precedenti.

gentime.pl:
Code:
#!/usr/bin/perl -w

$i = 0;
print "Avviato emerge --columns -puD world...\n";
@emerge = `emerge --columns -puD world`;
print "Calcolo in corso dei pacchetti...\n";
foreach $emerge(@emerge) {
   if (($emerge =~ "ebuild") && (($emerge =~ "U ]") || ($emerge =~ "UD]"))) {
      $i++;
      $string = "echo \"".$emerge."\" \| cut -d ']' -f 2 \| cut -d ' ' -f 2";
      $last = `$string`;
      chop($last);
      $emerge = $last;
      $time = `echo "\`genlop -t $last\`" | tail -n 1 | cut -d ':' -f 2`;
      chop($time);
      $time = `echo "$time"`;# | cut -d ';' -f 2 | cut -d '[' -f 1`;
      @time = split(/ /, $time);
      $minutes = 0;
      $hours = 0;
      $seconds = 0;
      foreach $time(@time) {
         if ($time =~ "minute") {
            $minutes = $last;
         } elsif ($time =~ "hour") {
            $hours = $last;
         } elsif ($time =~ "second") {
            $seconds = $last;
         }
         $last = $time;
      }
      $hours = `echo "$hours" | cut -d 'm' -f 2 | cut -d '[' -f 1`;
      $minutes = `echo "$minutes" | cut -d 'm' -f 2 | cut -d '[' -f 1`;
      $seconds = `echo "$seconds" | cut -d 'm' -f 2 | cut -d '[' -f 1`;
      $hours++; $hours--;
      $minutes++; $minutes--;
      $seconds++; $seconds--;
      chop($emerge);
      print "(".$i.") $emerge => Ore: $hours Minuti: $minutes Secondi: $seconds\n";
      $seconds = $seconds + $minutes*60 + $hours*3600;
      print "Secondi Totali Pacchetto: $seconds\n";
      $sum += $seconds;
   }
}
print "Totale secondi tutti pacchetti: $sum\n";
$hours = int($sum/3600);
$minutes = int($sum/60) - ($hours*60);
$seconds = $sum - $minutes*60 - $hours*3600;
print "Ore totali: $hours Minuti totali: $minutes Secondi totali: $seconds\n";


Naturalmente e' richiesto genlop e il risultato del suo utilizzo è questo:

Se ad esempio voglio aggiornare questi pacchetti sul sistema:
Quote:
These are the packages that would be merged, in order:

Calculating world dependencies ..... ..^H^H... done!
[ebuild U ] sys-libs/libstdc++-v3 [3.3.6] [3.3.4] USE="-build% -nptl%"
[ebuild U ] sys-libs/glibc [2.4-r1] [2.3.5-r2]
[ebuild U ] sys-devel/gettext [0.14.5] [0.14.4] USE="-nocxx%"
[ebuild U ] sys-apps/groff [1.19.2-r1] [1.19.1-r2]
[ebuild U ] sys-libs/db [4.2.52_p4] [4.2.52_p2-r1] USE="-java*"
[ebuild U ] sys-devel/libperl [5.8.8] [5.8.7]
[ebuild U ] dev-lang/perl [5.8.8] [5.8.7-r3]
[ebuild U ] app-admin/perl-cleaner [1.03] [1.01]
[ebuild U ] dev-lang/python [2.4.2-r1] [2.4.2]
[ebuild U ] sys-apps/sandbox [1.2.17] [1.2.12]
[ebuild U ] sys-apps/debianutils [2.15] [2.14.1-r1]
[ebuild U ] sys-apps/man-pages [2.26] [2.25]
[ebuild U ] sys-apps/grep [2.5.1a] [2.5.1-r8]
[ebuild U ] sys-apps/help2man [1.35.1] [1.33.1]
[ebuild U ] sys-devel/autoconf-wrapper [3.2] [3-r1]
[ebuild U ] media-libs/freetype [2.1.10] [2.1.9-r1]
[ebuild U ] media-libs/fontconfig [2.3.2] [2.2.3]
[ebuild U ] sys-apps/file [4.17-r1] [4.13]
[ebuild U ] sys-apps/util-linux [2.12r-r3] [2.12r-r2]
[ebuild U ] app-arch/rpm2targz [9.0-r4] [9.0-r3]
[ebuild U ] sys-apps/coreutils [5.94-r1] [5.2.1-r7]


per sapere orientativamente quanto impiegherò basta avviare lo script e il risultato sarà come questo:
Code:
Avviato emerge --columns -puD world...
Calcolo in corso dei pacchetti...
(1) sys-libs/libstdc++-v3 => Ore: 0 Minuti: 26 Secondi: 33
Secondi Totali Pacchetto: 1593
(2) sys-libs/glibc => Ore: 0 Minuti: 37 Secondi: 38
Secondi Totali Pacchetto: 2258
(3) sys-devel/gettext => Ore: 0 Minuti: 8 Secondi: 44
Secondi Totali Pacchetto: 524
(4) sys-apps/groff => Ore: 0 Minuti: 1 Secondi: 53
Secondi Totali Pacchetto: 113
(5) sys-libs/db => Ore: 0 Minuti: 9 Secondi: 34
Secondi Totali Pacchetto: 574
(6) sys-devel/libperl => Ore: 0 Minuti: 3 Secondi: 5
Secondi Totali Pacchetto: 185
(7) dev-lang/perl => Ore: 0 Minuti: 5 Secondi: 44
Secondi Totali Pacchetto: 344
(8) app-admin/perl-cleaner => Ore: 0 Minuti: 0 Secondi: 42
Secondi Totali Pacchetto: 42
(9) dev-lang/python => Ore: 0 Minuti: 8 Secondi: 41
Secondi Totali Pacchetto: 521
(10) sys-apps/sandbox => Ore: 0 Minuti: 1 Secondi: 21
Secondi Totali Pacchetto: 81
(11) sys-apps/debianutils => Ore: 0 Minuti: 1 Secondi: 27
Secondi Totali Pacchetto: 87
(12) sys-apps/man-pages => Ore: 0 Minuti: 2 Secondi: 7
Secondi Totali Pacchetto: 127
(13) sys-apps/grep => Ore: 0 Minuti: 1 Secondi: 38
Secondi Totali Pacchetto: 98
(14) sys-apps/help2man => Ore: 0 Minuti: 0 Secondi: 10
Secondi Totali Pacchetto: 10
(15) sys-devel/autoconf-wrapper => Ore: 0 Minuti: 0 Secondi: 37
Secondi Totali Pacchetto: 37
(16) media-libs/freetype => Ore: 0 Minuti: 2 Secondi: 25
Secondi Totali Pacchetto: 145
(17) media-libs/fontconfig => Ore: 0 Minuti: 1 Secondi: 9
Secondi Totali Pacchetto: 69
(18) sys-apps/file => Ore: 0 Minuti: 0 Secondi: 40
Secondi Totali Pacchetto: 40
(19) sys-apps/util-linux => Ore: 0 Minuti: 2 Secondi: 22
Secondi Totali Pacchetto: 142
(20) app-arch/rpm2targz => Ore: 0 Minuti: 0 Secondi: 12
Secondi Totali Pacchetto: 12
(21) sys-apps/coreutils => Ore: 0 Minuti: 8 Secondi: 53
Secondi Totali Pacchetto: 533
Totale secondi tutti pacchetti: 7535
Ore totali: 2 Minuti totali: 5 Secondi totali: 35


Spero sia utile. Fatemi sapere. (P.S.: e' orientativo e basato sui tempi dell'ultima compilazione di ogni pacchetto)
Back to top
View user's profile Send private message
skakz
Guru
Guru


Joined: 03 Jul 2004
Posts: 380
Location: Ischia/Napoli/Italia/Terra

PostPosted: Sat Mar 25, 2006 10:45 am    Post subject: Reply with quote

oppure semplicemente accodare genlop ad emerge -up world...... :o

Code:
sk@omega ~ $ emerge -up world | genlop -p
These are the pretended packages: (this may take a while; wait...)

[ebuild     U ] media-libs/libsndfile-1.0.15 [1.0.12-r1] USE="alsa%"


Estimated update time: 7 minutes.
sk@omega ~ $

_________________
Linux Registered User n.340423
Linux User Group Ischia
www.tush.it
Back to top
View user's profile Send private message
anacleto44
n00b
n00b


Joined: 24 Aug 2005
Posts: 18

PostPosted: Sat Mar 25, 2006 2:39 pm    Post subject: Reply with quote

Ok...sono io che mi complico la vita...apposto :P
Back to top
View user's profile Send private message
!ico
Apprentice
Apprentice


Joined: 26 Oct 2005
Posts: 199
Location: Bassano del Grappa (VI)

PostPosted: Thu Mar 30, 2006 1:46 pm    Post subject: Reply with quote

se può servire nel forum internazionale ancora anni fa era stato postato questo script per sapere la percentuale di compilazione di un ebuild:
http://forums.gentoo.org/viewtopic.php?t=197646

io lo uso costantemente e lo trovo molto comodo, l'unico problema è che bisogna lanciarlo per vedere la percentuale (non ha una barra che avanza..)

ola ;)
_________________
" I tasti iniziano. I tasti finiscono. Tu sai che sono 88; su questo nessuno può fregarti. Non sono infiniti loro. Tu, tu sei infinito, e dentro quei tasti, infinita è la musica che puoi fare. Loro sono 88. Tu sei infinito".
Novecento (Baricco)
Back to top
View user's profile Send private message
anacleto44
n00b
n00b


Joined: 24 Aug 2005
Posts: 18

PostPosted: Sun Apr 02, 2006 1:10 pm    Post subject: Reply with quote

Visto che lo script per il controllo della percentuale che ci hai postato non aveva la barra, ho fatto un bello script per il controllo della percentuale con la barra, che si interrompe al 100% della compilazione o con un semplice CTRL+C.

pprogressbar.pl
Code:
#!/usr/bin/perl -w

$tmpdir = "/var/tmp";
$portagedir = $tmpdir."/portage";
$ple = "/bin/ls -l ".$portagedir."/";
@packageslist = `$ple`;
shift(@packageslist);
$packageslist_size = @packageslist."";
$percent = 0;
$x = -1;
for ($i=0; $i<$packageslist_size; $i++) {
   while($packageslist[$i] =~ /  /) {
      $packageslist[$i] =~ s/  / /;
   }
   @plist = split(/ /, $packageslist[$i]);
   $packageslist[$i] = $plist[8];
   chop($packageslist[$i]);
   if ($packageslist[$i] ne "homedir") {
      $pack[++$x] = $packageslist[$i];
   }
}
print "Trovati i seguenti pacchetti in compilazione: \n";
for ($i=0; $i<=$x; $i++) {
   print "\t[".$i."] ".$pack[$i]."\n";
}
print "Quale pacchetto deve essere controllato? ";
$n = <STDIN>;
$pack = $pack[$n];

$c_file = "find ".$portagedir."/".$pack."/ -name *.c* | wc -l";
$c_file = `$c_file`;

if ($c_file == 0) { print "Nessun file da compilare trovato! Stop!\n"; exit 1; }

$len = 0;
while ($percent < 100) {
for ($i=0; $i<$len; $i++) { print "\b"; }
$len = 0;
$o_file = "find ".$portagedir."/".$pack."/ -name *.o | wc -l";
$o_file = `$o_file`;
print $pack.": ";
$len += length($pack) + 2;
if ($c_file != 0) {
$percent = int($o_file * 100 / $c_file);
} else {
$percent = 0;
}
print $percent;
$len += length($percent);
print "% |";
$len += 3;
for ($i=0; $i<$percent/2-1; $i++) {
   $len++;
   print "=";
}
$len++;
print ">";
for ($i=0; $i<48-int($percent/2-1); $i++) {
   $len++;
   print "#";
}
$len++;
print "|";
`sleep 1`;
}
print "\n";


Il risultato è questo:
Code:
localhost anacleto44 # ./pprogressbar.pl
Trovati i seguenti pacchetti in compilazione:
   [0] kde-i18n-3.5.2
   [1] qcad-2.0.4.0-r3
Quale pacchetto deve essere controllato? 1
qcad-2.0.4.0-r3: 59% |=============================>####################|
Back to top
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Sun Apr 02, 2006 7:22 pm    Post subject: Reply with quote

Bel tool, ottimo lavoro.
_________________
Running Fast!
Back to top
View user's profile Send private message
Ilvalle
Guru
Guru


Joined: 07 Mar 2005
Posts: 325
Location: Gallarate - ITALY

PostPosted: Mon Apr 03, 2006 9:24 am    Post subject: Reply with quote

Code:
ada ~ # ./progre_time.pl
Trovati i seguenti pacchetti in compilazione:
        [0] httptunnel-3.3
Quale pacchetto deve essere controllato? 0
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####||
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|
find: /var/tmp/portage/httptunnel-3.3/: No such file or directory#####|


Terminato alla fine con un crt -C

Se la cartella /var/tmp/portage e' vuota saltano fuori alcuni errori...
Si potrebbe usare in qualche modo la variabile del Make.conf per leggere
la tmp dir??? Io per esempio di default uso /tmp.(montata in ram)


Paolo
Back to top
View user's profile Send private message
!ico
Apprentice
Apprentice


Joined: 26 Oct 2005
Posts: 199
Location: Bassano del Grappa (VI)

PostPosted: Mon Apr 03, 2006 1:20 pm    Post subject: Reply with quote

uh, ottimo lavoro!
ola ;)
_________________
" I tasti iniziano. I tasti finiscono. Tu sai che sono 88; su questo nessuno può fregarti. Non sono infiniti loro. Tu, tu sei infinito, e dentro quei tasti, infinita è la musica che puoi fare. Loro sono 88. Tu sei infinito".
Novecento (Baricco)
Back to top
View user's profile Send private message
anacleto44
n00b
n00b


Joined: 24 Aug 2005
Posts: 18

PostPosted: Mon Apr 03, 2006 4:29 pm    Post subject: Reply with quote

Ilvalle provvedo subito a effettuare le correzioni. A tra poco
Back to top
View user's profile Send private message
anacleto44
n00b
n00b


Joined: 24 Aug 2005
Posts: 18

PostPosted: Mon Apr 03, 2006 5:00 pm    Post subject: Reply with quote

Ecco il nuovo codice con le correzioni effettuate:

Code:
#!/usr/bin/perl -w

$tmpdir = `cat /etc/make.globals | grep PORTAGE_TMPDIR | cut -d '=' -f 2`;
$tmpdir_conf = `cat /etc/make.conf | grep PORTAGE_TMPDIR | cut -d '=' -f 2`;
if (length($tmpdir_conf) > 0) {
   $tmpdir = $tmpdir_conf;
}
chop($tmpdir);
$portagedir = $tmpdir."/portage";
$ple = "/bin/ls -l ".$portagedir."/";
@packageslist = `$ple`;
shift(@packageslist);
$packageslist_size = @packageslist."";
$percent = 0;
$x = -1;
for ($i=0; $i<$packageslist_size; $i++) {
   while($packageslist[$i] =~ /  /) {
      $packageslist[$i] =~ s/  / /;
   }
   @plist = split(/ /, $packageslist[$i]);
   $packageslist[$i] = $plist[8];
   chop($packageslist[$i]);
   if ($packageslist[$i] ne "homedir") {
      $pack[++$x] = $packageslist[$i];
   }
}
if ($x == -1) { print "\nNessun pacchetto in compilazione trovato!\n"; exit 1; }
print "Trovati i seguenti pacchetti in compilazione: \n";
for ($i=0; $i<=$x; $i++) {
   print "\t[".$i."] ".$pack[$i]."\n";
}
print "Quale pacchetto deve essere controllato? ";
$n = <STDIN>;
if (($n > $x) || ($n < 0)) { print "\nErrore nella scelta del pacchetto!\n"; exit 1; }
$pack = $pack[$n];

$c_file = "find ".$portagedir."/".$pack."/ -name *.c* | wc -l";
$c_file = `$c_file`;

if ($c_file == 0) { print "Nessun file da compilare trovato!\n"; exit 1; }

$len = 0;
$lastpercent = -1;
while ($percent < 100) {
   if (! -d ($portagedir."/".$pack)) { print "\n\nDirectory non piu' presente!\n"; exit 1; }
   else {
      for ($i=0; $i<$len; $i++) { print "\b"; }
      $len = 0;
      $o_file = "find ".$portagedir."/".$pack."/ -name *.o | wc -l";
      $o_file = `$o_file`;
      print $pack.": ";
      $len += length($pack) + 2;
      if ($o_file != 0) {
         $percent = int($o_file * 100 / $c_file);
      } else {
         $percent = 0;
      }
      if ($percent <= $lastpercent) { $percent = $lastpercent; }
      print $percent;
      $lastpercent = $percent;
      $len += length($percent);
      print "% |";
      $len += 3;
      for ($i=0; $i<$percent/2-1; $i++) {
         $len++;
         print "=";
      }
      $len++;
      print ">";
      for ($i=0; $i<48-int($percent/2-1); $i++) {
         $len++;
         print "#";
      }
      $len++;
      print "|";
      `sleep 1`;
   }
}
print "\n";
exit 1;


Aggiunti e corretti:
    Il controllo per l'esistenza della directory.
    La lettura della PORTAGE_TMPDIR dal make.globals e successivamente dal make.conf
    Il controllo della scelta corretta del numero di pacchetto
    La percentuale può solo salire senza tornare indietro


Per qualsiasi altra correzione o consiglio fatemi sapere.

//$t4ck
Back to top
View user's profile Send private message
Ilvalle
Guru
Guru


Joined: 07 Mar 2005
Posts: 325
Location: Gallarate - ITALY

PostPosted: Wed Apr 05, 2006 9:15 am    Post subject: Reply with quote

ciao, l'ho provato ma c'e' ancora qualcosa che non va
Code:
ada ~ # ls /tmp/portage/
gpm-1.20.1-r4  homedir
ada ~ # ./progre_time.pl
Trovati i seguenti pacchetti in compilazione:
        [0] gpm-1.20.1-r4
Quale pacchetto deve essere controllato? 0


Directory non piu' presente!


:cry: :cry:

valle
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum