Dual Boot Oracle Solaris 11/11 and Linux (Ubuntu 11.10/grub2)

Posted by HartmutStreppel on Oracle Blogs See other posts from Oracle Blogs or by HartmutStreppel
Published on Mon, 28 Nov 2011 13:10:24 -0600 Indexed on 2011/11/29 2:00 UTC
Read the original article Hit count: 489

Filed under:

After having worked with Open Solaris on my laptop first, then with an upgrade to Oracle Solaris 11 Express, I finally did a fresh install of Oracle Solaris 11/11, when it became available. I am not a big fan of upgrades as I know that I am not the perfect administrator and my system gets spoiled with unclean configurations, outdated packages and wrong settings that cannot be reversed. So I prefer to start from scratch. Especially with Oracle Solaris 11 I wanted to have a system just like a customer would have it in production.

The installation was smooth - more or less, if I had only read the documentation a bit better in advance.

For a number of reasons I prefer a dual boot system. The most important one is, that especially with mobile devices you often run into network problems. And you have a hard time figuring out where the problem is: in your laptop hardware, in the OS you are running, or really within the network. If you have an alternate OS to boot, you can exclude the OS and your hardware. This makes you feel better.

The second OS should be a Linux variant - and for some not so obvious reason I decided to go with the latest Ubuntu release (11.10). It replaced a very old Open Suse installation that had not been booted for a while.

I knew that it was probably best to install Ubuntu first and then Oracle Solaris 11, as this would put the right boot information for Oracle Solaris  into the MBR and onto the root partition. But then, how to enable dual boot with the 2 OSes. Searching the web one mainly finds information about dual boot of:

  • Linux and Linux
  • Linux and Windows

I do not want to explain which wrong configurations I worked through, but I prefer to explain the final setup, which is extremely simple, and I am wondering why this is not covered as the easiest solution for most dual boot setups. I use chainloader from and to both OS'es, with the only disadvantage that I have to confirm two grub menus each time I want to boot the "other" OS. Still there were some hurdles to jump over:

  • Ubuntu did not like getting its boot blocks being placed on the partition instead of the disk; I must admit that I do not fully understand why. But using the --force option you could get that done
  • Ubuntu needs an active partition; that was easy to achieve
  • grub2 uses a different numbering scheme for the partitions. That is in the docs, if you read them.

BTW: The usual disclaimer is valid. There is  no guarantee that what I describe works or works well. Please back up your data carefully before trying any of this.

So, Oracle Solaris 11 is installed on the first partition and Ubuntu on the third.

With Ubtuntu things initially were a bit more complicated, as I did not know how to boot it. And the live CD did not offer the capability to boot the on-disk image (at least I did not find it). So I booted the live CD, mounted the Ubuntu installation at /mnt and wrote the boot blocks into the partition. This is something that does not seem to be recommended, at least grub-install refrained from doing what I intended. After a bit more research I was bold enough to use the --force option and wrote the boot blocks to /dev/sda3 using

grub-install --boot-directory=/mnt/boot --force --no-floppy /dev/sda3

So, I now had a system with the Solaris boot loader in the MBR, Solaris specific boot blocks on the Solaris root partition and Ubuntu specific boot blocks in the Ubuntu partition. I just had to chain them together and I was done.

Oracle Solaris 11: I have added the following lines to /rpool/boot/grub/menu.lst (be aware of the /rpool!!!!)

title Ubuntu 11.10
root (hd0,2)
makeactive
chainloader +1
boot

The Ubuntu root file system sits on the third partition (/dev/sda3).

Ubuntu: I have added the following lines to /etc/grub.d/40_custom:

menuentry "Solaris 11/11" {
      set root=(hd0,1)
      chainloader +1
}

Two things need to be mentioned: a) grub2 starts numbering partitions with 1; so my /dev/sda1 is partition 1. b) Oracle Solaris boots without the partition being made active (btw: the command to make a partition active with grub2 is "parttool (hd0,1) boot+", which currently does not work for me).

As debugging grub is a bit complicated, I used the grub CLI to perform some tests and also used a tool, that I found on sourceforge.net that was able to prepare a list of all boot loaders on all partitions. This told me that the basic setup was correct. Unfortunately I lost it in the live CD environment.

I hope this is helpful for some of the readers.
Hartmut


© Oracle Blogs or respective owner

Related posts about /Oracle Solaris