Ping? On 01/03/2024, 15:43, "Simon Rowe" <simon.r...@nutanix.com> wrote:
Kernel parameters actually cover a range of purposes, including userspace like systemd. They also need setting for a variety of reasons: * as distro defaults * to provide configuration for a package * for an admin to set desired behaviour Having these all combined in a single line (like GRUB_CMDLINE_LINUX) is unwieldy, it is hard to make changes without impacting another usecase. Add optional support for dropin files in the directories: * /usr/lib/kernel.d/ * /etc/kernel.d/ where the contents of each file with the '.conf' suffix is evaluated (excluding comments) and appended to any other kernel parameters defined via GRUB_CMDLINE_LINUX etc. Files in /etc/kernel.d/ completely replace those of the same name in /usr/lib/kernel.d/. This allows a distro or installer to set parameters but then for an admin to override them. Signed-off-by: Simon Rowe <simon.r...@nutanix.com> --- util/grub-mkconfig_lib.in | 18 ++++++++++++++++++ util/grub.d/10_linux.in | 8 +++++--- util/grub.d/20_linux_xen.in | 8 +++++--- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in index 08953287c..7aaa747f1 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -348,3 +348,21 @@ grub_add_tab () { sed -e "s/^/$grub_tab/" } +kernel_params_from_files () { + # Read Linux kernel parameters from dropin files. + + file_bases="" + + for f in /etc/kernel.d/*.conf /usr/lib/kernel.d/*.conf; do + [ -r $f ] || continue + file_bases="$file_bases $(basename $f)" + done + + for b in $(echo $file_bases | tr ' ' '\n' | sort -u); do + if [ -r /etc/kernel.d/$b ]; then + grep -v '^#' /etc/kernel.d/$b | tr '\n' ' ' + elif [ -r /usr/lib/kernel.d/$b ]; then + grep -v '^#' /usr/lib/kernel.d/$b | tr '\n' ' ' + fi + done +} diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index cc393be7e..fba3775f9 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -275,6 +275,8 @@ for linux in ${reverse_sorted_list}; do fi fi + extra_kernel_params=$(kernel_params_from_files) + # The GRUB_DISABLE_SUBMENU option used to be different than others since it was # mentioned in the documentation that has to be set to 'y' instead of 'true' to # enable it. This caused a lot of confusion to users that set the option to 'y', @@ -285,7 +287,7 @@ for linux in ${reverse_sorted_list}; do if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then linux_entry "${OS}" "${version}" simple \ - "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${extra_kernel_params}" submenu_indentation="$grub_tab" @@ -298,10 +300,10 @@ for linux in ${reverse_sorted_list}; do fi linux_entry "${OS}" "${version}" advanced \ - "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} ${extra_kernel_params}" if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then linux_entry "${OS}" "${version}" recovery \ - "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" + "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX} ${extra_kernel_params}" fi done diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in index 94dd8be13..089f6de43 100644 --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in @@ -336,6 +336,8 @@ for current_xen in ${reverse_sorted_xen_list}; do fi fi + extra_kernel_params=$(kernel_params_from_files) + # The GRUB_DISABLE_SUBMENU option used to be different than others since it was # mentioned in the documentation that has to be set to 'y' instead of 'true' to # enable it. This caused a lot of confusion to users that set the option to 'y', @@ -346,7 +348,7 @@ for current_xen in ${reverse_sorted_xen_list}; do if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then linux_entry "${OS}" "${version}" "${xen_version}" simple \ - "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}" + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT} ${extra_kernel_params}" submenu_indentation="$grub_tab$grub_tab" @@ -360,10 +362,10 @@ for current_xen in ${reverse_sorted_xen_list}; do fi linux_entry "${OS}" "${version}" "${xen_version}" advanced \ - "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}" + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT} ${extra_kernel_params}" if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then linux_entry "${OS}" "${version}" "${xen_version}" recovery \ - "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}" + "${GRUB_CMDLINE_LINUX_RECOVERY} ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN} ${extra_kernel_params}" fi done if [ x"$is_top_level" != xtrue ]; then -- 2.22.3
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel