[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RFC: multi-os configuration
From: |
lode leroy |
Subject: |
RFC: multi-os configuration |
Date: |
Thu, 26 Aug 2010 14:54:56 +0200 |
I just thought of the following solution to the problem mentioned
here lately about OS's generating "/boot/grub/grub.cfg" from templates.
Would it not be better for grub to do this instead of the OS?
If the user asks the OS to *install* grub, the installing OS should install
a default grub.cfg, as is done now.
If the user asks the OS to *register* with grub, the installing OS should
install a file "/boot/grub/grub.sub" with an entry for booting itself,
on whatever it considers it's "/boot" partition.
(a provision could be made to add a number in the .sub file to indicate
the order of the menu entries, to be entered by the user.)
When reading grub.cfg, grub would find a function call
"insert_dynamic_menuentries()"
it should then scan all known partitions, and see if a file
"/boot/grub/grub.sub" exist,
if it does, it sets the variable "root" to the partition name, and includes the
file.
This way, an OS should only manage it's own entry...
a more elaborate example below:
cat (hd0,0)/boot/grub/grub.cfg
==========================================
insmod gfxterm
background_image (hd0,0)/boot/grub/splash.jpg
insert_dynamic_menuentries()
menuentry "Boot first partition"
{
set root=(hd0,1)
chainloader +1
}
==========================================
cat (hd0,1)/boot/grub/grub.sub
==========================================
# For booting GNU/Hurd
menuentry "GNU (aka GNU/Hurd)" 2 {
multiboot /boot/gnumach.gz root=device:hd0s1
module /hurd/ext2fs.static ext2fs --readonly \
--multiboot-command-line='${kernel-command-line}' \
--host-priv-port='${host-port}' \
--device-master-port='${device-port}' \
--exec-server-task='${exec-task}' -T typed '${root}' \
'$(task-create)' '$(task-resume)'
module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)'
}
==========================================
cat (hd0,2)/boot/grub/grub.sub
==========================================
# For booting GNU/Linux
menuentry "GNU/Linux" 1 {
linux /boot/vmlinuz root=/dev/sda3
initrd /boot/initrd.img
}
==========================================
equivalent grub.cfg
==========================================
insmod gfxterm
background_image (hd0,0)/boot/grub/splash.jpg
menuentry "GNU/Linux" {
set root=(hd0,2)
linux /boot/vmlinuz root=/dev/sda3
initrd /boot/initrd.img
}
menuentry "GNU (aka GNU/Hurd)" {
set root=(hd0,1)
multiboot /boot/gnumach.gz root=device:hd0s1
module /hurd/ext2fs.static ext2fs --readonly \
--multiboot-command-line='${kernel-command-line}' \
--host-priv-port='${host-port}' \
--device-master-port='${device-port}' \
--exec-server-task='${exec-task}' -T typed '${root}' \
'$(task-create)' '$(task-resume)'
module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)'
}
menuentry "Boot first partition"
{
set root=(hd0,1)
chainloader +1
}
==========================================
- RFC: multi-os configuration,
lode leroy <=