it-swarm-es.com

Problemas para crear el paquete de la biblioteca

Tengo problemas para crear un paquete para una biblioteca compartida.

Ejecuté dh_make y edité los archivos. Sin embargo, cuando voy a compilar el paquete, obtengo lo siguiente:

 ****** @ ****** - laptop: ~/Documents/temp/jsoncpp/jsoncpp-0.5.0 $ debuild 
 dpkg-buildpackage -rfakeroot -D -us -uc 
 dpkg-buildpackage: establece CFLAGS en el valor predeterminado: -g -O2 
 dpkg-buildpackage: establece CPPFLAGS en el valor predeterminado: 
 dpkg-buildpackage: establece LDFLAGS en el valor predeterminado : -Wl, -Bsymbolic-functions 
 Dpkg-buildpackage: establece FFLAGS en el valor predeterminado: -g -O2 
 Dpkg-buildpackage: establece CXXFLAGS en el valor predeterminado: -g -O2 
 dpkg-buildpackage: paquete fuente jsoncpp 
 dpkg-buildpackage: fuente versión 0.5.0-1 
 dpkg-buildpackage: fuente modificada por ****** 
 dpkg-buildpackage : Arquitectura de host AMD64 
 Fakeroot debian/rules clean 
 Dh clean 
 Dh_testdir 
 Dh_auto_clean 
 Dh_clean 
 Dpkg-source -b jsoncpp -0.5.0 
 Dpkg-source: información: usando el formato fuente `1.0 '
 Dpkg-source: información: construyendo jsoncpp usando jsoncpp_0.5.0.orig.tar.gz 
 dpkg-source: info: compilando jsoncpp en jsoncpp_0.5. 0-1.diff.gz 
 Dpkg-source: información: compilación de jsoncpp en jsoncpp_0.5.0-1.dsc 
 Debian/rules build 
 Dh build 
 Dh_testdir 
 dh_auto_configure 
 dh_auto_build 
 make [1]: Ingresando al directorio `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
 prueba -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[.____.font>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: creando libjsoncpp.a 
 make [1]: Saliendo del directorio `/ 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]: Entrar en el directorio `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____.font>Sudo cp -r include/json - -target-directory =/usr/include 
 ERROR: ld.so: el objeto 'libfakeroot-sysv.so' de LD_PRELOAD no se puede precargar: ignorado. 
 cp libjsoncpp.a/usr/lib/libjsoncpp.a 
 cp: no se puede crear el archivo regular `/usr/lib/libjsoncpp.a ': Permiso denegado 
 make [1]: *** [i nstall] Error 1 
 make [1]: Saliendo del directorio `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____.font>dh_auto_install: make -j1 install DESTDIR =/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0/debian/tmp devolvió el código de salida 2 
 Make: *** [binario] Error 29 
 dpkg-buildpackage: error: fakeroot debian/rules binary dio el estado de salida de error 2 
 debuild: error fatal en la línea 1340: 
 dpkg-buildpackage -rfakeroot -D -us -uc falló 

El problema parece estar aquí:

ERROR: ld.so: el objeto 'libfakeroot-sysv.so' de LD_PRELOAD no se puede precargar: ignorado.
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp: no se puede crear el archivo regular `/usr/lib/libjsoncpp.a ': Permiso denegado

... pero no tengo la menor idea de cuál es el problema.

El archivo MAKE es aquí si es necesario.

7
Nathan Osman

El Makefile que está utilizando no respeta la variable DESTDIR: los paquetes nunca deben instalarse directamente en/usr en el momento de la compilación, sino que colocan los archivos en un árbol temporal. Usted mencionó que agregó el Makefile usted mismo; el caso habitual es que necesitaría hacer que use la variable DESTDIR como prefijo para todas las rutas de instalación. Después de mirar las instrucciones de compilación del paquete, el paquete usa scons como un sistema de compilación, que es un tipo de reemplazo para make. Es muy probable que dh_make no tenga una plantilla para crear paquetes con esto, por lo que debe buscar paquetes que lo usen para construir, como yafray, y ver sus debian/rules

Como las compilaciones de paquetes nunca se realizan como root, es mejor que se muestre y corrija este error en lugar de que un paquete sobrescriba archivos importantes, ya que el paquete se está construyendo en un sistema de desarrollador desprevenido.

4
ajmitch

Como te imaginaste, los problemas están aquí

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

Está llamando a debbuild como usuario normal, que no tiene derechos para escribir en ese directorio. Si intentas Sudo debbuild debería funcionar.

0
qbi