#!/bin/bash
#Used only by sysclone

# SI post-install script to configure the efi boot mgr or grub after SI has installed the OS
# SI post-install scripts run in a chroot environment of the final OS image

if [ -d /sys/firmware/efi ]; then
    echo "Setting Boot Manager for the next boot."
    echo "delete all sysclone boot list"
    str_bootnums=`efibootmgr | grep 'syscloneLinux' | awk '{print $1}' | sed 's/boot//i' | sed 's/*//'`
    for str_num in $str_bootnums
    do
        efibootmgr -b $str_num -B -q
    done

    if [ -f "/boot/efi/EFI/redhat/grub.efi" ];then
        efibootmgr -c -l \\EFI\\redhat\\grub.efi -L syscloneLinux
    elif [ -f "/boot/efi/efi/SuSE/elilo.efi" ];then
        efibootmgr -c -l \\efi\\SuSE\\elilo.efi -L syscloneLinux
    else
        echo "Can not find the boot loader."
        exit 1
    fi
else
    echo "run grub-install to configure the MBR."
    if [ -e /etc/mtab ];then
        mv /etc/mtab /etc/mtab.bak
    fi
    grep -v rootfs /proc/mounts > /etc/mtab
    boot_device=''
    if [ -f "/etc/systemconfig/systemconfig.conf" ];then
        boot_root=`cat /etc/systemconfig/systemconfig.conf | grep ROOTDEV | awk '{print $3}'`
        boot_device=`cat /etc/systemconfig/systemconfig.conf | grep BOOTDEV | awk '{print $3}'`
    else
        boot_root=`mount | grep -E ' on\s+/ type ' | awk '{print $1}'`
        boot_device=`echo $boot_root | sed -e 's/[0-9]*$//'`

        #str_temp=`mount | awk '{print $1","$3}'`
        #for line in $str_temp
        #do
        #    mp=`echo $line | awk -F, '{print $2}'`
        #    if [ "$mp" = "/" ];then
        #        boot_device=`echo $line | awk -F, '{print $1}' | sed -e 's/[0-9]*$//'`
        #        break
        #    fi
        #done
    fi

    if [ -n "$boot_device" ];then
        echo "The boot device is $boot_device"
        echo "The boot root device is $boot_root"
    else
        echo "Can not find the boot device, return error"
        exit 1
    fi
    
    # set grub to use this boot device
    if grep -qe '^VERSION\s*=\s*11' /etc/SuSE-release; then
        #sles11, run grub-install.unsupported directly
        echo "grub-install.unsupported --no-floppy --recheck $boot_device"
        grub-install.unsupported --no-floppy --recheck $boot_device
        # note: the error about grub-set-default not existing is harmless, because we want the default to be 0 anyway
    else
        #for sles10, should run grub-install with parameters
        echo "grub-install --no-floppy --recheck $boot_device"
        grub-install --no-floppy --recheck $boot_device
    fi

    # change the entries in the grub conf file to use the correct boot root device
    # (not the one leftover from the golden image)
    if [ -f "/boot/grub/grub.conf" ];then
        conffile="/boot/grub/grub.conf"
    else
        conffile="/boot/grub/menu.lst"
    fi
    sed -i 's| root=\S*| root='$boot_root'|' $conffile
    sed -i 's| resume=\S*| noresume|' $conffile

    if [ -e /etc/mtab.bak ];then
        mv -f /etc/mtab.bak /etc/mtab
    else
        rm -f /etc/mtab
    fi
fi