]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
update-bootloader: Search for /boot first and then /
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 1 Jan 2015 15:36:51 +0000 (16:36 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 1 Jan 2015 15:36:51 +0000 (16:36 +0100)
The bootloader is usually installed on the /boot partition
if that exists. Some installations may mount / from a different
device, so we make sure to update the bootloader on the
right device.

src/scripts/update-bootloader

index b011b72ed1f0085bdcd707e9846fbbf2a51a0bf3..ad6fdb6420a600ab6c7e5f16172aec45076f25d6 100644 (file)
 
 GRUB_INSTALL_ARGS="--no-floppy --recheck"
 
-function find_root_device() {
-       # rootfs / rootfs rw 0 0
+function find_bootloader_device() {
+       local mp
+       for mp in /boot /; do
+               if find_device "${mp}"; then
+                       return 0
+               fi
+       done
+
+       return 1
+}
+
+function find_device() {
+       local mountpoint="${1}"
 
        local root
        local dev mp fs flags rest
@@ -32,29 +43,27 @@ function find_root_device() {
                # Skip unwanted entries
                [ "${dev}" = "rootfs" ] && continue
 
-               if [ "${mp}" = "/" ] && [ -b "${dev}" ]; then
+               if [ "${mp}" = "${mountpoint}" ] && [ -b "${dev}" ]; then
                        root="$(basename "${dev}")"
                        break
                fi
        done < /proc/mounts
 
        # Get the actual device from the partition that holds /
-       if [ -n "${root}" ]; then
-               while [ -n "${root}" ]; do
-                       if [ -e "/sys/block/${root}" ]; then
-                               echo "${root}"
-                               return 0
-                       fi
-
-                       # Remove last character
-                       root="${root::-1}"
-               done
-       fi
+       while [ -n "${root}" ]; do
+               if [ -e "/sys/block/${root}" ]; then
+                       echo "${root}"
+                       return 0
+               fi
+
+               # Remove last character
+               root="${root::-1}"
+       done
 
        return 1
 }
 
-function root_device_is_mdraid() {
+function device_is_mdraid() {
        local device="${1}"
 
        [ -d "/sys/block/${device}/md" ]
@@ -103,19 +112,19 @@ function grub_install() {
 
 function main() {
        # Find the root device
-       local device="$(find_root_device)"
+       local device="$(find_bootloader_device)"
        if [ -z "${device}" ]; then
                echo "Could not find root device. Aborting." >&2
                exit 1
        fi
 
-       echo "Found root device: /dev/${device}"
+       echo "Found bootloader device: /dev/${device}"
 
        # Update configuration files
        grub_update_config || exit $?
 
        # Handle mdraid devices
-       if root_device_is_mdraid "${device}"; then
+       if device_is_mdraid "${device}"; then
                local slave
                for slave in $(mdraid_get_slaves "${device}"); do
                        grub_install "/dev/${slave}"