On Wed, Dec 29, 2021 at 09:44:50PM +0800, Pingfan Liu wrote:
On Tue, Dec 28, 2021 at 08:49:23AM +0800, Coiby Xu wrote:
> grubby --info=kernel-path or --add-kernel=kernel-path accepts a kernel
> path (e.g. /boot/vmlinuz-5.14.14-200.fc34.x86_64) instead of kernel release
> (e.g 5.14.14-200.fc34.x86_64). So we need to know the kernel path given
> a kernel release. Although for Fedora/RHEL, the kernel path is
> "/boot/vmlinuz-<KERNEL_RELEASE>", a path kernel could also be
> /boot/<machine-id>/<KERNEL_RELEASE>/vmlinuz. So the most reliable way to
> find the kernel path given a kernel release is to use "grubby --info".
>
> For osbuild, a kernel path may not yet exist but it's valid for
> "grubby --update-kernel=KERNEL_PATH". For example, "grubby -info"
may
> output something as follows,
>
> index=0
>
kernel="/var/cache/osbuild-worker/osbuild-store/tmp/tmp2prywdy5object/tree/boot/vmlinuz-5.15.10-100.fc34.x86_64"
> args="ro no_timer_check net.ifnames=0 console=tty1 console=ttyS0,115200n8"
> root="UUID=76a22bf4-f153-4541-b6c7-0332c0dfaeac"
>
initrd="/var/cache/osbuild-worker/osbuild-store/tmp/tmp2prywdy5object/tree/boot/initramfs-5.15.10-100.fc34.x86_64.img"
>
> There is no need to check if path like
>
/var/cache/osbuild-worker/osbuild-store/tmp/tmp2prywdy5object/tree/boot/vmlinuz-5.15.10-100.fc34.x86_64
> physically exists.
>
> Note these helper functions doesn't support CoreOS/Atomic/Silverblue
> since grubby isn't used by them.
Out of the topic, what is the boot loader on them?
They still use grub but they don't use grubby.
For this patch,
Reviewed-by: Pingfan Liu <piliu(a)redhat.com>
Thanks for reviewing this patch!
>
> Signed-off-by: Coiby Xu <coxu(a)redhat.com>
> ---
> kdumpctl | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/kdumpctl b/kdumpctl
> index 7eb8e9d3..ea6f481b 100755
> --- a/kdumpctl
> +++ b/kdumpctl
> @@ -1351,6 +1351,36 @@ get_dump_mode_by_kernel()
> fi
> }
>
> +_filter_grubby_kernel_str()
> +{
> + local _grubby_kernel_str=$1
> + echo -n "$_grubby_kernel_str" | sed -n -e
's/^kernel="\(.*\)"/\1/p'
> +}
> +
> +_find_kernel_path_by_release()
> +{
> + local _release="$1" _grubby_kernel_str _kernel_path
> + _grubby_kernel_str=$(grubby --info ALL | grep "^kernel=.*$_release")
> + _kernel_path=$(_filter_grubby_kernel_str "$_grubby_kernel_str")
> + if [[ -z $_kernel_path ]]; then
> + derror "kernel $_release doesn't exist"
> + return 1
> + fi
> + echo -n "$_kernel_path"
> +}
> +
> +_get_current_running_kernel_path()
> +{
> + local _release _path
> +
> + _release=$(uname -r)
> + if _path=$(_find_kernel_path_by_release "$_release"); then
> + echo -n "$_path"
> + else
> + return 1
> + fi
> +}
> +
> reset_crashkernel()
> {
> local kernel=$1 entry crashkernel_default
> --
> 2.31.1
>
--
Best regards,
Coiby