Hi everyone,
probably since commit 40f69b586a several packages including shepherd, go
(bootstrap), ruby and scons fail their check phases.
They all fail with EROFS "read-only file system" errors. The pattern
seems to be that these packages attempt to remove non-existent files
under /, e.g. /does-not-exist for the pid-file.sh test case in shepherd.
They expect the unlink/unlinkat syscall to fail with ENOENT, but the
linux kernel produces EROFS if the file system is read-only, even if the
file doesn't exist, and glibc does not modify this behavior for the C
library functions.
On one hand this is probably not POSIX-conforming behavior of
linux/glibc and there was a patch rectifying this in version 3.2 (commit
e6bc45d65d) of the kernel, but that regressed with 3.6 (commit
c30dabfe5d) from what I can tell.
On the the other hand, I do not think that attempting to delete
arbitrary files on the file system root with the assumption that it will
fail in specific ways is a good idea either and that the files do not
actually exist is not a good idea either.
Not sure what the correct approach to fixing this would be.