From 95f286b9b474fc71889bfeb0c31f5ca07b8ff245 Mon Sep 17 00:00:00 2001 From: Simon de Vlieger Date: Mon, 3 Aug 2026 18:12:06 +0200 Subject: [PATCH] kernel-config: entry_name_format in install.conf Extend load_kernel_install_conf_at() to parse the new entry_name_format= setting from install.conf. This plumbing only, no behavioral change yet. Existing callers pass NULL for the new parameter. The entry_name_format= setting will allow configuring the boot entry filename format using specifiers, replacing the current hardcoded $ENTRY_TOKEN-$KERNEL_VERSION pattern. This is useful for image-based OS builds (e.g. via mkosi, or image-builder) that require versioned UKI filenames in the ESP for sysupdate A/B updates. Having this configuration option allows to do that directly at build time without having to side-step kernel-install and moving files around manually. --- src/bootctl/bootctl-install.c | 3 ++- src/kernel-install/kernel-install.c | 3 ++- src/shared/kernel-config.c | 19 ++++++++++++------- src/shared/kernel-config.h | 8 +++++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/bootctl/bootctl-install.c b/src/bootctl/bootctl-install.c index 1610d11e920..080900c1f57 100644 --- a/src/bootctl/bootctl-install.c +++ b/src/bootctl/bootctl-install.c @@ -338,7 +338,8 @@ static int load_kernel_install_layout(InstallContext *c) { /* ret_boot_root= */ NULL, &layout, /* ret_initrd_generator= */ NULL, - /* ret_uki_generator= */ NULL); + /* ret_uki_generator= */ NULL, + /* ret_entry_name_format= */ NULL); if (r <= 0) return r; diff --git a/src/kernel-install/kernel-install.c b/src/kernel-install/kernel-install.c index 69fdbcfc34a..8f5be2b42b4 100644 --- a/src/kernel-install/kernel-install.c +++ b/src/kernel-install/kernel-install.c @@ -467,7 +467,8 @@ static int context_load_install_conf(Context *c) { &boot_root, &layout, &initrd_generator, - &uki_generator); + &uki_generator, + /* ret_entry_name_format= */ NULL); if (r <= 0) return r; diff --git a/src/shared/kernel-config.c b/src/shared/kernel-config.c index 3f575439a78..d12ad61d93e 100644 --- a/src/shared/kernel-config.c +++ b/src/shared/kernel-config.c @@ -14,16 +14,19 @@ int load_kernel_install_conf_at( char **ret_boot_root, char **ret_layout, char **ret_initrd_generator, - char **ret_uki_generator) { + char **ret_uki_generator, + char **ret_entry_name_format) { _cleanup_free_ char *machine_id = NULL, *boot_root = NULL, *layout = NULL, - *initrd_generator = NULL, *uki_generator = NULL; + *initrd_generator = NULL, *uki_generator = NULL, + *entry_name_format = NULL; const ConfigTableItem items[] = { - { NULL, "MACHINE_ID", config_parse_string, 0, &machine_id }, - { NULL, "BOOT_ROOT", config_parse_string, 0, &boot_root }, - { NULL, "layout", config_parse_string, 0, &layout }, - { NULL, "initrd_generator", config_parse_string, 0, &initrd_generator }, - { NULL, "uki_generator", config_parse_string, 0, &uki_generator }, + { NULL, "MACHINE_ID", config_parse_string, 0, &machine_id }, + { NULL, "BOOT_ROOT", config_parse_string, 0, &boot_root }, + { NULL, "layout", config_parse_string, 0, &layout }, + { NULL, "initrd_generator", config_parse_string, 0, &initrd_generator }, + { NULL, "uki_generator", config_parse_string, 0, &uki_generator }, + { NULL, "entry_name_format", config_parse_string, 0, &entry_name_format }, {} }; int r; @@ -71,5 +74,7 @@ int load_kernel_install_conf_at( *ret_initrd_generator = TAKE_PTR(initrd_generator); if (ret_uki_generator) *ret_uki_generator = TAKE_PTR(uki_generator); + if (ret_entry_name_format) + *ret_entry_name_format = TAKE_PTR(entry_name_format); return r >= 0; /* Return 0 if we got -ENOENT above, 1 otherwise. */ } diff --git a/src/shared/kernel-config.h b/src/shared/kernel-config.h index d46aba82785..34c71387b9b 100644 --- a/src/shared/kernel-config.h +++ b/src/shared/kernel-config.h @@ -12,7 +12,8 @@ int load_kernel_install_conf_at( char **ret_boot_root, char **ret_layout, char **ret_initrd_generator, - char **ret_uki_generator); + char **ret_uki_generator, + char **ret_entry_name_format); static inline int load_kernel_install_conf( const char *root, @@ -21,7 +22,8 @@ static inline int load_kernel_install_conf( char **ret_boot_root, char **ret_layout, char **ret_initrd_generator, - char **ret_uki_generator) { + char **ret_uki_generator, + char **ret_entry_name_format) { - return load_kernel_install_conf_at(root, XAT_FDROOT, conf_root, ret_machine_id, ret_boot_root, ret_layout, ret_initrd_generator, ret_uki_generator); + return load_kernel_install_conf_at(root, XAT_FDROOT, conf_root, ret_machine_id, ret_boot_root, ret_layout, ret_initrd_generator, ret_uki_generator, ret_entry_name_format); }