Estou trabalhando em uma configuração de Makefile para criar um pacote debian:
.PHONY: package
package: $(PACKAGE_TARGETS)
build/%.changes: ../%.changes
mkdir -p build
for f in `<$< awk 'BEGIN { files = 0; } { if (files) print $$5; } /^Files:/ { files = 1; }'`; do \
test -f build/$$f || mv ../$$f build/; \
done
mv $< $@
../%.changes:
dpkg-buildpackage -rfakeroot -b -uc
Tudo estava funcionando bem com a compilação até que fiz um commit muito pequeno. O que adiciona um arquivo executável em /src/bin/app-cli
. Em seguida, faça referência a esse executável no arquivo de instalação do debian debian/app.install
:
src/bin/app-cli usr/local/bin
Por algum motivo, fazer essa alteração fez com que o sistema de compilação gerasse o erro:
dh_usrlocal: debian/app/usr/local/bin/app-cli is not a directory
rmdir: failed to remove 'debian/app/usr/local/bin': Directory not empty
dh_usrlocal: rmdir debian/app/usr/local/bin returned exit code 1
make[1]: *** [binary] Error 1
make[1]: Leaving directory `/var/lib/jenkins/data/workspace/app-VBJPWWOTACEEMDGNNWMFS4QU6K4EPG5PJRESMEIZPZL4GAUCKWVQ'
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2
make: *** [../app_0.0.1-13-master_amd64.changes] Error 2
Alguém sabe que este novo arquivo está sendo tratado como diretório pelo Debian Helper?
A página de
dh_usrlocal
manual pode ajudá-lo a entender o que está acontecendo.Os pacotes Debian têm permissão para instalar diretórios em
/usr/local
, mas a melhor maneira de fazer isso é usar scripts de manutenção.dh_usrlocal
automatiza isso transformando diretórios/usr/local
em trechos de script do mantenedor. Ele assume que esses diretórios estão vazios, já que os pacotes Debian não podem instalar arquivos em/usr/local
.Em seu pacote,
dh_install
siga suas instruções e copieapp-cli
para/usr/local/bin
(dentro de seu pacote).dh_usrlocal
em seguida, executa, vê o diretório, cria o script de manutenção apropriado e tenta excluir o diretório (para que não seja enviado como tal no pacote) — e falha porque contém um arquivo.Não sei por que, mas instalar o executável em
/usr/app-cli
corrigiu o problema.Eu acho que algo a ver com pacotes Debian não tendo acesso a arquivos
usr/local/bin/
.