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!)
Dann neuen Snapshot entpacken
tar xvjf portage-20050530.tar.bz2
und den portage-Cache neu aufbauen:
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.
1.2 - System updaten
Erst mal gucken, was sich geändert hat:
-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:
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
zu aktivieren.
Um in Erfahrung zu bringen, von welchem Programm eine Datei angelegt wurde, mit
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
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 geemerg
d 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
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
:
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
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
- 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
aufrufen
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