Emerge beobachten

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung.
Installationsmethoden LiveCDs Kernel & Hardware Laptops & Notebooks Portage System Netzwerke & Services X Software Anderes alphabetischer HOWTO Index


Inhaltsverzeichnis

[Bearbeiten] Einleitung

Vorab muss gesagt werden, dass man gerade beim ersten Mal bauen eines Ebuildes nicht sehen kann, wie lange es noch dauert (*). Mit dem Tool "genlop" kann man überprüfen, wie lange ein solches bereits gebautes Ebuild für den Kompiliervorgang benötigte und wie lange es voraussichtlich dauern wird, z.B. beim updaten, bis es fertig ist.

Mit diesem kleinen Hilfsmittel kann man sehen wie viel Zeit ein Paket noch ungefähr in Anspruch nehmen wird, in den meisten Fällen ist diese Angabe sogar sehr genau.

Wenn man viele Programme kompilieren möchte, verliert man vorallem bei grossen Paketen leicht den Überblick. Um sich auch hier ein wenig Klarheit zu verschaffen, eignet sich "tail" sehr gut.

(*) Seit genlop Version 0.30.7 gibt es die option -q. Bei dieser wird eine Online-Datenbank auf gentoo.linuxhowtos.org gefragt. Diese liefert dann einen Schätzwert basierend auf anderen Users mit der gleichen CPU.

[Bearbeiten] Software Vorbereitungen

Als erstes emergen wir genlop, tail ist schon bei den coreutils dabei, und ist somit schon auf dem System:

$ emerge --ask --verbose genlop

[Bearbeiten] Anwendung von genlop

Genlop kann man für zwei Dinge sehr gut nutzen, einmal um nachzuschauen wie lange ein Paket gebaut wurde und um zu prüfen, wie lange ein gerade bauendes Paket braucht. Man benötigt für genlop root-rechte, da genlop auf logs zugreift, die nur dem Bentuzer "root" zur Verfügung stehen.

z.B.: Eterm

Ein

$ genlop -t Eterm

ergibt:

* x11-terms/eterm
      .
      Fri Dec  2 02:37:22 2005 >>> x11-terms/eterm-0.9.3-r4
      merge time: 1 minute and 32 seconds.

Ausserdem gibt es noch die Funktion:

$ genlop -c

Diese funktioniert aber nur während eines emerge-Vorgangs, da sonst folgende Fehlermeldung erscheint:

!!! Error: no working merge found.
(the -c option only works if there is an ongoing compilation, see manpage)

Zum Zeitpunkt eines emerges erhält man z.B. folgende Zeilen:

 * www-client/mozilla-firefox-1.5.0.1-r4 
      .
      current merge time: 7 seconds.
      ETA: 1 hour, 14 minutes and 57 seconds.

Um den Status immer aktuell auf dem Bildschirm angezeigt zu bekommen kann man auch folgendes Kommando benutzen:

   watch genlop -cn

[Bearbeiten] Anwendung von tail

Tail eignet sich sehr gut, um nachzuprüfen, bei welchem Paket man sich gerade befindet:

tail /var/log/emerge.log

ergibt:

1144095769:  >>> emerge (2 of 2) app-misc/colortail-0.3.0-r3 to /
1144095769:  === (2 of 2) Cleaning (app-misc/colortail-0.3.0-r3::/usr/portage/ap 
p-misc/colortail/colortail-0.3.0-r3.ebuild)
1144095770:  === (2 of 2) Compiling/Merging (app-misc/colortail-0.3.0-r3::/usr/p 
ortage/app-misc/colortail/colortail-0.3.0-r3.ebuild)
1144095789:  >>> AUTOCLEAN: app-misc/colortail
1144095789:  --- AUTOCLEAN: Nothing unmerged.
1144095789:  === (2 of 2) Post-Build Cleaning (app-misc/colortail-0.3.0-r3::/usr 
/portage/app-misc/colortail/colortail-0.3.0-r3.ebuild)
1144095789:  ::: completed emerge (2 of 2) app-misc/colortail-0.3.0-r3 to /
1144095789:  *** Finished. Cleaning up...
1144095791:  *** exiting successfully.
1144095791:  *** terminating

Das Ganze kann man nun z.B. etwas genauer verfolgen, mittels grep:

colortail /var/log/emerge.log | grep emerge

Ergebnis:

1144095769:  >>> emerge (2 of 2) app-misc/colortail-0.3.0-r3 to /
1144095789:  ::: completed emerge (2 of 2) app-misc/colortail-0.3.0-r3 to /

Man kann tail auch dazu bringen, jede Veränderung des logs automatisch anzuhängen, so dass man eine kontinuierliche Ausgabe bekommt:

tail --follow --lines=200 /var/log/emerge.log

Und zu guter Letzt kombiniert man beides

tail --follow --lines=200 /var/log/emerge.log | grep emerge 

und bekommt Folgendes:

144536029:  ::: completed emerge (8 of 8) app-misc/screen-4.0.2-r5 to /
1144536053: Started emerge on: Apr 09, 2006 00:40:53
1144536053:  *** emerge  metadata
1144536335: Started emerge on: Apr 09, 2006 00:45:35

[Bearbeiten] Erweiterung

Wir haben das Ganze nun noch ein wenig verfeinert um tail und genlop zu kombinieren. Ihr müsst nur

Datei: /usr/bin/timecon.pl
#!/usr/bin/perl 
$timestamp = $ARGV[0];

print "       \e[32mcurrent merge started at \e[m".uhrzeit($timestamp)." \e[32mand it is part \e[m";
print $ARGV[1],$ARGV[2],$ARGV[3],$ARGV[4]."\n";

sub uhrzeit {
   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($_[0]);
   $year += 1900;
   $mon++;
   if ($mon < 10) {
      $mon = "0$mon";
   }
   if ($mday < 10) {
      $mday = "0$mday";
   }
   return "".$mday.".".$mon.".".$year." - ".$hour.':'.$min.':'.$sec;
   }


erzeugen.

Und die timeleft.sh in das Folgende ändern:

Datei: /usr/bin/timeleft.sh
#!/bin/sh
while genlop -c ; do
echo -e ""
tail -n 5 /var/log/emerge.log | grep Compiling | head -c 30 | xargs timecon.pl | \
sed s/=//g | sed s/\(// | sed s/\)// | sed s/of/"\ of "/
echo ""
sleep 20
done
echo "... error ..."


Die zwei Dateien müssen natürlich ausführbar sein:

Datei: $
$ chmod +x /usr/bin/timecon.pl
$ chmod +x /usr/bin/timeleft.sh


Als Resultat kommt dann heraus:

$ timeleft.sh
* dev-libs/nss-3.11-r1 
      .
      current merge time: 1 minute and 47 seconds.
      ETA: unknown.
      .
      current merge started at 22.04.2006 - 0:57:49 and it is part 4 of 5

Dadurch sieht man schön, an welchem Paket gerade kompiliert wird und wann er damit angefangen hat. Es ist noch nicht ganz perfekt, aber es ist ein Anfang.

Wie wir gerade feststellten, sobald >2 Emerges laufen oder ein 2ter angschmissen wird, funzt das Script nicht mehr 100% wird aber noch gefixt.

[Bearbeiten] Resume

Mit den Tools "genlop" und "tail" kann man, wie gesehen, ganz einfach den emerge-Vorgang beobachten. Diese beiden Hilfsprogramme verwenden kaum Systemresourcen und stören somit den emerge-Vorgang nicht spürbar. Ausserdem ist man genau im Bilde darüber, mit welchem Paket emerge im Moment beschäftigt ist, und wie weit der Vorgang vorangeschritten ist.


MfG PampersBomba && jesse

'Persönliche Werkzeuge