Probleme beim Erstellen des Bibliothekspakets

7

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

Ich habe dh_makedie 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.

Nathan Osman
quelle
Sind Sie sicher, dass Sie alle Build-Voraussetzungen installiert haben?
Txwikinger
@txwikinger: Nein ... wie kann ich sicher sein? (Entschuldigung, ich bin neu im Paketbau - ich habe nur einen gebaut und es war keine Bibliothek.)
Nathan Osman
Haben Sie die Quelle stromaufwärts oder von apt-get source erhalten?
Txwikinger
@txwikinger: Nun, ich habe die Quelle vorgelagert, musste sie aber ziemlich stark ändern, um ein Makefile einzufügen und unnötige Dateien zu entfernen. Wahrscheinlich hätte ich es nicht so machen sollen, aber ich kenne keinen besseren Weg. Das Paket ist übrigens jsoncpp .
Nathan Osman
Vielleicht offtopic zu dieser Frage, aber im Allgemeinen bearbeiten wir die Quellen nicht, wir erstellen Patches für Änderungen. Dies würde dieses Problem jedoch wahrscheinlich nicht beeinträchtigen.
Txwikinger

Antworten:

4

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.

Ajmitch
quelle
Aha! Vielen Dank! Diese Information ist eine enorme Hilfe.
Nathan Osman
0

Wie Sie gedacht haben, liegen die Probleme hier:

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

Sie rufen debbuildals normaler Benutzer an, der keine Berechtigung zum Schreiben in dieses Verzeichnis hat. Wenn Sie es versuchen sudo debbuild, sollte es funktionieren.

qbi
quelle
Dies behebt das Problem nicht. Wie oben erwähnt, geschieht dies in einer Chroot-Umgebung. Berechtigungen sollten also kein Problem sein.
Nathan Osman