Adding Solus and other punk linux boot sequence in GRUB (UEFI only)

So we all have been there, a linux distro we get interested in but they are just too proud to use the best software available in their disposal and makes thing complicated.

Though manjaro is my primary linux, I am fairly interested in Solus about speed, beauty and development. I recently partitioned my drive to GPT and thought i can spare some space for other distro testing, as now i don't have 4 partitions limitation.

So, my first test drive is Solus and boy should I have chosen something else? For legacy BIOS they use GRUB but for UEFI, mysteriously they use "goofiboot".

The problem is solus bootloader does not have the ability to include manjaro and in manjaro GRUB detects solus but can't include "goofiboot" path in the boot sequence. Internet won't be much help because people don't bother with it much only one article helped. Let's get started:
...................................................................................................................................
Disclaimer: This tutorial is only for who has past experience with GRUB boot sequence editing and it may cause your system disaster if you typo and mess in any step. Besides, it can kill your cat!!
...................................................................................................................................
Step 1:
The first step is to find out where Solus boot path lies. It is in, so change the directory to /boot/efi/EFI.
Now list command can help,

ls 
Boot  com.solus-project  goofiboot  Manjaro  Microsoft

The problem is com.solus-project does not contain the boot sequence but you may have guessed it goofiboot directory does!
Enter the directory and voila!

/boot/efi/EFI/goofiboot/goofibootx64.efi

Step 2:
This is easy, just find out the UUID of the EFI partition. You can find it by:

lsblk -f

Step 3:
Now, editing grub file do not work so we need to create custom.cfg file and make it executable:

sudo touch /boot/grub/custom.cfg

Then at the end of the file add the following commands but you need to provide your output at the STAR marked sectors:

#!/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 'Solus***' --class Solus --class gnulinux $menuentry_id_option 'osprober-efi-422A-74D4' {
    	savedefault
    	insmod part_gpt
    	insmod fat
    	set root='hd0,gpt2***'
    	if [ x$feature_platform_search_hint = xy ]; then
    	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2*** --hint-baremetal=ahci0,gpt2***  422A-74D4***
    	else
    	  search --no-floppy --fs-uuid --set=root 422A-74D4***
    	fi
    	chainloader /EFI/goofiboot/goofibootx64.efi
    }
  • At first star mark use any heading you want for that linux.

  • In second star mark write the gpt drive number you have your EFI files in. In my case it is gpt2.

  • In third star mark replace the 422A-74D4*** with the EFI partition UUID number you got from step 2.

  • Follow same procedure for every other gpt and UUID star mark in the code.

Step 4:
You can just execute thus command but for record this will make the configurable executing permission.

sudo chmod a+x /boot/grub/custom.cfg

Finally, sudo update-grub

Now, reboot the system you should see your punk linux boot sequence in manjaro GRUB.

References:

  1. http://askubuntu.com/questions/436519/boot-efi-files-from-grub2

  2. https://wiki.archlinux.org/index.php/GRUB

  3. https://wiki.archlinux.org/index.php/fstab

Contributors:
@gohlip & @kainonergon

1 Like

Better use /default/grub.d/40_custom for manual boot entry.

Solus has grub installed but it won't let me generate or update grub configuration.

is it in the grub.cfg file? i am using both linux without any problem. is there any benefit in it?

Thanks for your tutorial.
Need some clarifications.
I take it the first post is about including solus entry in Manjaro grub.
I also take it Manjaro is also booted in uefi. else we'd be mixing boots which will really mess things up.

Q1. Won't Manjaro 'sudo update-grub' automatically make a Solus entry in its grub.cfg?
Of course, if Manjaro is booted in bios-legacy, it cannot include Solus and a manual entry is required,
but I assume Manjaro is also booted in uefi, isn't it?
ps: kainonergon suggestion to include into custom rather than editing (manjaro) grub.cfg is because any update-grub will wipe out this entry, (if update-grub cannot include Solus, that is).

Q2. This 'goofiboot' appears to be like the deprecated 'gummiboot' which is replaced by bootctl (systemd boot).
If so, the mechanism is is such that we can also include Manjaro entry by adding (have to be manually done for gummiboot, refind, & bootctl) as manjaro.conf in the 'entries' directory of Solus /boot/loader/entries/xxxx.conf and additionally copy over Manjaro kernel (vmlinuz and initramfs) to Solus $esp. Have you tried this (booting Manjaro from Solus goofiboot) to see if this works?

Q3. You can set bios 'bootorder' to set either Manjaro or Solus as default boot (you can also use efibootmgr to do this).
What is the default bootorder in your case? Right now, I'm assuming (from your post) you're using Manjaro. If so, do you see any benefit in using Solus goofiboot.

Thanks again for sharing and hope to learn more from you.
Cheers.

1 Like

Thanks for asking and i will try to explain from my experience.

Q1. yes, updating grub shows the result but then in boot Solus in not listed as boot option. I will try to use custom and publish the result.

Q2. I didn't know this. Solus don't have much instrcution regarding this but i Installed solus after manajaro so it should include it. I will try ti custom.

Q3. In UEFI i have manjaro, solus and windows boot option. Before the mentioned solution i needed to enter boot and switch loader for toggling manjaro and Solus.

I will try your recommended methods and hopefully post result soon.

@philm
Updating grub shows result but not in the boot. Is my workaround the solution or there is something better?

sudo update-grub                                                                                 
Generating grub configuration file ...
Found background: /usr/share/grub/background.png
Found Intel Microcode image
Found linux image: /boot/vmlinuz-4.9-x86_64
Found initrd image: /boot/initramfs-4.9-x86_64.img
Found initrd fallback image: /boot/initramfs-4.9-x86_64-fallback.img
Found Windows Boot Manager on /dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Solus (2017.01.01.0) on /dev/sda9
Found memtest86+ image: /boot/memtest86+/memtest.bin
done

This entry won't boot?
Please show the Solus entry itself in grub.cfg.
[edit] - together with contents of Solus /boot (need kernel and initrd details)

Late here, I may get back later, or kainonergon (if he's not sleeping) can help.
He's very good and has helped me out much.

As @gohlip wrote, I mean step3 for Manjaro grub configuration. If you edit grub.cfg your changes will be lost on the next update-grub.
I have no experience with Solus and goofiboot, sorry.
I used grub chainload to boot manjaro and opensuse with native loaders for each distro. See

Can You show me your grub.cfg custom menu entry? it would help me. I am facing some problems.

Sorry I don't use it any more. I followed advise from the second article in my post above. Something like that:

 insmod part_gpt
 insmod fat
 set root="hd0,gpt2"
 chainloader /debian/grubx64.efi

Modify it accrding to your need

did it. the problem is with grub update it is going away
At first this is it:

### 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 ###

After my editing it is:

 ### BEGIN /etc/grub.d/40_custom ###
menuentry "Solus" {
        insmod part_gpt
        insmod fat
        set root="hd0,gpt9"
        chainloader /EFI/goofiboot/goofibootx64.efi
}
### END /etc/grub.d/40_custom ###

Am i doing anything wrong?

There are several vays. I normally don't do this chainload way, if I have to (usually don't have to), I use multiboot or configfile. Chainload is my least favourable way of booting.
Anyway here's a typical entry

menuentry "Chainload" --class recovery{
        insmod chain
        insmod fat
        search --no-floppy --label --set=root LED
        chainloader /EFI/ubuntu/grubx64.efi
}

or chainloader /EFI/opensuse/grubx64.efi
or chainloader /EFI/mageia/grubx64.efi
or.......

You may have gotten the path wrong.
/efi/EFI/ looks wrong. Check out the path.
.
.
.
.
.

Oh, you did not answer my question above.

Would appreciate an answer.

sorry, gohlip for late reply. there is simply no data of solus in the grub.cfg. I had to check multiple times for the verification.
I my entry lets me boot solus but after grub update my manual data entry goes away. I may have made mistake in path. Will fix it.

No, the path is right. Solus doesn't use grub. it uses goofiboot.

Okay, if you find it, let us know.
Normally, any OS detected by grub will boot, even if that OS does not have grub.
Can't say that for any other bootloader.

If you need help with the path, you'll have to show the contents of /boot down to the solus.efi file. Look at the $esp partition only, no need to look elsewhere. Oh.. the search line is for that fat32 partition. You can use UUID instead, of course, if you do not have labels. I always label all my partitions.

Try use UUID, do not use /dev/sdxy

1 Like

This is my modified entry:

    ### BEGIN /etc/grub.d/40_custom ###
    menuentry "Solus" --class recovery{
            insmod part_gpt
            insmod fat
            search --no-floppy --label --set=root 422A-74D4
            chainloader /EFI/goofiboot/goofibootx64.efi
    }
    ### END /etc/grub.d/40_custom ###

I am giving you the info available in EFI:

/boot/efi/EFI]ls                                                                                   
Boot  com.solus-project  goofiboot  Manjaro  Microsoft

/boot/efi/EFI/com.solus-project]ls                                                                 
initrd-com.solus-project.lts.4.9.20-12  kernel-com.solus-project.lts.4.9.20-12

/boot/efi/EFI/goofiboot]ls                                                                         
goofibootx64.efi

Quikly this is wrong. When using uuid, it shhould be

search --no-floppy --fs-uuid --set=xxxxxxxxxxxxxxxxxxx

Depending on whether your $esp is /boot or /boot/efi (we don't know- only you will know) the path is one of

/efi/EFI/goofiboot/goofibootx64.efi

/EFI/goofiboot/goofibootx64.efi

ps: manjaro grub entry for solus should point to kernel kernel-com.solus-project.lts.4.9.20-12 and use initrd initrd-com.solus-project.lts.4.9.20-12 and path is /EFI/com.solus-project/ or /efi/EFI/com.solus-project/

Forum kindly sponsored by