Use /run/ostree-booted metadata for sysroot-ro state passing
authorColin Walters <walters@verbum.org>
Thu, 13 Jul 2023 11:56:29 +0000 (07:56 -0400)
committerColin Walters <walters@verbum.org>
Thu, 13 Jul 2023 17:58:25 +0000 (13:58 -0400)
Just like we did with composefs, use the new metadata instead
of a "stamp file".

src/libotcore/otcore.h
src/switchroot/ostree-prepare-root.c
src/switchroot/ostree-remount.c

index 7bb6364be992547f20ae33a77043a80159efa7b8..1b2973e5afdf599454cc53234151add1d5d79d36 100644 (file)
@@ -54,3 +54,5 @@ gboolean otcore_validate_ed25519_signature (GBytes *data, GBytes *pubkey, GBytes
 // This key if present contains the public key successfully used
 // to verify the signature.
 #define OTCORE_RUN_BOOTED_KEY_COMPOSEFS_SIGNATURE "composefs.signed"
+// This key will be present if the sysroot-ro flag was found
+#define OTCORE_RUN_BOOTED_KEY_SYSROOT_RO "sysroot-ro"
index bbb207161c7bce32d5b495e2ea85c282a2024921..69ebd237519476d10bcb3f0e75ca85268ba3398a 100644 (file)
@@ -441,12 +441,10 @@ main (int argc, char *argv[])
       if (!sysroot_currently_writable)
         errx (EXIT_FAILURE, "sysroot.readonly=true requires %s to be writable at this point",
               root_arg);
-      /* Pass on the fact that we discovered a readonly sysroot to ostree-remount.service */
-      int fd = open (_OSTREE_SYSROOT_READONLY_STAMP, O_WRONLY | O_CREAT | O_CLOEXEC, 0644);
-      if (fd < 0)
-        err (EXIT_FAILURE, "failed to create %s", _OSTREE_SYSROOT_READONLY_STAMP);
-      (void)close (fd);
     }
+  /* Pass on the state for use by ostree-prepare-root */
+  g_variant_builder_add (&metadata_builder, "{sv}", OTCORE_RUN_BOOTED_KEY_SYSROOT_RO,
+                         g_variant_new_boolean (sysroot_readonly));
 
   /* Prepare /boot.
    * If /boot is on the same partition, use a bind mount to make it visible
index 38af0889050385a6acace56b977aa237115e3c73..d8b01f68588ca78f927ab56193dde5ef7ef5c856 100644 (file)
@@ -134,7 +134,9 @@ main (int argc, char *argv[])
   /* Handle remounting /sysroot; if it's explicitly marked as read-only (opt in)
    * then ensure it's readonly, otherwise mount writable, the same as /
    */
-  bool sysroot_configured_readonly = unlink (_OSTREE_SYSROOT_READONLY_STAMP) == 0;
+  gboolean sysroot_configured_readonly = FALSE;
+  g_variant_dict_lookup (ostree_run_metadata, OTCORE_RUN_BOOTED_KEY_SYSROOT_RO, "b",
+                         &sysroot_configured_readonly);
   do_remount ("/sysroot", !sysroot_configured_readonly);
 
   /* And also make sure to make /etc rw again. We make this conditional on