makeStoreWritable: Use statvfs instead of /proc/self/mountinfo to find out if /nix/store is a read-only bind mount

/nix/store could be a read-only bind mount even if it is / in its own filesystem, so checking the 4th field in mountinfo is insufficient.

Signed-off-by: Shea Levy <shea@shealevy.com>
makeStoreWritable: Ask forgiveness, not permission

It is surprisingly impossible to check if a mountpoint is a bind mount
on Linux, and in my previous commit I forgot to check if /nix/store was
even a mountpoint at all. statvfs.f_flag is not populated with MS_BIND
(and even if it were, my check was wrong in the previous commit).

Luckily, the semantics of mount with MS_REMOUNT | MS_BIND make both
checks unnecessary: if /nix/store is not a mountpoint, then mount will
fail with EINVAL, and if /nix/store is not a bind-mount, then it will
not be made writable. Thus, if /nix/store is not a mountpoint, we fail
immediately (since we don't know how to make it writable), and if
/nix/store IS a mountpoint but not a bind-mount, we fail at first write
(see below for why we can't check and fail immediately).

Note that, due to what is IMO buggy behavior in Linux, calling mount
with MS_REMOUNT | MS_BIND on a non-bind readonly mount makes the
mountpoint appear writable in two places: In the sixth (but not the
10th!) column of mountinfo, and in the f_flags member of struct statfs.
All other syscalls behave as if the mount point were still readonly (at
least for Linux 3.9-rc1, but I don't think this has changed recently or
is expected to soon). My preferred semantics would be for MS_REMOUNT |
MS_BIND to fail on a non-bind mount, as it doesn't make sense to remount
a non bind-mount as a bind mount.
Fix evaluation of the VM tests
Complain if /homeless-shelter exists
Manual: Add a missing step to the build instructions

Reported by Johan Grande.
Test NAR info caching
Test whether --fallback works if NARS have disappeared from the binary cache
Fix --fallback with the binary cache substituter

Reported by Peter Simons.
Nix daemon: respect build timeout from the client
nix-build: Respect --timeout
Show that --timeout doesn't work if the build produces log output
Fix --timeout

I'm not sure if it has ever worked correctly.  The line "lastWait =
after;" seems to mean that the timer was reset every time a build
produced log output.

Note that the timeout is now per build, as documented ("the maximum
number of seconds that a builder can run").
find-runtime-roots.pl: Use Nix::Utils::readFile
find-runtime-roots.pl: Search process environments for roots

For instance, this prevents paths from being deleted that are in use
by a "nix-build --run-env" session.
addAdditionalRoots(): Check each path only once
find-runtime-roots.pl: Don't hardcode /nix/store
Don't let stderr writes in substituters cause a deadlock
Nix 1.5.2 release notes
Adding ETA support to the --show-progress in nix-copy-closure

Based on https://github.com/NixOS/nix/pull/6 from shlevy
Fixing the pv reference; I didn't mean to change it