it-swarm.it

Problemi nella creazione del pacchetto della libreria

Sto riscontrando dei problemi nella creazione di un pacchetto per una libreria condivisa.

Mi sono imbattuto dh_make e ha modificato i file. Tuttavia, quando vado a compilare il pacchetto, ottengo quanto segue:

 ****** @ ****** - laptop: ~/Documents/temp/jsoncpp/jsoncpp-0.5.0 $ debuild 
 dpkg-buildpackage -rfakeroot -D -us -uc 
 dpkg-buildpackage: imposta CFLAGS sul valore predefinito: -g -O2 
 dpkg-buildpackage: imposta CPPFLAGS sul valore predefinito: 
 dpkg-buildpackage: imposta LDFLAGS sul valore predefinito : -Wl, -Bsymbolic-Functions 
 Dpkg-buildpackage: imposta FFLAGS sul valore predefinito: -g -O2 
 Dpkg-buildpackage: imposta CXXFLAGS sul valore predefinito: -g -O2 
 dpkg-buildpackage: pacchetto sorgente jsoncpp 
 dpkg-buildpackage: versione sorgente 0.5.0-1 
 dpkg-buildpackage: fonte modificata da ****** 
 dpkg-buildpackage : Architettura host AMD64 
 Fakeroot debian/rules clean 
 Dh clean 
 Dh_testdir 
 Dh_auto_clean 
 Dh_clean 
 Dpkg-source -b jsoncpp -0.5.0 
 Dpkg-source: info: usando il formato sorgente `1.0 '
 Dpkg-source: info: costruendo jsoncpp usando jsoncpp_0.5.0.orig.tar.gz esistente 
 dpkg-source: info: costruzione di jsoncpp in jsoncpp_0.5. 0-1.diff.gz 
 Dpkg-source: info: costruzione di jsoncpp in jsoncpp_0.5.0-1.dsc 
 Debian/rules build 
 Dh build 
 Dh_testdir 
 dh_auto_configure 
 dh_auto_build 
 make [1]: Immettere la directory `/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: creazione di libjsoncpp.a 
 make [1]: Lasciando directory `/ 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]: Immettere la directory `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____.[Sudo cp -r include/json - -target-directory =/usr/include 
 ERRORE: ld.so: l'oggetto 'libfakeroot-sysv.so' da LD_PRELOAD non può essere precaricato: ignorato. 
 cp libjsoncpp.a/usr/lib/libjsoncpp.a 
 cp: impossibile creare il file regolare `/usr/lib/libjsoncpp.a ': autorizzazione negata 
 make [1]: *** [i nstall] Errore 1 
 make [1]: Lasciando directory `/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 restituito codice di uscita 2 
 Make: *** [binario] Errore 29 
 dpkg-buildpackage: errore: il debian/regole binario di fakeroot ha dato lo stato di uscita dell'errore 2 
 debuild: errore fatale alla riga 1340: 
 dpkg-buildpackage -rfakeroot -D -us -uc fallito 

Il problema sembra essere qui:

ERRORE: ld.so: l'oggetto 'libfakeroot-sysv.so' da LD_PRELOAD non può essere precaricato: ignorato.
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp: impossibile creare il file regolare `/usr/lib/libjsoncpp.a ': autorizzazione negata

... ma non ho la minima idea di quale sia il problema.

Il makefile è qui se necessario.

7
Nathan Osman

Il Makefile che stai usando non rispetta la variabile DESTDIR - i pacchetti non dovrebbero mai installarsi direttamente in/usr al momento della compilazione, ma invece mettere i file in un albero temporaneo. Hai detto che hai aggiunto il Makefile da solo - il solito caso è che dovresti farlo usare la variabile DESTDIR come prefisso per tutti i percorsi di installazione. Dopo aver visto le istruzioni per la compilazione del pacchetto, il pacchetto utilizza scons come sistema di compilazione, che è una sorta di sostituzione di make. dh_make molto probabilmente non ha un modello per costruire pacchetti con questo, quindi dovresti cercare i pacchetti che lo usano per costruire, come yafray, e guardare le loro debian/regole

Poiché i pacchetti non vengono mai eseguiti come root, è meglio che questo errore venga mostrato e corretto piuttosto che avere un pacchetto che sovrascrive file importanti mentre il pacchetto viene creato su un sistema di sviluppo ignaro.

4
ajmitch

Come hai capito, i problemi si trovano qui:

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

Stai chiamando debbuild come utente normale, che non ha i diritti per scrivere in quella directory. Se provi Sudo debbuild dovrebbe funzionare.

0
qbi