Gentoo: Pakete bearbeiten

Veröffentlicht am 31. October 2007

Wenn man Gentoo (oder ein anderes Paketbasiertes Basissystem) benutzt, kommt diese Situation schon des öfteren vor:

Man möchte ein Paket installieren, aber dieses Paket hat Abhängigkeiten zu irgendwelchen anderen Pakete, von denen man weiß, dass man auch ganz gut ohne sie auskommen kann (z.B. zusätzliche Themes), aber ohne die sich das Paket einfach nicht installieren lassen will.

Normalerweise sind dafür USE-Flags vorhanden, aber manchmal werden diese auch nicht so vollständig implementiert, wie man das gerne hätte.

Ich möchte die Situation einmal an einem ganz konkreten Beispiel verdeutlichen:

Ich möchte eine neuere Version von Gnome (welche eigentlich noch über Keywords maskiert ist) installieren. Diese neue Version verlangt allerdings eine Aktualisierung des Pakets gnome-themes, wobei in der neueren Version mein lieblings-Theme des Window-Decorators in meinen Augen “verunstaltet” ist. Sprich: ich will die alte Version behalten.

Dumm nur, dass sich gnome-2.20.0 nur installieren lässt, wenn ich gnome-themes-2.20.0 oder höher unmaske und damit zum installieren oder updaten freigebe.

Die Lösung für das Problem ist eigentlich ganz simpel: ich verändere das Gnome-Paket.

1) Portage-Overlay anlegen

Da ich natürlich nicht am Originalpaket herumpfuschen möchte und da die Änderungen sonst sowieso wieder überschrieben werden, muss ich ein Portage-Overlay anlegen (falls ich noch keines habe). Ein Portage-Overlay ist grob gesagt einfach ein eigener Zweig, der in Portage eingebunden wird und der nicht über die normale Aktualisierung verändert wird.

Um einen solchen Overlay anzulegen, gehen wir erst einmal als root in das Verzeichnis /usr/portage/local/ (anlegen, falls nicht existent!). Dort legen wir ein Verzeichnis für unser eigenes Overlay an. Das Overlay kann auch an jeder anderen Stelle im Verzeichnisbaum sein, aber ich habe gerne alles zentral:

$ su
# cd /usr/portage/local
# mkdir metax
# cd metax
# pwd
/usr/portage/local/metax

Nun muss Portage noch mitgeteilt werden, dass wir einen eigene Zweig angelegt haben und wo er sich befindet.

Dazu einfach folgende Zeile in die /etc/make.conf eintragen:

PORTDIR_OVERLAY="/usr/portage/local/metax/"

2) Paketstruktur und Pakete kopieren

Es ist nun an der Zeit, eine eigene Kopie des Pakes gnome-base/gnome-2.20.0 anzulegen. Dazu benötigen wir die Unterverzeichnisse und das Ebuild selbst:

# mkdir gnome-base
# mkdir gnome-base/gnome
# cp /usr/portage/gnome-base/gnome/gnome-2.20.0.ebuild /usr/portage/local/metax/gnome-base/gnome/

3) Paket bearbeiten

Um unsere Änderungen vorzunehmen, kann das Paket gnome-2.20.0.ebuild nun direkt bearbeitet werden.

Für unsere Zwecke genügt es, in der Liste “REDEPENT” das unliebsame Pake zu entfernen oder die Versionsnummer anzupassen. Wer möchte, kann auch in der Liste “IUSE” ein neues USE-Flag anlegen und die Abhängigkeit an das USE-Flag binden:

IUSE="... newuseflag"
...
RDEPEND="
...
newuseflag? (>=the-package/idontwant-2.20.0)
..."

Für genauere Hinweis zum Anpassen der EBuilds bitte die Handbuchseiten von Gentoo befragen.

4) Digests erstellen

Um Paketkorruption beim Download etc. vorzubeugen, ist es in Portage üblich, zu jedem Paket auch die Prüfsummen in einer extra dafür vorgesehenen Datei Manifest im Paketordner abzuspeichern. Um die Prüfsummen nicht selbst bestimmen zu müssen, gibt es in Portage Tools, die das übernehmen:

# ebuild /usr/portage/local/metax/gnome-base/gnome/gnome-2.20.0.ebuild digest

5) Paket installieren

Jetzt kann das Paket eigentlich schon installiert/geupdated werden. Beim emerge sollte ein Hinweis (z.B. eine Fußnote [1]) bei dem Paket angezeigt werden. Wenn nicht, hast du möglicherweise etwas vergessen.

Falls das Tool “eix” installiert ist, muss mit update-eix dessen Cache neu gebaut werden.

Wenn alles gut gelaufen ist, kannst du jetzt dein aktualisiertes Paket ohne die störenden Abhängigkeiten genießen.

Kategorie: Linux
Schlagworte: