Grub related help

Post also your Fedora native /boot/grub/grub.cfg
Also post Fedora's /etc/fstab.

[root@Austin-Inspiron-15-3567 grub2]# cat 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
set root='hd0,gpt9'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9  c91d6048-0454-45ca-b764-76d675514da0
else
  search --no-floppy --fs-uuid --set=root c91d6048-0454-45ca-b764-76d675514da0
fi
insmod part_gpt
insmod fat
set boot='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=boot --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  D7C4-586F
else
  search --no-floppy --fs-uuid --set=boot D7C4-586F
fi

# 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://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.

# 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=c91d6048-0454-45ca-b764-76d675514da0 ro resume=UUID=6b5ddbb5-9b43-4351-8ca3-60d4cd7a5cf7 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 then 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 ###
menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-D7C4-586F' {
        insmod part_gpt
        insmod fat
        set root='hd0,gpt1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1  D7C4-586F
        else
          search --no-floppy --fs-uuid --set=root D7C4-586F
        fi
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
# Other OS found, undo autohiding of menu unless menu_auto_hide=2
if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then
  set timeout_style=${orig_timeout_style}
  set timeout=${orig_timeout}
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
        fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### 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 ###
1 Like
[root@Austin-Inspiron-15-3567 etc]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Tue Apr 20 09:54:12 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=c91d6048-0454-45ca-b764-76d675514da0 /                       btrfs   defaults        0 1
UUID=D7C4-586F          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
UUID=2507d4a8-71d4-42ba-a9bb-f69d28a356cf  /run/media/austin/2507d4a8-71d4-42ba-a9bb-f69d28a356cf      ext4    defaults,noatime 0 2
UUID=5914db71-e77a-474e-8143-edad647064bd  /run/media/austin/5914db71-e77a-474e-8143-edad647064bd ext4 defaults         0 2
[root@Austin-Inspiron-15-3567 etc]#
1 Like

Thanks for the input.
Please also provide from Fedora partition

/boot/grub/grubenv
[root@Austin-Inspiron-15-3567 grub2]# cat grubenv
# GRUB Environment Block
saved_entry=ee5e4c2e42a949c28d265f5ee7049204-5.12.8-300.fc34.x86_64
menu_auto_hide=1
boot_success=1
save_default=true
#######################################################################################################################################################################
#######################################################################################################################################################################
#######################################################################################################################################################################
#######################################################################################################################################################################
#######################################################################################################################################################################
##############################################[root@Austin-Inspiron-15-3567 grub2]
1 Like

Here you have an opportunity to learn more about linux.

  • Boot to Fedora
  • Edit /etc/default/grub and change the above param to false
  • Generate grub configuration
  • Reboot to Garuda
  • Undo the custom fix/solution, editing /etc/grub.d/30_os-prober (save)
  • Undo/remove the Fedora-specific grub CMDLINE parameters (save)
  • Generate grub configuration
  • Either check the generated Fedora entry in /boot/grub/grub.cfg for linux line parameters, or… reboot to Fedora, using Garuda grub

If after the above, Fedora’s grub entry automagically includes the lost parameters, or… boots normally (with plymouth etc.), report here and then I will explain everything. :wink:


Important Note: If using Fedora Primary entry fails, try again with the submenu entries.

4 Likes

I did them all but no luck :man_shrugging:

That's a pity.

Anyway, here 's the story.

Fedora wants to push the Linux community to a unified (multi)boot model, following freedesktop standards, so all these difficulties we face when multibooting become history. That's a great idea/proposal IMHO.
They created the functionality, so they can see/test if it works.
Because all the other organisms were not convinced(?) or haven't decided yet, they switched their booting model to this new method.
In order to do that, using grub, they had to modify the original grub package, patching it, adding special functionality that dynamically builds the kernel boot command line, reading other (files') configuration (similar to systemd-boot nd rEFInd templates).
When you boot with Fedora grub, because it is advanced (patched/modified), the boot process is complete with configured parameters.
When you boot with Garuda, or any other non-Fedora grub, only the proper partition is discovered, since there is nothing else discoverable inside the existing Fedora grub.cfg (inside which grub-mkconfig looks and gets command line parameters, as it does for every other Linux distro).

That's it.

Now, as I already explained (tried to...), what you will do is up to you and how you want to administer your system.
The workaround you have applied ADDS the CMDLINE parameters that you explicitly set on/for Garuda to ALL LINUX distributions on your computer. No other system needs them except Fedora. If you had 25 Linux systems multi-booting, only Fedora systems would profit from that addition (because they have none), while all the others get them twice (their original native parameters are already discovered and properly set by grub).
As already suggested, if you are going to primarily use Garuda as your everyday system, you may add a custom grub entry for Fedora only in /boot/grub/custom.cfg and exclude auto discovery for Fedora.
That's the proper way IMO.

But since you are the boss on your own system and since you want to gain knowledge, you may choose whatever is in your desire.

If you disagree with my technical assessment, please, provide justification and evidence. I always like to gain more knowledge :wink:


Maybe it's not needed to point out the fact that the workaround will be gone after each grub/os-prober package update :warning:

5 Likes

:hugs: :grin: :wink: :star_struck:, this was what I was waiting for, as a user of multiple OSs.
I was thinking of kind of the exact same idea. This is awesome I hope this feature is implemented to all Linux OSs soon, including our Garuda!

1 Like

Thank you so much for taking the time, and explaining this, now it kinda makes some sense.

1 Like

I looked again on Fedora documentation (you should try yourself, there is a lot knowledge to gain over there :stuck_out_tongue_winking_eye: ) and I believe there is a better/proper method (maybe two…) to properly boot Fedora from Garuda grub.
https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault#Upgrade.2Fcompatibility_impact

It needed one more thing to what I had asked you to test.

On platforms using grub, users can also switch back by installing the grubby-deprecated package, setting ā€œGRUB_ENABLE_BLSCFG=falseā€ in /etc/default/grub , and using grub2-mkconfig to re-generate their configuration file.

Manipulating grub and kernels with grubby-deprecated was the missing piece.

Another possibly/probably viable method would be to permanently manually add required kernel parameters inside grub.cfg kernel command line (starting with linux ), instead of using garuda os-prober terrible way (which changes after each os-prober package update). IIUC Fedora by default (w/o the previous method applied) does not change/update grub.cfg when updating grub configuration, because it uses the BLSCFG boot loader entries for kernels with drop-in files.

3 Likes

Very sorry for a late reply, but I installed grubby-deprecated and uninstalled grubby in fedora, and rest as before ā€œGRUB_ENABLE_BLSCFG=falseā€ in /etc/default/grub, and using grub2-mkconfig regenerated fedora's configuration file. But still no luck, I am not able to find what I am doing wrong? :confused: :slightly_frowning_face:

I have told you from the start.

This is an exclusive Fedora related (and controlled) issue. Only Fedora people can provide answers, just like Garuda can provide answers related to package/system modifications they do.

5 Likes

Yeah you are absolutely right, thank you so much for supporting this post.
. I will inform here, if I get it right along with the steps I took to do it.

2 Likes

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.

This is precisely why Garuda does not officially provide support for Multi-booting. The OP has 4 different OS’s installed and wonders why there are problems booting. This thread was a prime example of why users who want to multi-boot are expected to work out there own issues.

Over 75 posts of wasted Garuda support time to finally in the end have @petsam identify this as a Fedora package issue.

In the future look to resolve your multi-boot problems you’ve created by installing so many OS’s on your own time. If you create another support request for your multi-boot problems and I notice it, I will lock it immediately.

Do your own research and solve your own issues if you wish to boot so many OS’s. This is not a Garuda support responsibility that so much valuable support time needs to be dedicated towards.

Kudos to @petsam for having the patience to stick with this issue til its resolution, (because no one else would have).

6 Likes