ostree-remount: Remount /etc rw if needed
authorJonathan Lebon <jonathan@jlebon.com>
Fri, 28 Aug 2020 16:35:29 +0000 (12:35 -0400)
committerJonathan Lebon <jonathan@jlebon.com>
Fri, 28 Aug 2020 18:16:46 +0000 (14:16 -0400)
When we remount `/sysroot` as read-only, we also make `/etc` read-only.
This is usually OK because we then remount `/var` read-write, which also
flips `/etc` back to read-write... unless `/var` is a separate
filesystem and not a bind-mount to the stateroot `/var`.

Fix this by just remounting `/etc` read-write in the read-only sysroot
case.

Eventually, I think we should rework this to set everything up the way
we want from the initramfs (#2115). This would also eliminate the window
during which `/etc` is read-only while `ostree-remount` runs.

src/switchroot/ostree-remount.c

index cfd270bba95f6250bdf7a2b5d563016a9d62f803..3981682abd3a8904bc4d1f9323b706d5fd623574 100644 (file)
@@ -112,6 +112,11 @@ main(int argc, char *argv[])
   bool sysroot_configured_readonly = unlink (_OSTREE_SYSROOT_READONLY_STAMP) == 0;
   do_remount ("/sysroot", !sysroot_configured_readonly);
 
+  /* And also make sure to make /etc rw again. We make this conditional on
+   * sysroot_configured_readonly because only in that case is it a bind-mount. */
+  if (sysroot_configured_readonly)
+    do_remount ("/etc", true);
+
   /* If /var was created as as an OSTree default bind mount (instead of being a separate filesystem)
     * then remounting the root mount read-only also remounted it.
     * So just like /etc, we need to make it read-write by default.