All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fabian Greffrath <greffrath@leat.rub.de>
To: grub-devel@gnu.org
Cc: 461442@bugs.debian.org
Subject: please add support for os-prober to detect other OSes in update-grub
Date: Thu, 24 Jan 2008 13:25:17 +0100	[thread overview]
Message-ID: <479883AD.6060005@leat.rub.de> (raw)

[-- Attachment #1: Type: text/plain, Size: 2376 bytes --]

Dear GRUB-developers,

I recently had a discussion with the GRUB-maintainers in Debian if it 
will be possible to add other (maybe proprietary, preinstalled) OSes to 
the GRUB boot menu when update-grub is run [1]. This happens 
automatically when Debian is installed (via the Debian-Installer) using 
a tool called 'os-prober'. This tool mounts all possible partitions and 
reports if it finds an OS on these partitions. This means it should be 
possible to run 'os-prober' and interpret it's output to generate 
further GRUB menu entries every time update-grub is started. For this 
purpose, please find my approach for an /etc/grub.d/30_os-prober script 
attached. It is only 1.5 kB, tab-indented and full of comments and 
paranoid tests. If it is considered usefull, though, I'd like to hand it 
over (including copyright!) to the GRUB-developers.

At the moment there is still one problem left: os-prober returns the 
partition on which it finds the OS as a system device name, e.g. 
/dev/hda2. At the moment, GRUB does not provide an (easy) way to 
translate these into GRUB drives, e.g. (hd0,1). This is why I allready 
requested such a feature on this list [2].
Another problem (or: missing feature) is, that at the moment my script 
can only add chainloaded OSes to grub.cfg. To add kernels like Linux or 
HURD it is necessary to mount these partitions again to find out exactly 
where the kernel and initrd images reside. This is something I want to 
avoid, because the partitions have allready been mounted by os-prober 
and I don't want to duplicate it's code for this purpose. Maybe 
os-prober could be modified to be more verbose in such cases and report 
the entire path to the images.

You may consider this a very Debian specific problem/feature, but I 
believe once os-prober finds more attention by other Linux distributions 
it will provide a very valuable means to automatically detect other OSes 
and add them to the boot menu.

Cheers,
Fabian

[1] http://bugs.debian.org/461442
[2] http://lists.gnu.org/archive/html/grub-devel/2008-01/msg00446.html
http://bugs.debian.org/462218

-- 
Dipl.-Phys. Fabian Greffrath

Ruhr-Universität Bochum
Lehrstuhl für Energieanlagen und Energieprozesstechnik (LEAT)
Universitätsstr. 150, IB 3/134
D-44780 Bochum

Telefon: +49 (0)234 / 32-26334
Fax:     +49 (0)234 / 32-14227
E-Mail:  greffrath@leat.ruhr-uni-bochum.de


[-- Attachment #2: 30_os-prober --]
[-- Type: text/plain, Size: 1582 bytes --]

#! /bin/sh -e

# update-grub helper script.
# <insert copyright and license blurb here>

if [ -x "`which os-prober 2>/dev/null`" ] ; then
	# os-prober output contains the partition and the name, a label and
	# a boot keyword, separated by colons (:) for each detected OS.
	# It may contain space characters and linebreaks,
	# e.g. "/dev/hda2:Windows XP Professional:Windows:chain".
	# Convert space characters to underscores and linebreaks to spaces.
	RESULT="`os-prober | tr ' ' '_' | tr '\n' ' '`"
fi

if [ "x${RESULT}" != "x" ] ; then
	for OS in "${RESULT}" ; do
		# e.g. "/dev/hda2:Windows_XP_Professional:Windows:chain"
		PARTITION="`echo ${OS} | cut -d ':' -f 1`"
		LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '_' ' '`"
		LABEL="`echo ${OS} | cut -d ':' -f 3`"
		BOOT="`echo ${OS} | cut -d ':' -f 4`"

		if [ "x${LONGNAME}" = "x" ] ; then
			# is this likely to happen?
			LONGNAME="${LABEL}"
		fi

		case "${BOOT}" in
			chain)
				echo "Found ${LONGNAME} on ${PARTITION}" >&2
				if [ -x "`which grub-probe 2>/dev/null`" ] ; then
					# need to convert partition device to GRUB drive here!
					GRUB_DEVICE="`grub-probe --something ${PARTITION}`"
					cat << EOF
menuentry "${LONGNAME} (on ${PARTITION})" {
	set root=${GRUB_DEVICE}
	chainloader +1
}
EOF
				else # wtf?!
					echo "  Error: Missing grub-probe!" >&2
				fi
			;;
			macos|macosx)
				# can't macos* also be chainloaded?
			;;
			hurd|linux)
				# other Linux/HURD-Systems are not (yet) supported
				# with the given output of os-prober
			;;
			*)
				# is it possible to reach here?
			;;
		esac
	done
fi

             reply	other threads:[~2008-01-24 12:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-24 12:25 Fabian Greffrath [this message]
2008-01-24 15:47 ` Bug#461442: please add support for os-prober to detect other OSes in update-grub Otavio Salvador
2008-01-25  9:39   ` Fabian Greffrath
2008-01-25 13:21     ` Robert Millan
2008-01-30 10:48       ` Fabian Greffrath

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=479883AD.6060005@leat.rub.de \
    --to=greffrath@leat.rub.de \
    --cc=461442@bugs.debian.org \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.