err (EXIT_FAILURE, "failed to MS_MOVE %s to %s", deploy_path, root_mountpoint);
}
+ /* The /sysroot mount needs to be private to avoid having a mount for e.g. /var/cache
+ * also propagate to /sysroot/ostree/deploy/$stateroot/var/cache
+ *
+ * Now in reality, today this is overridden by systemd: the *actual* way we fix this up
+ * is in ostree-remount.c. But let's do it here to express the semantics we want
+ * at the very start (perhaps down the line systemd will have compile/runtime option
+ * to say that the initramfs environment did everything right from the start).
+ */
+ if (mount ("none", "sysroot", NULL, MS_PRIVATE, NULL) < 0)
+ err (EXIT_FAILURE, "remounting 'sysroot' private");
+
if (getpid() == 1)
{
execl ("/sbin/init", "/sbin/init", NULL);
struct stat stbuf;
int i;
+ /* The /sysroot mount needs to be private to avoid having a mount for e.g. /var/cache
+ * also propagate to /sysroot/ostree/deploy/$stateroot/var/cache
+ *
+ * Today systemd remounts / (recursively) as shared, so we're undoing that as early
+ * as possible. See also a copy of this in ostree-prepare-root.c.
+ */
+ if (mount ("none", "/sysroot", NULL, MS_REC | MS_PRIVATE, NULL) < 0)
+ perror ("warning: While remounting /sysroot MS_PRIVATE");
+
if (path_is_on_readonly_fs ("/"))
{
/* If / isn't writable, don't do any remounts; we don't want