ti-enxame.com

Problema ao criar pacote de biblioteca

Estou tendo problemas para criar um pacote para uma biblioteca compartilhada.

Eu corri dh_make e editei os arquivos. No entanto, quando vou construir o pacote, recebo o seguinte:

 ****** @ ****** - laptop: ~/Documentos/temp/jsoncpp/jsoncpp-0.5.0 $ debuild 
 dpkg-buildpackage -rfakeroot -D -us -uc 
 dpkg-buildpackage: defina CFLAGS como valor padrão: -g -O2 
 dpkg-buildpackage: defina CPPFLAGS como valor padrão: 
 dpkg-buildpackage: defina LDFLAGS como valor padrão : -Wl, -Bsymbolic-functions 
 Dpkg-buildpackage: define FFLAGS para o valor padrão: -g -O2 
 Dpkg-buildpackage: define CXXFLAGS para o valor padrão: -g -O2 
 dpkg-buildpackage: pacote fonte jsoncpp 
 dpkg-buildpackage: versão de origem 0.5.0-1 
 dpkg-buildpackage: fonte alterada por ****** 
 dpkg-buildpackage : Arquitetura do host AMD64 
 Fakeroot debian/regras limpar 
 Dh limpar 
 Dh_testdir 
 Dh_auto_clean 
 Dh_clean 
 dpkg-source -b jsoncpp -0.5.0 
 Dpkg-source: info: usando o formato fonte `1.0 '
 Dpkg-source: info: construindo o jsoncpp usando jsoncpp_0.5.0.orig.tar.gz existente 
 dpkg-source: info: construindo jsoncpp em jsoncpp_0.5. 0-1.diff.gz 
 Dpkg-source: info: construindo jsoncpp em jsoncpp_0.5.0-1.dsc 
 Debian/rules build 
 Dh compilação 
 Dh_testdir 
 dh_auto_configure 
 dh_auto_build 
 make [1]: Inserindo o diretório `/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 ./inclui -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: criando libjsoncpp.a 
 make [1]: Deixando o diretório `/ home/******/Documents/temp/jsoncpp/jsoncpp -0.5.0 '
 Dh_auto_test 
 Fakeroot debian/regras binário 
 Dh binário 
 Dh_testroot 
 Dh_prep 
 Dh_installdirs 
 dh_auto_install 
 make [1]: Inserindo o diretório `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
Sudo cp -r include/json - -target-directory =/usr/include 
 ERRO: ld.so: o objeto 'libfakeroot-sysv.so' de LD_PRELOAD não pode ser pré-carregado: ignorado. 
 cp libjsoncpp.a/usr/lib/libjsoncpp.a 
 cp: não pode criar o arquivo regular `/usr/lib/libjsoncpp.a ': Permissão negada 
 make [1]: *** [i nstall] Erro 1 
 make [1]: Deixando o diretório `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
dh_auto_install: make -j1 install DESTDIR =/home/******/Documentos/temp/jsoncpp/jsoncpp-0.5.0/debian/tmp retornou o código de saída 2 
 Make: *** [binário] Erro 29 
 dpkg-buildpackage: erro: fakeroot debian/rules binário deu status de saída de erro 2 
 debuild: erro fatal na linha 1340: 
 dpkg-buildpackage -rfakeroot -D -us -uc falhou 

O problema parece estar aqui:

ERRO: ld.so: o objeto 'libfakeroot-sysv.so' de LD_PRELOAD não pode ser pré-carregado: ignorado.
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp: não pode criar o arquivo regular `/usr/lib/libjsoncpp.a ': Permissão negada

... mas não tenho a menor idéia do problema.

O makefile é aqui se necessário.

7
Nathan Osman

O Makefile que você está usando não está respeitando a variável DESTDIR - os pacotes nunca devem ser instalados diretamente no/usr no momento da compilação, mas, ao invés disso, colocar os arquivos em uma árvore temporária. Você mencionou que adicionou o Makefile sozinho - o caso usual é que você precisa fazer com que ele use a variável DESTDIR como um prefixo para todos os caminhos de instalação. Tendo olhado para as instruções de compilação do pacote, o pacote usa scons como um sistema de compilação, que é uma substituição de tipos para make. O dh_make provavelmente não tem um template para construir pacotes com isso, então você deve procurar por pacotes que o usem para construção, como o yafray, e olhar para o debian/rules deles

Como as compilações de pacotes nunca são feitas como root, é melhor ter esse erro mostrado e corrigido em vez de ter um pacote sobrescrevendo arquivos importantes à medida que o pacote é criado em um sistema de desenvolvedor desavisado.

4
ajmitch

Como você imaginou, os problemas estão aqui:

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

Você está chamando debbuild como usuário normal, que não tem direitos para gravar nesse diretório. Se você tentar Sudo debbuild, deve funcionar.

0
qbi