it-swarm-eu.dev

Probleme beim Erstellen des Bibliothekspakets

Ich habe einige Probleme beim Erstellen eines Pakets für eine gemeinsam genutzte Bibliothek.

Ich rannte dh_make und bearbeitet die Dateien. Wenn ich das Paket erstelle, erhalte ich jedoch Folgendes:

 ****** @ ****** - laptop: ~/Documents/temp/jsoncpp/jsoncpp-0.5.0 $ debuild 
 dpkg-buildpackage -rfakeroot -D -us -uc 
 dpkg-buildpackage: Setzen Sie CFLAGS auf den Standardwert: -g -O2 
 dpkg-buildpackage: Setzen Sie CPPFLAGS auf den Standardwert: 
 dpkg-buildpackage: Setzen Sie LDFLAGS auf den Standardwert : -Wl, -Bsymbolic-functions 
 Dpkg-buildpackage: setze FFLAGS auf den Standardwert: -g -O2 
 Dpkg-buildpackage: setze CXXFLAGS auf den Standardwert: -g -O2 
 dpkg-buildpackage: Quellpaket jsoncpp 
 dpkg-buildpackage: Quellversion 0.5.0-1 
 dpkg-buildpackage: Quellcode geändert durch ****** 
 dpkg-buildpackage : Host-Architektur AMD64 
 Fakeroot debian/rules clean 
 Dh clean 
 Dh_testdir 
 Dh_auto_clean 
 Dh_clean 
 Dpkg-source -b jsoncpp -0.5.0 
 Dpkg-source: info: unter Verwendung des Quellformats "1.0" 
 Dpkg-source: info: unter Verwendung des vorhandenen jsoncpp_0.5.0.orig.tar.gz 
 dpkg-source: info: jsoncpp in jsoncpp_0.5 erstellen. 0-1.diff.gz 
 Dpkg-source: info: jsoncpp in jsoncpp_0.5.0-1.dsc erstellen 
 Debian/rules build 
 Dh build 
 Dh_testdir 
 dh_auto_configure 
 dh_auto_build 
 make [1]: Verzeichnis `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____ eingeben .] test -d obj || mkdir obj 
 g ++ -I ./include -c -o obj/json_reader.o src/lib_json/json_reader.cpp 
 g ++ -I ./include -c -o obj/json_writer.o src /lib_json/json_writer.cpp[.____.₱g++ -I ./include -c -o obj/json_value.o src/lib_json/json_value.cpp 
 ar -r libjsoncpp.a obj/json_reader.o obj /json_writer.o obj/json_value.o 
 ar: Erstellen von libjsoncpp.a 
 make [1]: Verlassen des Verzeichnisses `/ home/******/Documents/temp/jsoncpp/jsoncpp -0.5.0 '
 Dh_auto_test 
 Fakeroot debian/rules binär 
 Dh binär 
 Dh_testroot 
 Dh_prep 
 Dh_installdirs 
 dh_auto_install 
 make [1]: Verzeichnis `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____.‹Sudo cp -r include/json - -zielverzeichnis =/usr/include 
 FEHLER: ld.so: Objekt 'libfakeroot-sysv.so' aus LD_PRELOAD kann nicht vorab geladen werden: ignoriert. 
 cp libjsoncpp.a/usr/lib/libjsoncpp.a 
 cp: kann keine reguläre Datei "/usr/lib/libjsoncpp.a" erstellen: Berechtigung verweigert 
 make [1]: *** [i nstall] Fehler 1 
 make [1]: Verlassen des Verzeichnisses `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____.)dh_auto_install: make -j1 install DESTDIR =/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0/debian/tmp hat den Exit-Code 2 zurückgegeben 
 Make: *** [binary] Error 29 
 dpkg-buildpackage: Fehler: fakeroot debian/rules binary gab Fehler-Exit-Status 2 
 debuild: Schwerwiegender Fehler in Zeile 1340: 
 dpkg-buildpackage -rfakeroot -D -us -uc fehlgeschlagen 

Das Problem scheint hier zu sein:

FEHLER: ld.so: Objekt 'libfakeroot-sysv.so' aus LD_PRELOAD kann nicht vorgeladen werden: wird ignoriert.
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp: kann keine reguläre Datei "/usr/lib/libjsoncpp.a" erstellen: Berechtigung verweigert

... aber ich habe keine Ahnung, was das Problem ist.

Das Makefile ist hier falls nötig.

7
Nathan Osman

Das von Ihnen verwendete Makefile berücksichtigt die Variable DESTDIR nicht - Pakete sollten zum Zeitpunkt der Erstellung niemals direkt in/usr installiert werden, sondern stattdessen Dateien in einem temporären Baum ablegen. Sie haben erwähnt, dass Sie das Makefile selbst hinzugefügt haben. In der Regel müssen Sie dafür sorgen, dass die Variable DESTDIR als Präfix für alle Installationspfade verwendet wird. Nachdem Sie sich die Anweisungen zum Erstellen von Paketen angesehen haben, verwendet das Paket scons als Build-System, das eine Art Ersatz für make darstellt. dh_make verfügt höchstwahrscheinlich nicht über eine Vorlage zum Erstellen von Paketen, daher sollten Sie nach Paketen suchen, die sie zum Erstellen verwenden, wie beispielsweise yafray, und sich deren debian/rules ansehen

Da Paketerstellungen niemals als Root ausgeführt werden, ist es besser, diesen Fehler anzuzeigen und zu korrigieren, als wichtige Dateien durch ein Paket überschreiben zu lassen, da das Paket auf einem ahnungslosen Entwicklersystem erstellt wird.

4
ajmitch

Wie Sie sich gedacht haben, liegt das Problem hier:

cp libjsoncpp.a /usr/lib/libjsoncpp.a

Sie rufen debbuild als normalen Benutzer auf, der keine Rechte zum Schreiben in dieses Verzeichnis hat. Wenn du es versuchst Sudo debbuild es sollte funktionieren.

0
qbi