[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
boot directory prefix in grub-install (even with --root-directory)
From: |
Grégoire Sutre |
Subject: |
boot directory prefix in grub-install (even with --root-directory) |
Date: |
Tue, 22 Dec 2009 12:53:46 +0100 |
User-agent: |
Mozilla-Thunderbird 2.0.0.22 (X11/20090707) |
Hi,
grub-install copies GRUB images into ${rootdir}/boot/grub (where
${rootdir} is empty by default and can be changed with --root-directory).
To install GRUB files on a partition that contains a /boot file, one
must specify a non-empty --root-directory, and grub files are then
copied into /DIR/boot/grub. Or one could mount the partition on a mount
point of the form DIR/boot and specify --root-directory=DIR to force
installation into the /grub directory of the partition. Both solutions
are not completely satisfactory. Is there a better one?
The problem arises e.g. with NetBSD which uses /boot for its own
bootloader. The script util/grub-install.in contains lines to take care
of that situation (lines 160-172), but these lines rely on a variable
${host_os} that is not set. This might be deprecated code from GRUB
Legacy's grub-install, where ${host_os} is set by a configure substitution.
An alternative solution would be to have grub-install install in
${rootdir}/grub, with ${rootdir} equal to /boot by default. The default
behavior (with no --root-directory) would be the same.
The following patch implements this alternative.
Thanks for your time,
Grégoire
--- util/grub-install.in.orig 2009-12-22 11:26:01.538833717 +0100
+++ util/grub-install.in 2009-12-22 12:48:55.979476412 +0100
@@ -39,8 +39,7 @@
fi
grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
-rootdir=
-grub_prefix=`echo /boot/grub | sed ${transform}`
+rootdir=/boot
modules=
install_device=
@@ -66,7 +65,7 @@
-v, --version print the version information and exit
--modules=MODULES pre-load specified modules MODULES
--root-directory=DIR install GRUB images under the directory DIR
- instead of the root directory
+ instead of ${rootdir}
--grub-setup=FILE use FILE as grub-setup
--grub-mkimage=FILE use FILE as grub-mkimage
--grub-mkdevicemap=FILE use FILE as grub-mkdevicemap
@@ -84,7 +83,7 @@
INSTALL_DEVICE can be a GRUB device name or a system device filename.
-grub-install copies GRUB images into the DIR/boot directory specified by
+grub-install copies GRUB images into the DIR/`echo grub | sed
${transform}` directory specified by
--root-directory, and uses grub-setup to install grub into the boot
sector.
@@ -157,21 +156,7 @@
setup_verbose="--verbose"
fi
-# Initialize these directories here, since ROOTDIR was initialized.
-case "$host_os" in
-netbsd* | openbsd*)
- # Because /boot is used for the boot block in NetBSD and OpenBSD,
use /grub
- # instead of /boot/grub.
- grub_prefix=`echo /grub | sed ${transform}`
- bootdir=${rootdir}
- ;;
-*)
- # Use /boot/grub by default.
- bootdir=${rootdir}/boot
- ;;
-esac
-
-grubdir=${bootdir}/`echo grub | sed ${transform}`
+grubdir=${rootdir}/`echo grub | sed ${transform}`
device_map=${grubdir}/device.map
grub_probe="${grub_probe} --device-map=${device_map}"
@@ -204,8 +189,7 @@
fi
# Create the GRUB directory if it is not present.
-test -d "$bootdir" || mkdir "$bootdir" || exit 1
-test -d "$grubdir" || mkdir "$grubdir" || exit 1
+mkdir -p "$grubdir" || exit 1
# If --recheck is specified, remove the device map, if present.
if test $recheck = yes; then
- boot directory prefix in grub-install (even with --root-directory),
Grégoire Sutre <=