dh_usrlocal: ...不是目录

dh_usrlocal: ...不是目录

我正在使用 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/.

相关内容