#!/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 #support for redhat 7.0 elif [ -f "/boot/efi/EFI/redhat/grubx64.efi" ];then efibootmgr -c -l \\EFI\\redhat\\grubx64.efi -L syscloneLinux boot_root=`mount | grep -E ' on\s+/ type ' | awk '{print $1}'` sed -i 's| root=\S*| root='$boot_root' net.ifnames=0|' /boot/efi/EFI/redhat/grub.cfg blkid -c /dev/null |grep UUID|while read str_line do partition=`echo "$str_line"|grep UUID|awk '{print $1}'|sed -e 's|/dev/\(.*\):|\1|g'` #echo "partition=$partition" if echo "$partition"|grep /; then continue fi newuuid=`blkid -c /dev/null|grep "$partition"|sed -e 's|.*UUID="\(.*\)" T.*|\1|g'` #echo "newuuid=$newuuid" sed -i '/'$partition'/s|UUID=\S*|UUID='$newuuid'|' /etc/fstab done 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 "Choose suitale boot loader to configure the MBR." if [ -f "/usr/lib/yaboot/yaboot" ]; then # set bootloader echo "Using /usr/lib/yaboot/yaboot" 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 "using /lib/lilo/pmac/yaboot" 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 elif [ -f "/boot/grub2/grub" ];then echo "using /boot/grub2/grub" echo "dd if=/boot/grub2/grub of=/dev/sda1 bs=4096" dd if=/boot/grub2/grub of=/dev/sda1 bs=4096 boot_root=`mount | grep -E ' on\s+/ type ' | awk '{print $1}'` sed -i 's| root=UUID=\S*| root='$boot_root' net.ifnames=0|' /boot/grub2/grub.cfg blkid -c /dev/null |grep UUID|while read str_line do partition=`echo "$str_line"|grep UUID|awk '{print $1}'|sed -e 's|/dev/\(.*\):|\1|g'` #echo "partition=$partition" if echo "$partition"|grep /; then continue fi newuuid=`blkid -c /dev/null|grep "$partition"|sed -e 's|.*UUID="\(.*\)" T.*|\1|g'` #echo "newuuid=$newuuid" sed -i '/'$partition'/s|UUID=\S*|UUID='$newuuid'|' /etc/fstab done else echo "Can not find boot loader" fi else echo "[ERROR]: unsupport arch....." fi