generator: Restore graceful exit behaviour if `ostree` karg missing
authorJonathan Lebon <jonathan@jlebon.com>
Tue, 6 Feb 2024 19:42:32 +0000 (14:42 -0500)
committerJonathan Lebon <jonathan@jlebon.com>
Tue, 6 Feb 2024 19:47:09 +0000 (14:47 -0500)
In CoreOS live environments, we do have `/run/ostree` but no `ostree=`
karg; we hackily fool `ostree-prepare-root.service` by bind-mounting
over `/proc/cmdline` so it does the right thing. Presumably, we should
clean this up eventually, but even so we don't want to require PXE users
to add an `ostree=` arg, so we need to tolerate this.

So this assertion would fail there. Restore the behaviour prior to
b9ce0e89 and re-add a more contemporary comment.

Fixes b9ce0e89 ("generator: Exit if there's no `/run/ostree`").

src/libostree/ostree-impl-system-generator.c

index 1c4a5d106bdf9103fc9ca727060fea8d5133b3c5..e51584cda8241b13d5553f610f33b88bc3c59611 100644 (file)
@@ -260,9 +260,14 @@ _ostree_impl_system_generator (const char *normal_dir, const char *early_dir, co
   g_autofree char *cmdline = read_proc_cmdline ();
   if (!cmdline)
     return glnx_throw (error, "Failed to read /proc/cmdline");
+
   g_autofree char *ostree_cmdline = otcore_find_proc_cmdline_key (cmdline, "ostree");
-  // SAFETY: If we have /run/ostree, then we must have the ostree= karg
-  g_assert (ostree_cmdline);
+
+  /* This could happen in CoreOS live environments, where we hackily mock
+   * the `ostree=` karg for `ostree-prepare-root.service` specifically, but
+   * otherwise that karg doesn't exist on the real command-line. */
+  if (!ostree_cmdline)
+    return TRUE;
 
   if (!require_internal_units (normal_dir, early_dir, late_dir, error))
     return FALSE;