From 598530daf45a8bcb3be171732569b8aad0f4345d Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Tue, 21 Jul 2015 08:04:34 -0600 Subject: [PATCH] prepare-root: set up /boot bind-mount for single partition systems When booting from a system with /boot on the main partition, set up an appropriate bind mount during boot. The ostree runtime binary expects to be able to access the bootloader configs at /boot. See: https://mail.gnome.org/archives/ostree-list/2015-July/msg00015.html https://bugzilla.gnome.org/show_bug.cgi?id=756267 --- src/switchroot/ostree-prepare-root.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/switchroot/ostree-prepare-root.c b/src/switchroot/ostree-prepare-root.c index bb9ba13e..3de137bb 100644 --- a/src/switchroot/ostree-prepare-root.c +++ b/src/switchroot/ostree-prepare-root.c @@ -194,6 +194,23 @@ main(int argc, char *argv[]) exit (EXIT_FAILURE); } + /* If /boot is on the same partition, use a bind mount to make it visible + * at /boot inside the deployment. */ + snprintf (srcpath, sizeof(srcpath), "%s/boot/loader", root_mountpoint); + if (lstat (srcpath, &stbuf) == 0 && S_ISLNK (stbuf.st_mode)) + { + snprintf (destpath, sizeof(destpath), "%s/boot", newroot); + if (lstat (destpath, &stbuf) == 0 && S_ISDIR (stbuf.st_mode)) + { + snprintf (srcpath, sizeof(srcpath), "%s/boot", root_mountpoint); + if (mount (srcpath, destpath, NULL, MS_BIND, NULL) < 0) + { + perrorv ("failed to bind mount %s to %s", srcpath, destpath); + exit (EXIT_FAILURE); + } + } + } + /* Set up any read-only bind mounts (notably /usr) */ for (i = 0; readonly_bind_mounts[i] != NULL; i++) {