You are not logged in.

#1 2022-12-24 17:57:11

habit
Member
Registered: 2022-12-24
Posts: 14

GRUB OS PROBER configuration

Hello! I have dual boot (triple boot?) system - arch, fedora, win11.
GRUB is too hard for me, so I'm using generated grub config with enabled os-prober.
Only problem I have - I need to add specific options to the kernel line to fedora menuentry, 'quiet, etc...', please, share information how to ask os-prober to do it, I understand I can manually edit menuentry, but it will be lost after kernel upgrade or just new regenerating file.
Thank you!

Offline

#2 2022-12-24 19:18:28

Head_on_a_Stick
Member
From: The Wirral
Registered: 2014-02-20
Posts: 8,842
Website

Re: GRUB OS PROBER configuration

I think the best solution would be to let Fedora generate it's own grub.cfg with it's own options and then use that file in Arch's boot menu.

Something like this in Arch's /etc/grub.d/40_custom or /boot/grub/custom.cfg should work (replace $uuid with the actual filesystem UUID of the partition containing Fedora's grub.cfg, adjust the path if needed):

menuentry 'Fedora' {
   search.fs_uuid $uuid
   configfile /boot/grub/grub.cfg
}

EDIT: and also disable the automatically generated Fedora menuentry by adding the UUID to GRUB_OS_PROBER_SKIP_LIST in /etc/default/grub.

EDIT2: my original answer presumes that different options are required for Arch and Fedora. If you want the same options applied to both see https://wiki.archlinux.org/title/GRUB#A … _arguments.

Last edited by Head_on_a_Stick (2022-12-24 20:29:08)


Jin, Jîyan, Azadî

Offline

#3 2022-12-24 20:43:31

habit
Member
Registered: 2022-12-24
Posts: 14

Re: GRUB OS PROBER configuration

I have edited /etc/grub.d/40_custom file as:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Fedora' {
   search.fs_uuid 097a6407-47aa-4038-a66f-61d805791bfe
   configfile /boot/grub/grub.cfg

also added line

GRUB_OS_PROBER_SKIP_LIST=097a6407-47aa-4038-a66f-61d805791bfe

to /etc/defaults/grub file.
Now during the boot I have 'Fedora' menuentry with this:

setparams 'Fedora'
    search.fs_uuid 097a6407-47aa-4038-a66f-61d805791bfe
    configfile /boot/grub/grub.cfg

and this menuentry doesn't work. What had I did wrong?

Last edited by habit (2022-12-24 20:46:50)

Offline

#4 2022-12-24 20:47:40

Head_on_a_Stick
Member
From: The Wirral
Registered: 2014-02-20
Posts: 8,842
Website

Re: GRUB OS PROBER configuration

Did you add the closing curly bracket to /etc/grub.d/40_custom? It's missing from your last post.


Jin, Jîyan, Azadî

Offline

#5 2022-12-25 07:05:29

habit
Member
Registered: 2022-12-24
Posts: 14

Re: GRUB OS PROBER configuration

True, now I have working menuentry

 'Fedora Linux 37 (Workstation Edition) (on /dev/nvme0n1p8)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-097a6407-47aa-4038-a66f-61d805791bfe' {
	insmod part_gpt
	insmod btrfs
	search --no-floppy --fs-uuid --set=root 097a6407-47aa-4038-a66f-61d805791bfe
	linux /boot/vmlinuz-6.0.14-300.fc37.x86_64 root=/dev/nvme0n1p8
	initrd /boot/initramfs-6.0.14-300.fc37.x86_64.img

and don't working menuentry

'Fedora' {
   search.fs_uuid 097a6407-47aa-4038-a66f-61d805791bfe
   configfile /boot/grub/grub.cfg
}

Last thing I need to add somehow 'rhgb, quiet' options to fedora kernel boot options and hide don't working custom menuentry. Thank you for your patience dear sir!

UPD. Working Fedora menuentry goes away if grub.cfg configuring with Fedora unmounted partition, and I have only menuentry:

'Fedora' {
   search.fs_uuid 097a6407-47aa-4038-a66f-61d805791bfe
   configfile /boot/grub/grub.cfg
}

So it looks added line

GRUB_OS_PROBER_SKIP_LIST=097a6407-47aa-4038-a66f-61d805791bfe

to /etc/defaults/grub file doesn't work?

Last edited by habit (2022-12-25 07:22:12)

Offline

#6 2022-12-25 11:48:19

Head_on_a_Stick
Member
From: The Wirral
Registered: 2014-02-20
Posts: 8,842
Website

Re: GRUB OS PROBER configuration

habit wrote:

True, now I have working menuentry

 'Fedora Linux 37 (Workstation Edition) (on /dev/nvme0n1p8)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-097a6407-47aa-4038-a66f-61d805791bfe' {
	insmod part_gpt
	insmod btrfs
	search --no-floppy --fs-uuid --set=root 097a6407-47aa-4038-a66f-61d805791bfe
	linux /boot/vmlinuz-6.0.14-300.fc37.x86_64 root=/dev/nvme0n1p8
	initrd /boot/initramfs-6.0.14-300.fc37.x86_64.img

That entry will have to be updated whenever the Fedora kernel version changes.

habit wrote:

and don't working menuentry

Does Fedora have /boot/grub/grub.cfg? It is needed for this method to work.

habit wrote:

I need to add somehow 'rhgb, quiet' options to fedora kernel boot options and hide don't working custom menuentry.

I've already told you how to add custom options to all (Linux) menuentries. The custom menuentry is only needed if Arch and Fedora need different options.


Jin, Jîyan, Azadî

Offline

#7 2022-12-25 12:21:35

habit
Member
Registered: 2022-12-24
Posts: 14

Re: GRUB OS PROBER configuration

Head_on_a_Stick wrote:

Does Fedora have /boot/grub/grub.cfg? It is needed for this method to work.

actual path is /boot/grub2/grub.cfg, and yes, I have it, but it doesn't work for me, I don't know why.

Offline

#8 2022-12-25 12:23:38

habit
Member
Registered: 2022-12-24
Posts: 14

Re: GRUB OS PROBER configuration

Head_on_a_Stick wrote:

I've already told you how to add custom options to all (Linux) menuentries. The custom menuentry is only needed if Arch and Fedora need different options.

Yes, I know, thank for your time. I just can't get why it doesn't work for me. I need 'rhgb quiet' for Fedora. It works fine if I am adding it manually in grub during the boot process using os-prober automatic settings, but our custom entry doesn't boot.

Offline

#9 2022-12-25 12:37:29

Head_on_a_Stick
Member
From: The Wirral
Registered: 2014-02-20
Posts: 8,842
Website

Re: GRUB OS PROBER configuration

habit wrote:

actual path is /boot/grub2/grub.cfg, and yes, I have it, but it doesn't work for me

Please share that file. What actually happens when you select the custom menuentry? What do you see on the screen?


Jin, Jîyan, Azadî

Offline

#10 2022-12-25 13:39:49

habit
Member
Registered: 2022-12-24
Posts: 14

Re: GRUB OS PROBER configuration

this is grub.cfg of Fedora:

[user@arch ~]$ sudo cat /mnt/fedora/boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
  source ${prefix}/user.cfg
  if [ -n "${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
fi
### END /etc/grub.d/01_users ###

### BEGIN /etc/grub.d/08_fallback_counting ###
insmod increment
# Check if boot_counter exists and boot_success=0 to activate this behaviour.
if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
  # if countdown has ended, choose to boot rollback deployment,
  # i.e. default=1 on OSTree-based systems.
  if  [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
    set default=1
    set boot_counter=-1
  # otherwise decrement boot_counter
  else
    decrement boot_counter
  fi
  save_env boot_counter
fi
### END /etc/grub.d/08_fallback_counting ###

### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod btrfs
search --no-floppy --fs-uuid --set=root 097a6407-47aa-4038-a66f-61d805791bfe
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=boot D9A4-679C

# This section was generated by a script. Do not modify the generated file - all changes
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
#
# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
# populates the boot menu. Please refer to the Boot Loader Specification documentation
# for the files format: https://systemd.io/BOOT_LOADER_SPECIFICATION/.

# The kernelopts variable should be defined in the grubenv file. But to ensure that menu
# entries populated from BootLoaderSpec files that use this variable work correctly even
# without a grubenv file, define a fallback kernelopts variable if this has not been set.
#
# The kernelopts variable in the grubenv file can be modified using the grubby tool or by
# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
# the kernelopts variable in the grubenv file and the fallback kernelopts variable.
if [ -z "${kernelopts}" ]; then
  set kernelopts="root=UUID=097a6407-47aa-4038-a66f-61d805791bfe ro resume=UUID=13f77652-759f-4407-b119-2c46e154c46f rhgb quiet "
fi

insmod blscfg
blscfg
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/10_reset_boot_success ###
# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
  set menu_hide_ok=1
else
  set menu_hide_ok=0 
fi
# Reset boot_indeterminate after a successful boot
if [ "${boot_success}" = "1" ] ; then
  set boot_indeterminate=0
# Avoid boot_indeterminate causing the menu to be hidden more than once
elif [ "${boot_indeterminate}" = "1" ]; then
  set boot_indeterminate=2
fi
# Reset boot_success for current boot 
set boot_success=0
save_env boot_success boot_indeterminate
### END /etc/grub.d/10_reset_boot_success ###

### BEGIN /etc/grub.d/12_menu_auto_hide ###
if [ x$feature_timeout_style = xy ] ; then
  if [ "${menu_show_once}" ]; then
    unset menu_show_once
    save_env menu_show_once
    set timeout_style=menu
    set timeout=60
  elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
    set orig_timeout_style=${timeout_style}
    set orig_timeout=${timeout}
    if [ "${fastboot}" = "1" ]; then
      # timeout_style=menu + timeout=0 avoids the countdown code keypress check
      set timeout_style=menu
      set timeout=0
    else
      set timeout_style=hidden
      set timeout=1
    fi
  fi
fi
### END /etc/grub.d/12_menu_auto_hide ###

### BEGIN /etc/grub.d/14_menu_show_once ###
if [ x$feature_timeout_style = xy ]; then
  if [ "${menu_show_once_timeout}" ]; then
    set timeout_style=menu
    set timeout="${menu_show_once_timeout}"
    unset menu_show_once_timeout
    save_env menu_show_once_timeout
  fi
fi
### END /etc/grub.d/14_menu_show_once ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
if [ "$grub_platform" = "efi" ]; then
	menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
		fwsetup
	}
fi
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/35_fwupd ###
### END /etc/grub.d/35_fwupd ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###
[user@arch ~]$ 

When i'm choosing custom Fedora menuentry

'Fedora' 
   search.fs_uuid 097a6407-47aa-4038-a66f-61d805791bfe
   configfile /boot/grub2/grub.cfg

screen is blinking, and nothing happens - I'm on grub menu list, where I should choose needed entry.

Offline

#11 2022-12-25 13:59:04

Head_on_a_Stick
Member
From: The Wirral
Registered: 2014-02-20
Posts: 8,842
Website

Re: GRUB OS PROBER configuration

habit wrote:

this is grub.cfg of Fedora:

### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod btrfs
search --no-floppy --fs-uuid --set=root 097a6407-47aa-4038-a66f-61d805791bfe
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=boot D9A4-679C

That's setting a separate /boot partition. Does your Fedora system have a separate /boot partition?

habit wrote:
insmod blscfg
blscfg

That is a custom Fedora GRUB module that builds dynamic menuentries. It won't work because we're trying to use Arch's GRUB modules. Apologies for this mistake, I was unaware of this Fedora abstraction.

It might be best to let Fedora control the bootloader and run configfile to read Arch's grub.cfg instead.


Jin, Jîyan, Azadî

Offline

#12 2022-12-25 14:02:37

habit
Member
Registered: 2022-12-24
Posts: 14

Re: GRUB OS PROBER configuration

Actually default os-prober variant will be ok for me, but I can’t get how to ask add ‘rhgb quiet’ to fedora’s kernel line. My main system is arch for now, so I would prefer using arch.

Last edited by habit (2022-12-25 14:04:03)

Offline

#13 2022-12-25 14:08:03

Head_on_a_Stick
Member
From: The Wirral
Registered: 2014-02-20
Posts: 8,842
Website

Re: GRUB OS PROBER configuration

The os-prober variant is using the block device to identify the root partition, which is unreliable, and it will stop working whenever the kernel in Fedora is updated. The only way to add 'rhgb quiet' using os-prober is via GRUB_CMDLINE_LINUX{,_DEFAULT}, but then it would also be applied to Arch as well.

If you use Fedora's GRUB instead then you can add 'rhgb quiet' to GRUB_CMDLINE_LINUX in that, block Arch's UUID from os-prober and call Arch's grub.cfg so that can set it's own kernel options. Fedora's GRUB would update itself for new kernels automatically thanks to the blscfg module.


Jin, Jîyan, Azadî

Offline

Board footer

Powered by FluxBB