From 460fb7aebc23de4e11e4b9855bbbc866cb0f9430 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 23 Mar 2018 15:25:14 -0400 Subject: [PATCH] lib/deploy: Set kargs in one place Prep for deployment staging. We had the code to hande "explicit kargs" in one place, but the "use merge deployment" karg bits mixed in with the "/etc merge" logic. Those are separate things, and it's better to have karg handling in one place. Closes: #1514 Approved by: jlebon --- src/libostree/ostree-sysroot-deploy.c | 54 ++++++++++++--------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index 93a29ed6..f6b562d2 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -759,20 +759,6 @@ merge_configuration (OstreeSysroot *sysroot, GLNX_AUTO_PREFIX_ERROR ("During /etc merge", error); g_autoptr(OstreeSePolicy) sepolicy = NULL; - if (previous_deployment) - { - OstreeBootconfigParser *previous_bootconfig = ostree_deployment_get_bootconfig (previous_deployment); - if (previous_bootconfig) - { - const char *previous_options = ostree_bootconfig_parser_get (previous_bootconfig, "options"); - /* Completely overwrite the previous options here; we will extend - * them later. - */ - ostree_bootconfig_parser_set (ostree_deployment_get_bootconfig (deployment), "options", - previous_options); - } - } - struct stat stbuf; if (!glnx_fstatat_allow_noent (deployment_dfd, "etc", &stbuf, AT_SYMLINK_NOFOLLOW, error)) return FALSE; @@ -2431,12 +2417,32 @@ ostree_sysroot_deploy_tree (OstreeSysroot *self, _ostree_deployment_set_bootcsum (new_deployment, kernel_layout->bootcsum); - /* Create an empty boot configuration; we will merge things into - * it as we go. - */ + /* Initial empty boot configuration. */ g_autoptr(OstreeBootconfigParser) bootconfig = ostree_bootconfig_parser_new (); ostree_deployment_set_bootconfig (new_deployment, bootconfig); + /* Handle kernel arguments. After this, install_deployment_kernel() will set + * the other boot options and write it out to disk. + */ + if (override_kernel_argv) + { + /* We have an override set, use it */ + g_autoptr(OstreeKernelArgs) kargs = _ostree_kernel_args_new (); + _ostree_kernel_args_append_argv (kargs, override_kernel_argv); + g_autofree char *new_options = _ostree_kernel_args_to_string (kargs); + ostree_bootconfig_parser_set (bootconfig, "options", new_options); + } + else if (provided_merge_deployment) + { + /* Use the merge options by default */ + OstreeBootconfigParser *merge_bootconfig = ostree_deployment_get_bootconfig (provided_merge_deployment); + if (merge_bootconfig) + { + const char *opts = ostree_bootconfig_parser_get (merge_bootconfig, "options"); + ostree_bootconfig_parser_set (bootconfig, "options", opts); + } + } + g_autoptr(OstreeSePolicy) sepolicy = NULL; if (!merge_configuration (self, repo, merge_deployment, new_deployment, deployment_dfd, @@ -2463,20 +2469,6 @@ ostree_sysroot_deploy_tree (OstreeSysroot *self, cancellable, error)) return FALSE; - /* After this, install_deployment_kernel() will set the other boot - * options and write it out to disk. - */ - if (override_kernel_argv) - { - g_autoptr(OstreeKernelArgs) kargs = NULL; - g_autofree char *new_options = NULL; - - kargs = _ostree_kernel_args_new (); - _ostree_kernel_args_append_argv (kargs, override_kernel_argv); - new_options = _ostree_kernel_args_to_string (kargs); - ostree_bootconfig_parser_set (bootconfig, "options", new_options); - } - ot_transfer_out_value (out_new_deployment, &new_deployment); return TRUE; }