Pakete suchen mit eix

Portage durchsuchen. Jeder der Gentoo schon etwas länger benutzt weiß das die Suche nach einem Paket ewig dauert. Kein Wunder, denn die Portage-Datenbank basiert auf Dateien und somit müssen bei jeder Suche unzählige Verzeichnisse und Dateien durchgegangen werden, und das dauert nunmal. Aber es gibt eine Alternative zu emerge --search, sie heißt eix und ist nicht nur schneller als Emerge sondern auch viel mächtiger. Eix basiert auf einem binären Cache, was die Suche stark beschleunigt. Außerdem zeigt eix weit mehr Informationen an und es ist möglich die Suche viel stärker einzugrenzen (Lizenz, Homepage, Kategorie, Use-Flags, …), nach regulären Ausdrücken zu suchen und vieles mehr.

Ein kleiner Geschwindigkeitsvergleich:
time emerge --search mozilla-firefox
real 0m16.174s
user 0m1.420s
sys 0m0.256s
time eix mozilla-firefox
real 0m0.292s
user 0m0.024s
sys 0m0.004s

Installation

Eix zu installieren ist nicht besonders schwer, es gibt natürlich ein ebuild.

emerge -av eix

Benutzung

Zu erst einmal muss der binäre Cache angelegt werden, ohne den funktioniert eix natürlich nicht. Mit update-eix wird der Cache angelegt/aktualisiert. Nach jedem emerge --sync muss das wiederholt werden, damit der Cache auch auf dem neusten Stand ist. Wer sich etwas Tipparbeit ersparen möchte kann auch gleich den Befehl eix-sync benutzen, der führt erst ein emerge --sync und anschließend ein update-eix aus.

eix-sync
 * Running emerge --sync
 
[...]
 
 * Copying old /var/cache/eix cache to /var/cache/eix.previous
 * Running update-eix
Reading Portage settings ..
Building database (/var/cache/eix) ..
 
[...]
 
Database contains 13135 packages in 152 categories.
Diffing databases (13142 - 13135 packages)
[*>]  == dev-ruby/mkrf (~0.2.3 -> 0.2.3): mkrf is a library for generating Rakefiles, primarily intended for building C extentions for Ruby.
[<]   == x11-themes/gtk-theme-switch (1.0.1-r2 2.0.0_rc2-r2 -> 2.0.0_rc2-r2): Application for easy change of GTK-Themes
      << x11-themes/gtk-engines-begtk (1.0.1-r2): GTK+1 BeGTK Theme Engine
[N]   >> dev-python/xlwt (~0.7.0): Python library to create spreadsheet files compatible with Excel

eix-sync zeigt einem auch gleich eine kleine Übersicht an, welche Pakete neu in Portage sind und welche entfernt oder verändert wurden.

Aber wie sucht man jetzt?
Ganz einfach, per eix <Paket>. Das ist natürlich noch nicht alles, eix bietet unzählige Optionen, diese werden im folgenden erklärt.

Pakete suchen

Eix bietet unzählige Möglichkeiten die Parameter der Suche zu verändern. Mehrere Suchausdrücke können kombiniert werden, jeder Suchausdruck kann auf bestimmte Felder (Lizenz, Name, Beschreibung, etc.) beschränkt und es können diverse Bedingungen (installiert, nicht installiert, maskiert, stabil, etc.) festgelegt werden.

Man kann zwischen 4 verschiedene Suchalgorithmen wählen. Mit -e bzw. --exact sucht eix nur noch nach dem exakten Suchausdruck, eix -e kde findet also nur noch das Paket kde, nicht jedoch kde-utils. Wenn man sich nicht sicher ist wie ein Paket geschrieben wird, kann eix versuchen über die Levenshtein-Distanz Pakete mit ähnlichem Namen zu finden, dazu wird die Option -f <N> verwendet, N gibt dabei die maximale Distanz an, also wie viele Buchstaben anders sein dürfen. Mit -p bzw. --pattern sucht eix nach einem bestimmten Muster, mehr Informationen darüber stehen in der Manpage von glob (man 7 glob), wichtig hierbei ist das man das Muster in einzelne Anführungszeichen setzt, also ‘Muster’, damit die Shell das Muster nicht interpretiert. Wem Muster nicht reichen und wer lieber mit regulären Ausdrücken arbeitet der kann auch die Option -r bzw. --regex verwenden.

eix -f 2 amarock # Findet amarok, trotz des Rechtschreibfehlers
eix -p '??arok' # Findet ebenfalls amarok, auch wenn man sich nicht mehr an die ersten beiden Buchstaben erinnert.
eix -r '^ama.*k$' # Was fängt mit ama an und hört mit k auf? :-)

Um mehrere Suchausdrücke zu kombinieren werden -a bzw. --and (und) und -o bzw. --or (oder) verwendet. Wenn mehrere Suchausdrücke angegeben werden, aber kein und/oder dazwischen steht wird automatisch abhängig von der Konfigurationsvariable DEFAULT_IS_OR entweder und oder oder eingesetzt. Die und/oder-Operatoren werden von links nach rechts ausgewertet, es ist nicht möglich die Ausdrücke in Klammern zu setzen o.Ä. Mit --not kann man einen Ausdruck negieren bzw. festlegen das der Ausdruck nicht zutreffen soll.

# Findet Pakete in deren Namen "kde" und "utils" vorkommt.
eix kde -a utils
# Findet Pakete in deren Namen "virtualbox" aber nicht "ose" vorkommt.
eix virtualbox -a --not ose

Nun können diverse Bedingungen festgelegt werden die ein Paket erfüllen muss um bei der Suche beachtet zu werden. Hier die (meiner Meinung nach) wichtigsten Bedingungen.

Bedingung Beschreibung
-I, --installed Die Pakete müssen installiert sein. Wichtig: Hierbei werden nur Pakete beachtet die sich auch in der Portage-Datenbank befinden. Wenn ein installiertes Paket nicht mehr in Portage enthalten ist kennt eix es nicht.
-i, --multi-installed Die Pakete müssen mehrmals (in verschiedenen Versionen) installiert sein.
-d, --dup-packages Listet nur Pakete auf die sowohl im offiziellen Portage-Baum als auch in einem Overlay vorhanden sind.
-D, --dup-versions Listet nur Pakete auf von denen eine Version sowohl im offiziellen Portage-Baum als auch in einem Overlay vorhanden ist. (Es muss sich um die gleiche Version handeln, also z.B. KDE 4.1 sowohl im offiziellen Portage-Baum als auch in einem Overlay.)
-1, --slotted Die Pakete müssen in einem Slot installiert werden. Hierbei ist egal ob ein Paket nur einen Slot hat oder mehrere, solange das Paket in einem Slot installiert wird.
-2, --slots Die Pakete müssen über mehrere Slots verfügen.
-u, --upgrade Nur Pakete zulassen für die es eine bessere Version gibt. (Das muss nicht unbedingt eine höhere Version sein)
--stable Nur Pakete von denen es eine stabile Version gibt.
--testing Nur Pakete von denen es eine unstabile (testing) oder stabile Version gibt.
--non-masked Nur Pakete von denen es eine nicht maskierte Version gibt.
-O, --overlay Nur Pakete von denen sich eine Version in einem Overlay befindet.
--in-overlay <Overlay> Nur Pakete die sich in einem bestimmten Overlay befinden.
--fetch Nur Pakete deren Installationsdateien nicht automatisch heruntergeladen werden können. (fetch-restriction)

Es ist auch möglich eix nur bestimmte Felder durchsuchen zu lassen, beispielsweise nur den Namen des Pakets oder nur die Beschreibung.

Feld Beschreibung
-s, --name Der Name des Pakets
-S, --description Die Beschreibung des Pakets.
-C, --category Die Kategorie des Pakets.
-A, --category-name Die Kategorie und der Name des Pakets
-H, --homepage Die Webseite des Pakets
-L, --license Die Lizenz des Pakets
-P, --provide Was das Paket bereitstellt, also z.B. virtual/cron

Die Ausgabe

Die Ausgabe von eix lässt sich noch durch einige Zusatzoptionen beeinflussen. So kann beispielsweise mit -c (--compact) die Ausgabe auf eine Zeile pro Paket beschränkt werden, mittels -v bzw. --verbose hingegen werden alle verfügbaren Informationen angezeigt. Das sieht dann so aus:

eix -ve gcc
* sys-devel/gcc
     Available versions:
        (2.95)  *2.95.3-r9 ~*2.95.3-r10
        (3.1)   *3.1.1-r2
        (3.2)   **3.2.2 *3.2.3-r4
        (3.3)   ~3.3.6-r1
        (3.4)   3.4.6-r2
        (4.0)   ~*4.0.4
        (4.1)   ~4.1.0-r1 4.1.2
        (4.2)   ~4.2.3 ~4.2.4
        (4.3)   **4.3.0 ~4.3.1 ~4.3.1-r1 ~4.3.2
        {altivec bootstrap boundschecking build d doc fixed-point fortran gcj gtk hardened ip28 ip32r10k java libffi mudflap multilib multislot n32 n64 nls nocxx nopie nossp objc objc++ objc-gc openmp static test vanilla}
     Installed versions:  Version: 4.1.2(4.1)
                          Date:    18:38:09 10/20/08
                          USE:     fortran gtk mudflap multilib nls -altivec -bootstrap -build -d -doc -gcj -hardened -ip28 -ip32r10k -libffi -multislot -n32 -n64 -nocxx -objc -objc++ -objc-gc -test -vanilla
                          Version: 4.2.4(4.2)
                          Date:    16:33:30 10/17/08
                          USE:     fortran gtk mudflap multilib nls openmp -altivec -bootstrap -build -doc -gcj -hardened -ip28 -ip32r10k -libffi -multislot -n32 -n64 -nocxx -objc-objc++ -objc-gc -test -vanilla
                          Version: 4.3.1-r1(4.3)
                          Date:    16:33:31 10/17/08
                          USE:     fortran mudflap multilib nls openmp -altivec -bootstrap -build -doc -gcj -gtk -hardened -ip28 -ip32r10k -libffi -multislot -n32 -n64 -nocxx -objc -objc++ -objc-gc -test -vanilla
     Best versions/slot:  3.4.6-r2 4.1.2
     Recommendation:      Downgrade
     Package sets:        system
     Homepage:            http://gcc.gnu.org/
     Description:         The GNU Compiler Collection. Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking
     License:             GPL-2 LGPL-2.1

Es wird sogar angezeigt wann man eine bestimmte Version des Pakets installiert hat, und ob Portage eine Aktualisierung bzw. wie in diesem Fall ein Downgrade empfiehlt.

Diese kleine Anleitung deckt keinesfalls alles ab was eix kann. Wer noch mehr wissen möchte sollte die Manpage von eix lesen (man 1 eix).

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (2 Bewertungen, Durchschnitt: 5.00 von 5)
Loading ... Loading ...
Kategorie: Anleitungen, Gentoo
Ansichten: 2,381

Kommentare

Bisher wurde ein Kommentar geschrieben.

  • demiurg sagt:

    Schöne Informationsübersicht. Nachdem das aktuelle Portage-2.1.6.4 dazu geführt hat, dass esearch-0.7.1 maskiert werden musste, habe ich den Hinweis auf eix umgesetzt, aber keine direkten Tipps dazu gefunden.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu