Und wieder etwas gelernt:

Ich habe versucht ein Source RPM auf einem unserer Server zu installieren. Dieses scheiterte mit folgender Meldung:

error: Installed (but unpackaged) file(s) found:
/usr/BerkeleyDB/3.1/lib/libdb-3.1.la
/usr/BerkeleyDB/3.1/lib/libdb_cxx-3.1.la

RPM build errors:
Installed (but unpackaged) file(s) found:
/usr/BerkeleyDB/3.1/lib/libdb-3.1.la
/usr/BerkeleyDB/3.1/lib/libdb_cxx-3.1.la

Inzwischen habe ich herausgefunden, das dieses ein Sicherheitsmechanismus ist, damit Dateien, die in einem Verzeichnis liegen, in die Dateien gleichen Namens aus dem RPM Paket installiert werden würden, nicht überschrieben werden.
Normalerweise lassen sich bei der Installation eines RPM Paketes Dateien ja zuvor installierten Paketen zuordnen. Installiert man jedoch nun etwas per Hand aus dem Sourcecode, ist es dem RPM System ja nicht möglich, diese Dateien einem Programm zuzuordnen. Daher bricht es lieber ab.

Hat man nun festgestellt, das die angemerkten Dateien überschrieben werden können, fügt man den kompletten Pfad mit den Dateinamen der Programmname.spec - Datei hinzu.
.spec Dateien sind eine Art Bauanleitung, um Sourcecode zu RPM Paketen zu verpacken.
Nachdem die Installation bereits einmal mit der obigen Fehlermeldung fehlgeschlagen ist, befindet sich unter /usr/src/packages/ das entpackte RPM Paket. Unter SPEC steht die .spec Datei, unter BUILD die Sourcen, etc.

Beim obigen Beispiel editieren wir also die Datei /usr/src/packages/SPECS/db3-cxx.spec .
Hier suchen wir nach einem Abschnitt, der %files heisst. Darunter fügen wir die angemeckerten Dateien ein, also:

Vorher:

%files
%defattr(-,root,root)
%{_bindir}/*
%{_libdir}/*.so

Nachher:

%files
%defattr(-,root,root)
%{_bindir}/*
%{_libdir}/*.so
/usr/BerkeleyDB/3.1/lib/libdb-3.1.la
/usr/BerkeleyDB/3.1/lib/libdb_cxx-3.1.la

Nun können wir das ganze nicht einfach erneut über das Source-RPM installieren, da unsere Änderungen sonst direkt wieder überschrieben würden.
Stattdessen wechseln wir in das Verzeichnis /usr/src/packages und führen folgenden Befehl aus:

rpmbuild -ba SPECS/db3-cxx.spec

ACHTUNG:

bei manchen RPM basierenden Distributionen/-versionen gibt es das rpmbuild Programm nicht. Früher wurde der obige Befehl über rpm aufgerufen. Probiert in diesem Fall also:

rpm -ba SPECS/db3-cxx.spec

Hierdurch wird das RPM Binär- und Quellpaket neu gebaut.
Diese Pakete liegen dann in den Unterverzeichnissen SRPMS und RPMS/architektur/ von /usr/src/packages .

Diese können nun Problemlos, wie ein offizielles RPM Paket, installiert werden:

rpm -Uvh /usr/src/packages/RPMS/i586/db3-cxx*.rpm

Teilen per: TwitterEmail


Comments

comments powered by Disqus