On Sat, May 12, 2007 at 05:41:09PM +0100, Paul Martin wrote:
> In shell:
>
> if [ $( stat -c %d /boot ) -eq $( stat -c %d / ) ]
Thanks for the tip. Please, can someone with separate /boot and/or separate
/boot/grub try this patch and tell if it works?
--
Robert Millan
My spam trap is [EMAIL PROTECTED] Note: this address is only intended
for spam harvesters. Writing to it will get you added to my black list.
diff -ur grub2-1.95+20070507.old/util/grub.d/00_header.in grub2-1.95+20070507/util/grub.d/00_header.in
--- grub2-1.95+20070507.old/util/grub.d/00_header.in 2007-05-04 09:11:44.000000000 +0200
+++ grub2-1.95+20070507/util/grub.d/00_header.in 2007-05-13 01:01:33.000000000 +0200
@@ -29,7 +29,8 @@
if test -e /boot/grub/unifont.pff ; then
cat << EOF
-font /boot/grub/unifont.pff
+
+font ${GRUB_DRIVE_BOOT_GRUB}/unifont.pff
set gfxmode=640x480x32
insmod gfxterm
insmod vbe
diff -ur grub2-1.95+20070507.old/util/grub.d/10_hurd.in grub2-1.95+20070507/util/grub.d/10_hurd.in
--- grub2-1.95+20070507.old/util/grub.d/10_hurd.in 2007-05-04 09:11:44.000000000 +0200
+++ grub2-1.95+20070507/util/grub.d/10_hurd.in 2007-05-13 00:46:42.000000000 +0200
@@ -23,11 +23,19 @@
OS="${GRUB_DISTRIBUTOR} GNU/Hurd"
fi
+at_least_one=false
+all_of_them=true
+
# FIXME: add l4 here?
kernel=
for i in /boot/gnumach.gz /boot/gnumach ; do
if test -e $i ; then
- kernel=$i
+ basename=`basename $i`
+ dirname=`dirname $i`
+ grub_dirname=`echo ${dirname} | sed -e "s%^/boot%${GRUB_DRIVE_BOOT}%g"`
+ echo "Found GNU Mach: $i" >&2
+ kernel=${grub_dirname}/${basename}
+ at_least_one=true
fi
done
@@ -37,10 +45,8 @@
*) hurd_fs="${GRUB_FS}fs" ;;
esac
-at_least_one=false
-all_of_them=true
-for i in "${kernel}" /hurd/${hurd_fs}.static /hurd/exec ; do
- if test -e "$i" ; then
+for i in /hurd/${hurd_fs}.static /hurd/exec ; do
+ if test -e "$i" ; then
echo "Found Hurd module: $i" >&2
at_least_one=true
else
diff -ur grub2-1.95+20070507.old/util/grub.d/10_linux.in grub2-1.95+20070507/util/grub.d/10_linux.in
--- grub2-1.95+20070507.old/util/grub.d/10_linux.in 2007-05-12 23:59:18.000000000 +0200
+++ grub2-1.95+20070507/util/grub.d/10_linux.in 2007-05-13 00:53:31.000000000 +0200
@@ -28,17 +28,19 @@
if test -e ${linux} ; then : ; else
continue
fi
- echo "Found linux image: $linux" >&2
- version=`echo $linux | sed -e "s,.*/[^0-9]*-,,g"`
- basedir=`echo $linux | sed -e "s,/[^/]*$,,g"`
+ echo "Found linux image: $linux" >&2
+ basename=`basename $linux`
+ dirname=`dirname $linux`
+ grub_dirname=`echo ${dirname} | sed -e "s%^/boot%${GRUB_DRIVE_BOOT}%g"`
+ version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
cat << EOF
menuentry "${OS}, linux ${version}" {
- linux ${linux} root=${GRUB_DEVICE} ro ${GRUB_CMDLINE_LINUX}
+ linux ${grub_dirname}/${basename} root=${GRUB_DEVICE} ro ${GRUB_CMDLINE_LINUX}
EOF
- if test -e ${basedir}/initrd.img-${version} ; then
- echo "Found initrd image: ${basedir}/initrd.img-${version}" >&2
+ if test -e ${dirname}/initrd.img-${version} ; then
+ echo "Found initrd image: ${dirname}/initrd.img-${version}" >&2
cat << EOF
- initrd ${basedir}/initrd.img-${version}
+ initrd ${grub_dirname}/initrd.img-${version}
EOF
fi
cat << EOF
@@ -46,11 +48,11 @@
EOF
cat << EOF
menuentry "${OS}, linux ${version} (single-user mode)" {
- linux ${linux} root=${GRUB_DEVICE} ro single ${GRUB_CMDLINE_LINUX}
+ linux ${grub_dirname}/${basename} root=${GRUB_DEVICE} ro single ${GRUB_CMDLINE_LINUX}
EOF
- if test -e ${basedir}/initrd.img-${version} ; then
+ if test -e ${dirname}/initrd.img-${version} ; then
cat << EOF
- initrd ${basedir}/initrd.img-${version}
+ initrd ${grub_dirname}/initrd.img-${version}
EOF
fi
cat << EOF
diff -ur grub2-1.95+20070507.old/util/update-grub.in grub2-1.95+20070507/util/update-grub.in
--- grub2-1.95+20070507.old/util/update-grub.in 2007-05-12 23:59:18.000000000 +0200
+++ grub2-1.95+20070507/util/update-grub.in 2007-05-13 01:01:58.000000000 +0200
@@ -80,9 +80,29 @@
#
EOF
-export GRUB_DEVICE="`grub-probe --target=device ${grub_prefix}`"
-export GRUB_DRIVE="`grub-probe --target=drive ${grub_prefix}`"
-export GRUB_FS="`grub-probe --target=fs ${grub_prefix}`"
+# Device containing our userland. Typicaly used for root= parameter.
+export GRUB_DEVICE="`grub-probe --target=device /`"
+
+# Filesystem for the device containing our userland. Used for stuff like
+# choosing Hurd filesystem module.
+export GRUB_FS="`grub-probe --target=fs /`"
+
+# GRUB path to /
+export GRUB_DRIVE="`grub-probe --target=drive /`"
+
+# GRUB path to /boot
+if [ "x`stat -c %d /`" = "x`stat -c %d /boot/`" ] ; then
+ export GRUB_DRIVE_BOOT="${GRUB_DRIVE}/boot"
+else
+ export GRUB_DRIVE_BOOT="`grub-probe --target=drive /boot`"
+fi
+
+# GRUB path to /boot/grub
+if [ "x`stat -c %d /boot`" = "x`stat -c %d /boot/grub`" ] ; then
+ export GRUB_DRIVE_BOOT_GRUB="${GRUB_DRIVE_BOOT}/grub"
+else
+ export GRUB_DRIVE_BOOT_GRUB="`grub-probe --target=drive /boot/grub`"
+fi
for i in ${update_grub_dir}/* ; do
case $i in