题
我正在尝试构建 Debian 软件包,但遇到了这个奇怪的伪目录问题。我跑:
$ fakeroot debian/rules binary
我之前已经构建过二进制文件,但我的系统上肯定发生了一些变化。现在 dh_md5sums 出错并返回:
md5sum: include: Is a directory
dh_md5sums: command returned error code
make: *** [binary-arch] Error 1
的确, include
是一个目录。因此,我向 dh_md5sums 添加了一些调试语句,以找出原因 include
尽管应该过滤掉目录的行仍然被散列。添加:
doit("ls", "-l", "$tmp");
表明,确实, include
运行 dh_md5sums 时不是目录:
total 28
drwxr-xr-x 2 root root 4096 2009-06-18 13:36 bin
-rwxr-xr-x 3 root root 4096 2009-06-18 13:36 include
drwxr-xr-x 3 root root 4096 2009-06-18 13:36 var
# some directories removed for brevity's sake
那么,我可以删除它吗?我补充道:
doit("rm", "$tmp/include");
并得到:
rm: cannot remove `debian/myproject/include': Is a directory
也许它...变成目录了?我又添加了一个 ls -l
以下 rm
并得到:
total 28
drwxr-xr-x 2 root root 4096 2009-06-18 13:36 bin
-rwxr-xr-x 3 root root 4096 2009-06-18 13:36 include
drwxr-xr-x 3 root root 4096 2009-06-18 13:36 var
当脚本运行完毕后,我可以这样做:
$ ls -l
drwxr-xr-x 2 x x 4096 2009-06-18 13:48 bin
drwxr-xr-x 3 x x 4096 2009-06-18 13:48 include
drwxr-xr-x 3 x x 4096 2009-06-18 13:48 var
...这很奇怪,因为 include
成为一个目录并且所有权发生变化(x
是我的用户名)。 include
甚至包含它应该包含的所有头文件。
有谁知道发生了什么事吗?
解决方案
total 28
drwxr-xr-x 2 root root 4096 2009-06-18 13:36 bin
-rwxr-xr-x 3 root root 4096 2009-06-18 13:36 include
drwxr-xr-x 3 root root 4096 2009-06-18 13:36 var
# some directories removed for brevity's sake
注意 include
链接计数为 3,表示它是具有 1 个子目录的目录,或者是具有 3 个硬链接的文件。前者的可能性似乎更大。
这似乎是与 fakeroot 的不良交互。我以前见过 fakeroot 有时会“忘记”权限,所以请仔细检查 include
正在创建或修改它具有正确的类型(并且这些都没有最近的更改)。
不隶属于 StackOverflow