• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

bdb, rpm, dependency

hm, irgendwie vermisse ich hier ein forum in dem es darum geht selbst software zu compilieren und was man dabei alles richtig und falsch machen kann. also wieder mal hier :)

also es hatte nicht den eindruck als wenn hier jemand schonmal cfengine genutzt hat.. aber vielleicht ist mein fehler so offensichtlich, dass ihr ihn auch so findet. ich wollte cfengine compilieren. hierzu ist es noetig eine neue version von berkeleydb haben. habe also die aktuelle db4.5 configure, make, make install.
dann geht's ans configure von cfengine. hier die ersten fehler. er sagt, dass berkeley db in einer version > 3.2 vorhanden sein muss. (obwohl im configure was von > 4.4 steht, naja wie auch immer) in der config.log steht:
Code:
configure:8612: gcc -o conftest -pthread -g -O2 -I/usr/local/BerkeleyDB.4.5/include -pthread    -L/usr/local/BerkeleyDB.4.5/lib conftest.c -lm  -ldb >&5
conftest.c: In function 'main':
conftest.c:33: warning: incompatible implicit declaration of built-in function 'exit'
configure:8615: $? = 0
configure:8617: ./conftest
./conftest: error while loading shared libraries: libdb-4.5.so: cannot open shared object file: No such file or directory
configure:8621: $? = 127
configure: program exited with status 127
configure: failed program was:
| /* confdefs.h.  */

das sieht fuer mich so aus als ob er /usr/local/BerkeleyDB.4.5 gefunden hat, weshalb die Nachricht schonmal nicht ganz passt. die datei libdb-4.5.so existiert in /usr/local/BerkeleyDB.4.5/lib.

ich habe dann als workaround probiert den status im configure auf ac_status=0 (also erfolgreich) zu setzen. danach lief das configure durch.

dann bin ich zum make und auf folgende fehlermeldungen gestossen, die sicherlich mit den fehlern oben und meiner auskommentierung zusammenhaengen, aber fuer mich leider voellig unbverstaendlich sind:

Code:
-I/usr/local/BerkeleyDB.4.5/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -MT do.o -MD -MP -MF ".deps/do.Tpo" -c -o do.o do.c; \
then mv -f ".deps/do.Tpo" ".deps/do.Po"; else rm -f ".deps/do.Tpo"; exit 1; fi
do.c: In Funktion »CheckRequired«:
do.c:1077: Warnung: Übergabe des Arguments 2 von »dbp->open« von inkompatiblem Zeigertyp
do.c:1077: Warnung: Übergabe des Arguments 4 von »dbp->open« erzeugt Zeiger von Ganzzahl ohne Typkonvertierung
do.c:1077: Fehler: zu wenige Argumente für Funktion »dbp->open«
make[2]: *** [do.o] Fehler 1
make[2]: Leaving directory `/home/fp/src/cfengine/cfengine-2.1.22/src'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `/home/fp/src/cfengine/cfengine-2.1.22/src'
make: *** [all-recursive] Fehler 1

jemand ne idee in welche richtung ich jetzt gehen koennte?
 
vielleicht hilft es ja dem ein oder anderen: es lag daran, dass der linker nicht wusste wo die bibliothek ist (bzw. das eine da ist).

also habe ich den pfad in /etc/ld.so.conf hinzugefügt und danach ein ldconfig gemacht. dann ist das configure fehlerfrei durchgelaufen.

wenn man berkeleydb kompiliert, steht das auch da, dass man das machen muss. ich habe es natuerlich nicht gelesen.
 
uhm, so ganz klappt das noch nicht. ich hab aus dem compilierten cfengine per checkinstall ein rpm paket erstellt. will ich das installieren schimpft er ueber eine nicht erfuellte abhaengigkeit zu libdb-4.5.so. die berkeleydb hab ich ueber make install installiert. kann ich ihm irgendwie sagen, dass die schn da ist?

das offensichtlichste waere aus berkeleydb auch ein rpm paket bauen und installiere, vielleicht klappt es dann. problem ist, dass er jetzt seit ueber 20 minuten haengt (ist schon der zweite anlauf), es kommen keine fehler. wird irgendwo genauer mitgeloggt, was gerade passiert? er haengt bei:
Installing documentation: /usr/local/BerkeleyDB.4.5/docs ...
 
als workaround kann ich cfengine über "make install" oder das rpm mit --nodeps installieren. aber ich versuch mal das rpm von bdb zu bauen.
 
Es hapert beim Erstellen des RPMs via checkinstall an folgender Stelle im Makefile:
Code:
@cd $(DESTDIR)$(docdir) && $(RM) -rf $(DOCLIST)

Mir ist auch nicht ganz klar wozu diese Zeile dient, denn in der nächsten werden die neuen Dokumentationsdateien ja eh wieder dort hinkopiert. Wozu also ist das Löschen notwendig, wenn sie von cp überschrieben werden?

Kommentiere ich die Zeile aus, wird das RPM Paket gebaut. Es ist mir allerdings rätselhaft was an dieser Zeile nicht funktionieren soll.
 
Hm, Als nicht-Programmierer würd ichs so sehen: Sofern $DOCLIST den Inhalt ($DESTDIR+$docdir) hat, wird erstma durch das dort hineinwehcseln geguckt ob es existiert und wenn dieser Test erfolgreich war wird es gelöscht um keine Überreste eines alten Durchgangs zu beinhalten. Von daher wäre es ein vorsorgliches "Ausmisten" damit keine alten Dokumentationsreste dort verbleiben wo sie nichts mehr zu suchen haben.

Bis denne,
Tom
 
DOCLIST enthält eine Liste von Dokumentationsordnern. Diese Ordner sind in DESTDIR+docdir.

Ja, das mit dem "Ausmisten" klingt plausibel. Dann muss ich mir aber nicht alzu viele Gedanken machen, wenn ich die Zeile rausnehme. Es ist dann aber trotzdem merkwuerdig, warum er da haengenbleibt, oder?
 
Vermutlich greift der nachfolgende cp Befehl mangels ja bereits gelöschtem $DOCDIR einfach ins Leere und hält dann alles auf. Das könnte man z.B. durch fogende Ergänzung (Bash-Script onform gedacht halt*g*) umgehen:
Code:
@cd $(DESTDIR)$(docdir) && $(RM) -rf $(DOCLIST) && mkdir -p $(DESTDIR)$(docdir)
 
das docdir wird gar nicht geloescht. es wird die DOCLIST geloescht. das docdir in dem die DOCLIST vorhanden ist, bleibt bestehen.
 
Oben