views:

90

answers:

1

I'm trying to build a Debian package, but I've got this weird pseudo-directory problem. I run:

$ fakeroot debian/rules binary

I've built the binary before, but something must have changed on my system. Now dh_md5sums errors out and returns:

md5sum: include: Is a directory
dh_md5sums: command returned error code
make: *** [binary-arch] Error 1

Indeed, include is a directory. So, I added some debugging statements to dh_md5sums, to figure out why include was being hashed despite the line that was supposed to filter out directories. Adding:

doit("ls", "-l", "$tmp");

shows that, indeed, include is not a directory when dh_md5sums is run:

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

So, can I remove it? I added:

doit("rm", "$tmp/include");

and got:

rm: cannot remove `debian/myproject/include': Is a directory

maybe it... turned into a directory? I added another ls -l below the rm and got:

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

and when the scripts are done running, I can do:

$ 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

...which is weird, as include becomes a directory and the ownership changes (x is my username). include even contains all the header files it's supposed to.

Does anyone know what's going on?

+1  A: 
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

Note that include has a link count of 3, indicating that it's either a directory with 1 subdirectory, or a file with 3 hard links. The former seems more likely.

This seems like a bad interaction with fakeroot. I've seen it before where fakeroot sometimes "forgets" permissions, so double check that when include is being created or modified that it has the right type (and that none of these have recent changes).