const char *bootcsum = ostree_deployment_get_bootcsum (deployment);
g_autofree char *bootcsumdir = g_strdup_printf ("ostree/%s-%s", osname, bootcsum);
g_autofree char *bootconfdir = g_strdup_printf ("loader.%d/entries", new_bootversion);
- g_autofree char *bootconf_name = g_strdup_printf (
- "ostree-%d-%s.conf", n_deployments - ostree_deployment_get_index (deployment), osname);
+ g_autofree char *bootconf_name = NULL;
+ guint index = n_deployments - ostree_deployment_get_index (deployment);
+ // Allow opt-in to dropping the stateroot, because grub2 parses the *filename* and ignores
+ // the version field. xref https://github.com/ostreedev/ostree/issues/2961
+ bool use_new_naming = (sysroot->opt_flags & OSTREE_SYSROOT_GLOBAL_OPT_BOOTLOADER_NAMING_2) > 0;
+ if (use_new_naming)
+ bootconf_name = g_strdup_printf ("ostree-%d.conf", index);
+ else
+ bootconf_name = g_strdup_printf ("ostree-%d-%s.conf", index, osname);
if (!glnx_shutil_mkdir_p_at (sysroot->boot_fd, bootcsumdir, 0775, cancellable, error))
return FALSE;
OSTREE_SYSROOT_GLOBAL_OPT_SKIP_SYNC = 1 << 0,
/* See https://github.com/ostreedev/ostree/pull/2847 */
OSTREE_SYSROOT_GLOBAL_OPT_EARLY_PRUNE = 1 << 1,
+ OSTREE_SYSROOT_GLOBAL_OPT_BOOTLOADER_NAMING_2 = 1 << 2,
} OstreeSysrootGlobalOptFlags;
typedef enum
const GDebugKey globalopt_keys[] = {
{ "skip-sync", OSTREE_SYSROOT_GLOBAL_OPT_SKIP_SYNC },
{ "early-prune", OSTREE_SYSROOT_GLOBAL_OPT_EARLY_PRUNE },
+ { "bootloader-naming-2", OSTREE_SYSROOT_GLOBAL_OPT_BOOTLOADER_NAMING_2 },
};
const GDebugKey keys[] = {
{ "mutable-deployments", OSTREE_SYSROOT_DEBUG_MUTABLE_DEPLOYMENTS },
fn suppress_ostree_global_sync(sh: &xshell::Shell) -> Result<()> {
let dropindir = "/etc/systemd/system/ostree-finalize-staged.service.d";
std::fs::create_dir_all(dropindir)?;
+ // Aslo opt-in to the new bootloader naming
std::fs::write(
- Path::new(dropindir).join("50-suppress-sync.conf"),
- "[Service]\nEnvironment=OSTREE_SYSROOT_OPTS=skip-sync\n",
+ Path::new(dropindir).join("50-test-options.conf"),
+ "[Service]\nEnvironment=OSTREE_SYSROOT_OPTS=skip-sync,bootloader-naming-2\n",
)?;
cmd!(sh, "systemctl daemon-reload").run()?;
Ok(())