From d69214ade3d5b187ebfbb791d7cfb36155c4f8dd Mon Sep 17 00:00:00 2001 From: Robert Fairley Date: Thu, 14 Mar 2019 19:16:07 -0400 Subject: [PATCH] grub2: Generate config from pending deployment Generate a grub2 config using the pending deployment, if a grub2 bootloader is detected in the sysroot. Allows grub2-mkconfig to run if there are no previous deployments. Fixes: #1774 Closes: #1831 Approved by: jlebon --- src/libostree/ostree-bootloader-grub2.c | 11 +++++------ src/libostree/ostree-bootloader-syslinux.c | 9 +++++---- src/libostree/ostree-bootloader-uboot.c | 9 +++++---- src/libostree/ostree-bootloader.c | 6 ++++-- src/libostree/ostree-bootloader.h | 2 ++ src/libostree/ostree-sysroot-deploy.c | 3 ++- 6 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/libostree/ostree-bootloader-grub2.c b/src/libostree/ostree-bootloader-grub2.c index 57673c7d6b..ceea682ef9 100644 --- a/src/libostree/ostree-bootloader-grub2.c +++ b/src/libostree/ostree-bootloader-grub2.c @@ -332,6 +332,7 @@ grub2_child_setup (gpointer user_data) static gboolean _ostree_bootloader_grub2_write_config (OstreeBootloader *bootloader, int bootversion, + GPtrArray *new_deployments, GCancellable *cancellable, GError **error) { @@ -357,15 +358,11 @@ _ostree_bootloader_grub2_write_config (OstreeBootloader *bootloader, if (use_system_grub2_mkconfig && ostree_sysroot_get_booted_deployment (self->sysroot) == NULL && g_file_has_parent (self->sysroot->path, NULL)) { - g_autoptr(GPtrArray) deployments = NULL; OstreeDeployment *tool_deployment; g_autoptr(GFile) tool_deployment_root = NULL; - deployments = ostree_sysroot_get_deployments (self->sysroot); - - g_assert_cmpint (deployments->len, >, 0); - - tool_deployment = deployments->pdata[0]; + g_assert_cmpint (new_deployments->len, >, 0); + tool_deployment = new_deployments->pdata[0]; /* Sadly we have to execute code to generate the bootloader configuration. * If we're in a booted deployment, we just don't chroot. @@ -380,6 +377,8 @@ _ostree_bootloader_grub2_write_config (OstreeBootloader *bootloader, grub2_mkconfig_chroot = g_file_get_path (tool_deployment_root); } + g_debug ("Using grub2-mkconfig chroot: %s\n", grub2_mkconfig_chroot); + g_autoptr(GFile) new_config_path = NULL; g_autoptr(GFile) config_path_efi_dir = NULL; if (self->is_efi) diff --git a/src/libostree/ostree-bootloader-syslinux.c b/src/libostree/ostree-bootloader-syslinux.c index 8b09a861b2..5fb8a1dbd2 100644 --- a/src/libostree/ostree-bootloader-syslinux.c +++ b/src/libostree/ostree-bootloader-syslinux.c @@ -108,10 +108,11 @@ append_config_from_loader_entries (OstreeBootloaderSyslinux *self, } static gboolean -_ostree_bootloader_syslinux_write_config (OstreeBootloader *bootloader, - int bootversion, - GCancellable *cancellable, - GError **error) +_ostree_bootloader_syslinux_write_config (OstreeBootloader *bootloader, + int bootversion, + GPtrArray *new_deployments, + GCancellable *cancellable, + GError **error) { OstreeBootloaderSyslinux *self = OSTREE_BOOTLOADER_SYSLINUX (bootloader); diff --git a/src/libostree/ostree-bootloader-uboot.c b/src/libostree/ostree-bootloader-uboot.c index 531a375600..87a9380678 100644 --- a/src/libostree/ostree-bootloader-uboot.c +++ b/src/libostree/ostree-bootloader-uboot.c @@ -158,10 +158,11 @@ create_config_from_boot_loader_entries (OstreeBootloaderUboot *self, } static gboolean -_ostree_bootloader_uboot_write_config (OstreeBootloader *bootloader, - int bootversion, - GCancellable *cancellable, - GError **error) +_ostree_bootloader_uboot_write_config (OstreeBootloader *bootloader, + int bootversion, + GPtrArray *new_deployments, + GCancellable *cancellable, + GError **error) { OstreeBootloaderUboot *self = OSTREE_BOOTLOADER_UBOOT (bootloader); diff --git a/src/libostree/ostree-bootloader.c b/src/libostree/ostree-bootloader.c index 87823f7ea5..5b8125dcc4 100644 --- a/src/libostree/ostree-bootloader.c +++ b/src/libostree/ostree-bootloader.c @@ -54,13 +54,15 @@ _ostree_bootloader_get_name (OstreeBootloader *self) gboolean _ostree_bootloader_write_config (OstreeBootloader *self, int bootversion, + GPtrArray *new_deployments, GCancellable *cancellable, GError **error) { g_return_val_if_fail (OSTREE_IS_BOOTLOADER (self), FALSE); - return OSTREE_BOOTLOADER_GET_IFACE (self)->write_config (self, bootversion, - cancellable, error); + return OSTREE_BOOTLOADER_GET_IFACE (self)->write_config (self, bootversion, + new_deployments, + cancellable, error); } gboolean diff --git a/src/libostree/ostree-bootloader.h b/src/libostree/ostree-bootloader.h index a4793b08c8..5af2dcc8a3 100644 --- a/src/libostree/ostree-bootloader.h +++ b/src/libostree/ostree-bootloader.h @@ -44,6 +44,7 @@ struct _OstreeBootloaderInterface const char * (* get_name) (OstreeBootloader *self); gboolean (* write_config) (OstreeBootloader *self, int bootversion, + GPtrArray *new_deployments, GCancellable *cancellable, GError **error); gboolean (* is_atomic) (OstreeBootloader *self); @@ -61,6 +62,7 @@ const char *_ostree_bootloader_get_name (OstreeBootloader *self); gboolean _ostree_bootloader_write_config (OstreeBootloader *self, int bootversion, + GPtrArray *new_deployments, GCancellable *cancellable, GError **error); diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index d37861b7ba..22aa4a4385 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -2122,7 +2122,8 @@ write_deployments_bootswap (OstreeSysroot *self, if (bootloader) { if (!_ostree_bootloader_write_config (bootloader, new_bootversion, - cancellable, error)) + new_deployments, cancellable, + error)) return glnx_prefix_error (error, "Bootloader write config"); }