it-swarm-fr.com

Problème lors de la création du paquet de bibliothèque

J'ai des difficultés à créer un package pour une bibliothèque partagée.

J'ai exécuté dh_make et modifié les fichiers. Cependant, lorsque je construis le paquet, j'obtiens ce qui suit:

 ****** @ ****** - ordinateur portable: ~/Documents/temp/jsoncpp/jsoncpp-0.5.0 $ debuild 
 dpkg-buildpackage -rfakeroot -D -us -uc 
 dpkg-buildpackage: définit CFLAGS sur la valeur par défaut: -g -O2 
 dpkg-buildpackage: définit CPPFLAGS sur la valeur par défaut: 
 dpkg-buildpackage: définit le paramètre LDFLAGS sur : -Wl, -Bsymbolic-functions 
 Dpkg-buildpackage: définit FFLAGS sur la valeur par défaut: -g -O2 
 Dpkg-buildpackage: définit CXXFLAGS sur la valeur par défaut: -g -O2 
 dpkg-buildpackage: paquet source jsoncpp 
 dpkg-buildpackage: version source 0.5.0-1 
 dpkg-buildpackage: source modifiée par ****** 
 dpkg-buildpackage : Architecture hôte AMD64 
 Fakeroot debian/rules clean 
 Dh clean 
 Dh_testdir 
 Dh_auto_clean 
 Dh_clean 
 Dpkg-source -b jsoncpp -0.5.0 
 Dpkg-source: info: en utilisant le format source `1.0 '
 Dpkg-source: info: construire jsoncpp en utilisant jsoncpp_0.5.0.orig.tar.gz 
 dpkg-source: info: construction de jsoncpp dans jsoncpp_0.5. 0-1.diff.gz 
 Dpkg-source: info: construire jsoncpp dans jsoncpp_0.5.0-1.dsc 
 Debian/rules construire 
 Dh construire 
 Dh_testdir 
 dh_auto_configure 
 dh_auto_build 
 make [1]: Entrée du répertoire `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0''..____ .] test -d obj || mkdir obj 
 g ++ -I ./include -c -o obj/lecteur_json.o src/lib_json/json_reader.cpp 
 g ++ -I ./inclure -c -o -o obj/json_writer.o src /lib_json/json_writer.cpp7.. /json_writer.o obj/valeur_json.o 
 ar: création de libjsoncpp.a 
 make [1]: Sortie du répertoire `/ home/******/Documents/temp/jsoncpp/jsoncpp -0.5.0 '
 Dh_auto_test 
 Fakeroot debian/rules binary 
 Dh binary 
 Dh_testroot 
 Dh_prep 
 Dh_installdirs 
 dh_auto_install 
 make [1]: entrée dans le répertoire `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
Sudo cp -r include/json - -target-directory =/usr/include 
 ERREUR: ld.so: l'objet 'libfakeroot-sysv.so' de LD_PRELOAD ne peut pas être préchargé: ignoré. 
 cp libjsoncpp.a/usr/lib/libjsoncpp.a 
 cp: impossible de créer le fichier normal `/usr/lib/libjsoncpp.a ': Autorisation refusée 
 make [1]: *** [i nstall] Erreur 1 
 make [1]: Quitter le répertoire `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____._revdh_auto_install: make -j1 install DESTDIR =/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0/debian/tmp a renvoyé le code de sortie 2 
 Make: *** [binary] Erreur 29 
 dpkg-buildpackage: erreur: le binaire fakeroot debian/rules a donné le statut de sortie d’erreur 2 
 debuild: erreur fatale à la ligne 1340: 
 dpkg-buildpackage -rfakeroot -D -us -uc a échoué 

Le problème semble être ici:

ERREUR: ld.so: l'objet 'libfakeroot-sysv.so' de LD_PRELOAD ne peut pas être préchargé: ignoré.
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp: impossible de créer le fichier normal `/usr/lib/libjsoncpp.a ': autorisation refusée

... mais je n'ai pas la moindre idée de ce qu'est le problème.

Le makefile est ici si nécessaire.

7
Nathan Osman

Le Makefile que vous utilisez ne respecte pas la variable DESTDIR - les packages ne doivent jamais s’installer directement dans/usr au moment de la construction, mais placer les fichiers dans une arborescence temporaire. Vous avez mentionné que vous aviez ajouté le fichier Makefile vous-même. Dans le cas habituel, vous devez le faire utiliser la variable DESTDIR comme préfixe pour tous les chemins d'installation. Après avoir examiné les instructions de construction du paquet, celui-ci utilise scons en tant que système de construction, qui remplace les tris de make. dh_make n'a probablement pas de modèle pour construire des paquets avec cela, vous devriez donc chercher les paquets qui l'utilisent pour la construction, comme yafray, et regarder leurs règles/debian

Comme les packages ne sont jamais créés en tant que root, il est préférable d'afficher et de corriger cette erreur plutôt que de remplacer les fichiers importants par un paquet car celui-ci est créé sur le système d'un développeur peu méfiant.

4
ajmitch

Comme vous l'avez compris, les problèmes se trouvent ici:

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

Vous appelez debbuild en tant qu'utilisateur normal, qui n'a pas le droit d'écrire dans ce répertoire. Si vous essayez Sudo debbuild cela devrait fonctionner.

0
qbi