Break grub actions on the target system out into separate functions in
lib-software.sh and make sure we mount special filesystems (FS#29928).
Also fix a pathname bug causing grub errors to go undetected.
Signed-off-by: Thomas Hebb <tommyhebb(a)gmail.com>
---
src/core/libs/lib-blockdevices-filesystems.sh | 12 -----------
src/core/libs/lib-software.sh | 27 +++++++++++++++++++++++++
src/core/libs/lib-ui-interactive.sh | 14 +++++--------
3 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/src/core/libs/lib-blockdevices-filesystems.sh b/src/core/libs/lib-blockdevices-filesystems.sh
index 70805c8..1d101c5 100644
--- a/src/core/libs/lib-blockdevices-filesystems.sh
+++ b/src/core/libs/lib-blockdevices-filesystems.sh
@@ -346,18 +346,6 @@ dev_is_in_softraid_or_lvmpv () {
grep -qsw "${dev##*/}" /proc/mdstat || { pvscan -s 2>/dev/null | grep -q "$dev"; }
}
-
-# generate the grub device map, which is a translation table between grub devicenames and linux devicenames
-# hard disks get entries, but not their partitions
-get_grub_map() {
- inform "Generating GRUB device map...\nThis could take a while.\n\n Please be patient."
- chroot $var_TARGET_DIR grub --no-floppy --device-map /boot/grub/device.map &>$TMP_GRUB_LOG <<EOF
-quit
-EOF
- cp $var_TARGET_DIR/boot/grub/device.map $TMP_DEV_MAP
-}
-
-
# for given blockdevice, echo grub notation in this form: (hd0) or (hd0,0) (if it's a partition)
# $1 : blockdevice
# returns 0 on success. 1 otherwise.
diff --git a/src/core/libs/lib-software.sh b/src/core/libs/lib-software.sh
index 942d312..909219e 100644
--- a/src/core/libs/lib-software.sh
+++ b/src/core/libs/lib-software.sh
@@ -120,3 +120,30 @@ target_configure_initcpio () {
fi
return $ret
}
+
+# generate the grub device map, which is a translation table between grub devicenames and linux devicenames
+# hard disks get entries, but not their partitions
+target_grub_devicemap () {
+ inform "Generating GRUB device map...\nThis could take a while.\n\n Please be patient."
+ target_special_fs on
+ chroot $var_TARGET_DIR grub --no-floppy --device-map /boot/grub/device.map &>$TMP_GRUB_LOG <<EOF
+quit
+EOF
+ target_special_fs off
+ cp $var_TARGET_DIR/boot/grub/device.map $TMP_DEV_MAP
+}
+
+# install grub
+# $1: boot partition (grub notation)
+# $2: device to install to (grub notation)
+# $3: device to install to (linux notation)
+target_grub_install () {
+ target_special_fs on
+ chroot $var_TARGET_DIR grub --no-floppy --batch &>$TMP_GRUB_LOG <<EOF
+device $2 $3
+root $1
+setup $2
+quit
+EOF
+ target_special_fs off
+}
diff --git a/src/core/libs/lib-ui-interactive.sh b/src/core/libs/lib-ui-interactive.sh
index 36483c1..a9362a2 100644
--- a/src/core/libs/lib-ui-interactive.sh
+++ b/src/core/libs/lib-ui-interactive.sh
@@ -897,7 +897,7 @@ interactive_install_bootloader () {
}
interactive_grub() {
- get_grub_map
+ target_grub_devicemap
[ ! -f $grubmenu ] && show_warning "No grub?" "Error: Couldn't find $grubmenu. Is GRUB installed?" && return 1
debug FS "starting interactive_grub"
@@ -1139,14 +1139,10 @@ interactive_grub_install () {
debug FS "bootdev: $bootdev"
debug FS "boothd: $boothd"
- chroot $var_TARGET_DIR grub --no-floppy --batch &>$TMP_GRUB_LOG <<EOF
-device $bootdev $boothd
-root $bootpart
-setup $bootdev
-quit
-EOF
- cat $var_TARGET_DIR/$TMP_GRUB_LOG >$LOG
- if grep -q "Error [0-9]*: " $var_TARGET_DIR/$TMP_GRUB_LOG; then
+ target_grub_install "$bootpart" "$bootdev" "$boothd"
+
+ cat $TMP_GRUB_LOG >$LOG
+ if grep -q "Error [0-9]*: " $TMP_GRUB_LOG; then
notify "Error installing GRUB. (see $LOG for output)"
return 1
fi
--
1.7.10.2