Main /

Gentoo Paketverwaltung

Gentoo Paketverwaltung

Die Gentoo Paketverwaltung portage und emerge

1. - Ein Gentoo-System updaten

1.1. Update des Portage-Trees

Der Portage-Tree enthält alle Informationen zu allen installierbaren Softwarepaketen, deshalb muss er regelmäßig aktualisiert werden. Die Software, die man mit emerge installieren kann ist maximal so aktuell wie der portage-Tree.

1.1.1 - Erste Möglichkeit: portage snapshot downloaden

Zuerst einen neuen portage snapshot tree manuell von snapshots downloaden.

Dann den alten Snapshot löschen (Achtung, das löscht auch evtl. vorher mühsam heruntergeladene Source-pakete, wenn diese nicht gelöscht werden sollen darf man das Verzeichnis /usr/portage/distfiles nicht löschen!)

rm -rf /usr/portage

Dann neuen Snapshot entpacken

tar xvjf portage-20050530.tar.bz2

und den portage-Cache neu aufbauen:

emerge --metadata
1.1.2 - Zweite Möglichkeit: Inkrementelles Portage-Update

Eine schnelle Leitung vorausgesetzt (min. DSL 750 KBit), kann man den normalen Weg fahren, ein inkrementelles Update. Da eine Synchronisation stattfindet dauert es länger als 1.2.1, ist aber erheblich bequemer.

emerge --sync

1.2 - System updaten

Erst mal gucken, was sich geändert hat:

emerge -upv world

-u steht für update - alle Pakete aktualisieren
-p steht für pretend - nur simulieren, nicht wirklich updaten
-v steht für verbose - erweiterte Infos anzeigen
world bezeichnet alle Pakete, die derzeit installiert sind

Der Befehl spuckt eine lange Liste mit zwischenzeitlichen Änderungen aus, z.B:

...
[ebuild R ] media-video/mjpegtools-1.6.2-r3
[ebuild U ] dev-libs/DirectFB-0.9.22
...

Jetzt kann man entweder gleich sämtliche Pakete neu installieren, dabei werden alle Pakete die in der Liste angezeigt werden neu geholt und dann auch übersetzt. Das dauert erfahrungsgemäß mehrere Stunden, auch auf schnellen Maschinen:

emerge -u world

Oder man gibt einzelne Pakete von Hand an, dazu reicht es allerdings nur den Namen zu nennen. Beispiel für die beiden Dateien oben:

emerge mjpegtools DirectFB

2. - Systemeinstellungen nach dem Update

2.1 - Konfigurationsdateien

Gentoo schützt sich weitestgehend selbst. Es gibt eine Variable CONFIG_PROTECT die eine Liste aller Verzeichnisse enthält, deren Inhalt von emerge nicht automatisch geändert werden darf. Das ist in erster Linie für das /etc/ Verzeichnis interessant, den da befinden sich die Konfigurationsdateien unseres Systems.

Statt die mühsam editierten Konfigurationsdateien bei einem emerge einfach zu überschreiben (die Pakete enthalten meinst eine generische Konfiguration, die aber oft noch fein-getunt werden muss), werden die Konf-Dateien der Pakete mit der Endung ._cfg000x_* angelegt. Mit dem Tool etc-update] können die verschiedenen Versionen der Konfigurationsdateien zusammengeführt werden.

2.2 - Environment-Variablen

Das Verzeichnis /etc/env.d wird nicht gesichert. Sollten dort von Hand mal Änderungen vorgenommen worden sein, werden sie beim nächsten emerge wieder rückgängig gemacht.

Es ist trotzdem nicht vergebens dort Änderungen vorzunehmen, man darf nur nicht vergessen sie mit

env-update
zu aktivieren.

Um in Erfahrung zu bringen, von welchem Programm eine Datei angelegt wurde, mit

qpkg -fp <file>
werden alle Pakete aufgelistet.

3 - Tipps und Troubleshooting

3.1 - ein Programm läuft nicht

Sollte nach vielen emerges ein Programm nicht mehr laufen, nicht sofort rebooten(!)

  • Erstmal als root ein
    revdep-rebuild
    anwerfen und einen Kaffee trinken gehen, denn das könnte etwas länger dauern. revdep-rebuild prüft alle installierten Programme und Libraries auf fehlende libs und defekte Abhängigkeiten und repariert dies, indem die betreffenden Pakete neu geemergd werden.
    • Bricht revdep-rebuild mit einer Fehlermeldung ab, kann man den Parameter -pvi anhängen und es nochmal starten, dann werden nur die Pakete ausgegeben, die gebaut werden sollten, dabei kann man dann selbst festlegen, was erstmal neu gebaut werden sollte.
  • Python wurde geändert, eine neue Version gebaut: python-updater starten! Erst danach darf die ältere Version gelöscht werden.
  • Perl wurde erneuert: perl-cleaner starten.
  • Baselib wurde geändert: etc-update oder äquivalent starten!!! Sonst bootet das System evtl. nicht richtig, dann ist Fummelarbeit angesagt.
  • Neuer Kernel wurde installiert, soll der neue Kernel verwendet werden: Siehe NewKernelAvailable
  • gcc wurde erneuert: gcc-config -l zeigt die installierten Compiler, gcc-config Nummer um zu einem anderen Compiler

zu wechseln, danach source /etc/profile starten. Ja, man kann auch einen älteren Compiler wieder nutzbar machen.

Wurde der gcc erneuert hilft evtl. ein fix_libtool_files.sh <alte gcc nummer> falls z.B. bestimmte Libraries beim compilieren nicht mehr gefunden werden können.

Zu guter Letzt hilft evtl. ein reboot. Wenn Systemprogramme wie glibc, KDE oder Gnome geändert wurden, macht ein reboot sowieso Sinn. Man kann natürlich auch sämtliche Services von Hand neu starten - jede Wette: reboot geht schneller.

3.3 - Sonstige Probleme

Wenn etwas wirklich nicht mehr geht, kann man immer noch im Gentoo-Forum nachforschen, vielleicht hat dort jemand eine Lösung.

3.4 - als unstable maskierte Pakete installieren

Bevor ein Paket den stabilen Status bei Gentoo erreicht hat, gilt es als unstable und wird mit einem ~<architektur> in den Keywords maskiert. Maskierte Pakete werden von emerge ignoriert um sicherzustellen, dass auf dem System keine ungeprüften und möglicherweise nicht richtig lauffähigen Programme installiert werden.

Wenn man aber eine dieser ungeprüften Versionen unbedingt haben möchte (weil z.b.. nur diese Version Gerät xy unterstützt), kann man sie natürlich trotzdem installieren, indem man emerge begreiflich macht, dass maskierte Pakete akzeptiert werden sollen. Für die x86 Plattform sieht das dann so aus:

@ACCEPT_KEYWORDS="~x86" emerge <program>

Wer gucken möchte, welche neuen Versionen überhaupt existieren, kann dies mit

@ACCEPT_KEYWORDS="~x86" emerge search <program>

tun.

3.4.1 - Tip: Alias für ~x86

In der /etc/profile die folgende Zeile einfügen:

alias akmrg='ACCEPT_KEYWORDS="~x86" emerge'

Dann reicht ein

akmrg search <program>
um an die maskierten ~x86-Versionen zu kommen.

3.4.2 - Tip: bestimmte Pakete generell in '~'-Versionen zulassen

Dateien, die man immer in unstable Versionen haben will, sollten in /etc/portage/package.keywords eingetragen werden. Beispiel:

media-gfx/gqview
# media-gfx/gimp - will nicht unbedingt
...

Kommentare sind erlaubt. Praktisch ist, dass geht auch emerge -up world neuere '~' Pakete installiert und nicht wie sonst auf die letzte stabile Version downgraded.
Es kann allerdings sein, das die '~' Pakete noch andere neuere Pakete haben wollen, diese müssen dann auch händisch in die package.keywords Liste mit aufgenommen werden, so lange bis emerge -up world keine Fehler mehr ausgibt.''

3.5 - Pakete von Hand kompilieren

Will irgendein Paket partout nicht, besteht auch die Möglichkeit das Programm selbst von Hand zu kompilieren und zu debuggen. Siehe in den GentooFAQs

3.6 - USE-Variablen

3.6.1 - USE-Variablen verwalten

Um die USE Variable zu ändern nimmt man am besten das Programm ufed:

emerge -p ufed

Zu jeder Variable steht kurz deren Zweck beschrieben, und man sieht sofort welche schon gesetzt ist.

Hinweis: das Programm ändert die /etc/make.conf aber nur die Zeile mit USE="..." in der die USE-Flags gesetzt werden.

Wurden irgendwelche USE-Flags nachträglich geändert kann man mit

emerge -up --newuse world
sehen, welche Pakete davon betroffen sind. Ein geändertes USE-Flag wird mit einem Stern markiert.

3.6.2 - Auswirkungen konkreter USE-Variablen

Gentoo steht und fällt mit einer vernünftigen Einstellung der Use-Flags. Hier kann man an eingen wichtigen Beispielen welche use-Flags welche Softwarepakete in welcher Weise beeinflussen. Es sind alles Erfahrungswerte, deshalb wird die Liste nie auch nur ansatzweise vollständig. Die angegebenen Auswirkungen werden auch sicherlich nicht die einzigen sein!

Use-Flag Auswirkung
ffmpeg Verhilft k3b (CD-Brennprogramm) u.a. zu der Fähigkeit, wma-Dateien auf Audio-CDs zu brennen

3.7 - make.conf

Ein guter Kandidat um sich Gentoo häufig und nachhaltig zu zerlegen ist in der /etc/make.conf die Variable AUTOCLEAN="yes" zu setzen. Damit werden nur die jeweils neuesten Versionen der Pakete behalten, die älteren gelöscht. Das klingt zwar vernünftig ist bei Libraries jedoch fatal, da die abhängigen Programme immer noch gegen die alte Version kompiliert sind und nicht automatisch aktualisiert werden.

Der richtige Killer ist z.B. eine neue Version von DirectFB da das Teil sehr häufig gebraucht wird. Z.b. von mplayer, libSDL transcode unsw. Wenn es nun eine neuere DirectFB-Version gibt, wird die eine neue Library installiert, die alte Library libDirectDB.0.9.X gelöscht. Dabei werden aber die anderen Programme nicht auf den aktuellen Stand gebracht. Das sollte eigentlich revdep-rebuild erledigen. Doch das schlägt gerne fehl, wenn '~' (unstable) Pakete installiert sind.

Also lieber etwas mehr Speicherplatz für Gentoo reservieren, dafür aber ein immer lauffähiges System haben.

3.8 - Portage updaten

Wenn ein neues sys-apps/portage installiert wird, sollte man tunlichst auf das hören, was am Ende der Installation gesagt wird. Deshalb empfielt es sich immer sys-apps/portage alleine für sich zu installieren, damit die Meldungen nicht untergehen.

3.8.1 - TIP: Portage-Log einschalten

Das Portage-long enthält all die wichtigen Meldungen, die beim emergen mehrerer Pakete immer so schnell wegscrollen. Per default ist das Log deaktiiert, läßt sich aber leicht aktivieren.

Zuerst das Log-Verzeichnis anlegen

mkdir /var/log/portage
dann in der make.conf folgende Zeile aktivieren (kommentarzeichen # entfernen):

 
PORT_LOGDIR="/var/log/portage"

fertig.

3.9 - Portage beschleunigen

Guter Artikel, um portage zu beschleunigen Emerge beschleunigen.

Hier Lars' Senf dazu:

  • python-psyco stürzt bei mir sofort ab. Keine Alternative frowning smiley
  • Schnelleres Filesystemimage - hilft mir vor allem den Portage-tree schneller auf die Platte zu schreiben, da ReiserFS beim Schreiben vieler kleiner Dateien deutlich schneller zu werke geht. Ich habe da ein script, aber ohne SVC/CVS gibts das hier nicht Wink mit Zaunpfahl
  • ccache & distcc - wirken wahre Wunder, wenn man mehrere Rechner zur Verfügung hat. Tests zu distcc siehe hier
  • cdb-portage - cdb nutzen bringt ca. 20%
  • tmpfs - habe ich noch nicht genutzt, da ich bis jetzt schon ganz zufrieden mit der Compilezeit war. Dürfte aber auch nicht soo viel bringen, da Linux gerade wenn sehr viel RAM vorhanden ist, dieses sowieso als Cache ausgiebig nutzt.

3.10 - Easteregg

Jeder sollte einmal täglich

emerge moo

aufrufen winking smiley

3.11 - Alles auf einmal Script

Die aktuell (Januar 2008) einfachste Möglichkeit ein Gentoo-System auf den aktuellen Stand zu bringen, ist mit dem update-world Script.

3.12 - Schneller mit mehr Prozessoren

Viele Gentoo ebuilds sind mittlerweile so umgestellt worden, das sie nur noch einen Prozessor nutzen um die Sourcen zu bauen, richtige Abhängigkeiten zu setzen ist nicht jedermanns Sache und definitiv nicht einfach. Es gibt auch dafür Hilfe.

emerge -ua --deep --newuse --jobs 4 --keep-going y world Updated alle Pakete (auch welche, wo nur USE Flags geändert wurden).

  • dabei werden 4 Jobs gestartet (~4 Prozessoren unter Last gesetzt)
  • falls etwas schief geht, wird einfach das Paket übergangen.
 So kann man in Ruhe einen Kaffee trinken gehen und der Rechner macht. Man muss allerdings auf die wenig hilfreichen Ausgaben beim Bauen verzichten, diese landen nur im Log /var/log/portage.

4. Verwandte Themen

5. Links

Frische Änderungen | Menü editieren
zuletzt geändert am 22.02.2022 14:44 Uhr von Lars
Edit Page | Page History