#!/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

arch=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/`
if [ "$arch" =  "x86_64" ]; then
	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_root=`mount | grep -E ' on\s+/ type ' | awk '{print $1}'`
			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
elif [ "$arch" = "ppc64" ]; then
    echo "run yaboot to configure the MBR."
    if [ -f "/usr/lib/yaboot/yaboot" ]; then
       # set bootloader
       echo "dd if=/usr/lib/yaboot/yaboot of=/dev/sda1 bs=4096"
       dd if=/usr/lib/yaboot/yaboot of=/dev/sda1 bs=4096
      
       # Set 0x41 as the partition type of the first partition
       # echo A | dd of=/dev/sda bs=1 count=1 seek=450
    elif [ -f "/lib/lilo/pmac/yaboot" ]; then
        # set bootloader
        echo "dd if=/lib/lilo/pmac/yaboot of=/dev/sda1 bs=4096"
        dd if=/lib/lilo/pmac/yaboot of=/dev/sda1 bs=4096

       # Set 0x41 as the partition type of the first partition
       # echo A | dd of=/dev/sda bs=1 count=1 seek=450
    else
       echo "there isn't yaboot bootloader"
    fi     
else
    echo "[ERROR]: unsupport arch....."
fi