My Universe Logo

FreeBSD: Welcher Port hat die Datei installiert?

Posted by Jesco Freund at Feb. 20, 2009 12:11 a.m.

Gerade bei größeren Upgrade-Aktionen kann es schon mal vorkommen, dass portmaster & Co. eine ungünstige Reihenfolge erwischen und sich Build-Prozesse daran aufhängen, dass eine bestimmte Datei (Bibliothek) noch nicht vorhanden ist, weil der betreffende Port weiter hinten in der Arbeitsliste gelandet ist. Mich hat es heute mit dem OpenLDAP-Upgrade auf 2.4 erwischt. Zwar habe ich versucht, alle von OpenLDAP abhängigen Pakete (bei KDE ist da eine ganze Menge dabei) neu zu kompilieren (portmaster -r openldap-client-2.4.14), jedoch ist Portmaster daran gescheitert, die richtige Baureihenfolge auszubaldowern. Ergebnis: der Bau von sysutils/kdeadmin4 ging schief, weil libkldap.so noch gegen die alte OpenLDAP-Version gelinkt war.

So weit, so gut. Um das Problem zu beheben, musste ich also bloß den Port manuell neu bauen, der libkldap.so installiert. Bloß welcher ist das? Nun, mit ein bissschen Shell-Trickserei lässt sich das herausfinden. Jeder Port, der Dateien im System installiert, vermerkt diese in der Datei pkg-plist. Mit grep kann man diese Dateien nach der gesuchten Bibliothek durchwühlen; allerdings muss man find bemühen, um nicht wegen zu langer Argumentenlisten aus der Kurve zu fliegen:

find /usr/ports -type f -name pkg-plist -exec grep -H 'libkldap.so' {} \;

Die Ausgabe verrät einem dann, welcher Port hier der Übeltäter ist:

/usr/ports/deskutils/kdepimlibs4/pkg-plist:lib/libkldap.so
/usr/ports/deskutils/kdepimlibs4/pkg-plist:lib/libkldap.so.5
/usr/ports/deskutils/kdepimlibs4/pkg-plist:lib/libkldap.so.5.0.1

Mit einem beherzten cd /usr/ports/deskutils/kdepimlibs4 && make deinstall && make reinstall clean hatte es sich dann auch ausgespukt und portmaster konnte den Rest seiner Arbeit erledigen.

1 comment | Defined tags for this entry: FreeBSD, KDE, packet management, ports

Comments

> pkg_info -W /usr/local/lib/libaa.so
/usr/local/lib/libaa.so was installed by package aalib-1.4.r5_4

wh00t on Feb. 20, 2009 18:32 CET