Ich habe Probleme beim Erstellen eines Pakets für eine gemeinsam genutzte Bibliothek.
Ich habe dh_make
die Dateien ausgeführt und bearbeitet. Wenn ich jedoch das Paket erstelle, erhalte ich 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-Funktionen dpkg-buildpackage: Setze FFLAGS auf den Standardwert: -g -O2 dpkg-buildpackage: Setzen Sie CXXFLAGS auf den Standardwert: -g -O2 dpkg-buildpackage: Quellpaket jsoncpp dpkg-buildpackage: Quellversion 0.5.0-1 dpkg-buildpackage: Quelle geändert von ****** dpkg-buildpackage: Host-Architektur amd64 fakeroot debian / regeln sauber dh sauber dh_testdir dh_auto_clean dh_clean dpkg-source -b jsoncpp-0.5.0 dpkg-source: info: Verwenden des Quellformats `1.0 ' dpkg-source: info: Erstellen von jsoncpp mit vorhandenem jsoncpp_0.5.0.orig.tar.gz dpkg-source: info: Erstellen von jsoncpp in jsoncpp_0.5.0-1.diff.gz dpkg-source: info: Erstellen von jsoncpp in jsoncpp_0.5.0-1.dsc Debian / Regeln bauen dh bauen dh_testdir dh_auto_configure dh_auto_build make [1]: Eingabe des Verzeichnisses `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0 ' 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: libjsoncpp.a erstellen 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]: Eingabe des Verzeichnisses `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0 ' sudo cp -r include / json --target-directory = / usr / include FEHLER: ld.so: Objekt 'libfakeroot-sysv.so' aus LD_PRELOAD kann nicht vorgeladen werden: ignoriert. cp libjsoncpp.a /usr/lib/libjsoncpp.a cp: Es kann keine reguläre Datei "/usr/lib/libjsoncpp.a" erstellt werden: Berechtigung verweigert make [1]: *** [install] 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: *** [binär] Fehler 29 dpkg-buildpackage: Fehler: fakeroot debian / rules binary gab den Fehler-Exit-Status 2 an Debuild: Schwerwiegender Fehler in Zeile 1340: dpkg-buildpackage -rfakeroot -D -us -uc ist fehlgeschlagen
Das Problem scheint hier zu sein:
FEHLER: ld.so: Objekt 'libfakeroot-sysv.so' aus LD_PRELOAD kann nicht vorgeladen werden: ignoriert.
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp: Es kann keine reguläre Datei "/usr/lib/libjsoncpp.a" erstellt werden: Berechtigung verweigert
... aber ich habe nicht die geringste Ahnung, wo das Problem liegt.
Die Make - Datei ist hier , wenn nötig.
package-management
Nathan Osman
quelle
quelle
Antworten:
Das von Ihnen verwendete Makefile berücksichtigt nicht die Variable DESTDIR - Pakete sollten zum Zeitpunkt der Erstellung niemals direkt in / usr installiert werden, sondern Dateien in einen temporären Baum einfügen. Sie haben erwähnt, dass Sie das Makefile selbst hinzugefügt haben. Normalerweise 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 diese zum Erstellen verwenden, z. B. yafray, und deren Debian / Regeln überprüfen
Da Paketerstellungen niemals als Root ausgeführt werden, ist es besser, diesen Fehler anzuzeigen und zu korrigieren, als dass ein Paket wichtige Dateien überschreibt, da das Paket auf einem ahnungslosen Entwicklersystem erstellt wird.
quelle
Wie Sie gedacht haben, liegen die Probleme hier:
Sie rufen
debbuild
als normaler Benutzer an, der keine Berechtigung zum Schreiben in dieses Verzeichnis hat. Wenn Sie es versuchensudo debbuild
, sollte es funktionieren.quelle