diff --git a/xCAT/postscripts/configefi b/xCAT/postscripts/configefi index 5bc8c1ac8..5ad3c302d 100644 --- a/xCAT/postscripts/configefi +++ b/xCAT/postscripts/configefi @@ -4,81 +4,106 @@ # 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 +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 + 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 +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 "Can not find the boot loader." - exit 1 - fi + echo "there isn't yaboot bootloader" + 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 + echo "[ERROR]: unsupport arch....." +fi +