我正在使用 Makefile 设置来创建一个 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
在我做了一个非常小的提交之前,一切都在构建中正常工作。其中添加了一个可执行文件在/src/bin/app-cli
. 然后在 debian 安装文件中引用该可执行文件debian/app.install
:
src/bin/app-cli usr/local/bin
出于某种原因,进行该更改会导致构建系统生成错误:
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
有谁知道这个新文件被 Debian Helper 视为目录?
dh_usrlocal
联机帮助页可能会帮助您了解发生了什么。Debian 软件包可以安装在 目录下
/usr/local
,但最好的方法是使用维护者脚本。dh_usrlocal
通过将目录/usr/local
转换为维护者脚本片段来自动执行此操作。它假定这些目录是空的,因为 Debian软件包不允许在/usr/local
.在您的包裹中,
dh_install
按照您的说明复制app-cli
到/usr/local/bin
(在您的包裹内)。dh_usrlocal
然后运行,查看目录,创建适当的维护者脚本,然后尝试删除目录(因此它没有在包中提供) - 由于它包含一个文件而失败。我不知道为什么,而是安装可执行文件
/usr/app-cli
解决了这个问题。我认为与无法访问
usr/local/bin/
.