我正在使用 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 视为目录?
答案1
这dh_usrlocal
联机帮助页可能会帮助您了解发生了什么事。
Debian 软件包允许安装在 下的目录/usr/local
,但最好的方法是使用维护者脚本。dh_usrlocal
通过将目录转换/usr/local
为维护者脚本片段来自动执行此操作。它假设这些目录是空的,因为不允许安装 Debian 软件包文件在下面/usr/local
。
在您的包裹中,dh_install
按照您的说明进行操作并复制app-cli
到/usr/local/bin
(在您的包裹内)。dh_usrlocal
然后运行,查看该目录,创建适当的维护者脚本,然后尝试删除该目录(因此它不会在包中这样运输) - 并且由于它包含一个文件而失败。
答案2
我不知道为什么,但安装可执行文件/usr/app-cli
解决了问题。
我认为与 Debian 软件包无法访问usr/local/bin/
.