#!/bin/bash
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
#(C)IBM Corp
# 

# create /etc/sysconfig/network-scripts/
pmatch ()
{
  case $1 in
    $2) return 0;;  # zero return code means string matched by pattern
  esac

  return 1          # non-zero return code means string not matched by pattern
}

for i in `/bin/cat /proc/cmdline`; do
    KEY=`/bin/echo $i  | /bin/awk -F= '{print $1}'`
    if [ "$KEY" = "ifname" ]; then
        ifname=`/bin/echo $i | /bin/awk -F= '{print $2}'`
        MACX=${ifname#*:}
        ETHX=${ifname%:$MACX*}
        break
    elif [ "$KEY" = "netdev" ]; then
        ETHX=`/bin/echo $i | /bin/awk -F= '{print $2}'`
        MACX=`/sbin/ip link show $ETHX | /bin/grep ether | /bin/awk '{print $2}'`
        break
    elif [ "$KEY" = "BOOTIF" ]; then
        MACX=`/bin/echo $i | /bin/awk -F= '{print $2}'`
        ETHX=`/sbin/ifconfig | /bin/grep -i $MACX | /bin/awk '{print $1}'`
        break
    fi
done

if [ ! -z "$MACX" ] && [ ! -z "$ETHX" ]; then
	if (pmatch $OSVER "sles*") || (pmatch $OSVER "suse*") || [ -f /etc/SuSE-release ]; then
		CONFFILE=$MNTDIR/etc/sysconfig/network/ifcfg-$ETHX
	fi
	if (pmatch $OSVER "fedora*") || (pmatch $OSVER "rhel6*") || (pmatch $OSVER "rhels6*") || [ -f /etc/fedora-release ] || [ -f /etc/redhat-release ];then
		CONFFILE=$MNTDIR/etc/sysconfig/network-scripts/ifcfg-$ETHX
	fi
    if [ ! -e $CONFFILE ]; then
        /bin/touch $CONFFILE
    fi
    if (pmatch $ETHX "hf*") ; then
        IP=`/sbin/ifconfig $ETHX | /bin/grep -i "inet addr" | awk '{print $2}' | awk -F: '{print $2}'`
        MASK=`/sbin/ifconfig $ETHX | /bin/grep -i "inet addr" | awk '{print $4}' | awk -F: '{print $2}'`
        echo "DEVICE=$ETHX" > $CONFFILE
        echo "BOOTPROTO=static" >> $CONFFILE
        echo "HWADDR=$MACX" >> $CONFFILE
        echo "ONBOOT=yes" >> $CONFFILE
        echo "IPADDR=$IP" >> $CONFFILE
        echo "NETMASK=$MASK" >> $CONFFILE
    else
        echo "DEVICE=$ETHX" > $CONFFILE
        echo "BOOTPROTO=dhcp" >> $CONFFILE
        echo "HWADDR=$MACX" >> $CONFFILE
        echo "ONBOOT=yes" >> $CONFFILE
    fi
fi


for i in `cat /proc/cmdline`; do
    KEY=`echo $i | awk -F= '{print $1}'`
    if [ "$KEY" = "dump" ]; then
        DUMP=`echo $i |awk -F= '{print $2}'`
        if [ ! -z "$XCAT" ]; then
            break
        fi
    elif [ "$KEY" = "XCAT" ]; then
        XCAT=`echo $i |awk -F= '{print $2}'`
        if [ ! -z "$DUMP" ]; then
            break
        fi
    fi
done

if [ ! -z "$DUMP" ]; then
    # parse "dump=<proto>://<nfsserver_IP>/<directory>"
    KDPATH=${DUMP#*:}
    KDPROTO=${DUMP%:$KDPATH*}
    
    KDPATH=${KDPATH/\/\//}
    KDIP=`echo $KDPATH | cut -d'/' -f1`
    KDPATH=${KDPATH/$KDIP/}

    # if "dump=<proto>:///<directory>", use $xcatmaster as the default NFS server
    if [ -z $KDIP ]; then
        KDIP=${XCAT%:*}
    fi

    # workaround for RHEL6
    # the $KDIP:$KDPATH directory will be used to generate the initrd for kdump service
    MOUNTPATH=""
    if (pmatch $OSVER "*6\.*" ); then
	MOUNTPATH="/tmp"
    else
	MOUNTPATH="/var/tmp"
    fi 
    /bin/mount $KDIP:$KDPATH $MOUNTPATH

    if [ "$KDPROTO" = "nfs" ]; then
	if (pmatch $OSVER "sles*") || (pmatch $OSVER "suse*") || [ -f /etc/SuSE-release ]; then
	    KDTEMPPATH=${KDPATH//\//\\\/}
	    KDTEMPPATH="nfs:\/\/${KDIP}${KDTEMPPATH}\/${NODE}"
	    sed -i "s/^KDUMP_SAVEDIR=.*$/KDUMP_SAVEDIR=\"${KDTEMPPATH}\"/" /etc/sysconfig/kdump
            sed -i "s/^KDUMP_COPY_KERNEL=.*$/KDUMP_COPY_KERNEL=\"no\"/" /etc/sysconfig/kdump
            sed -i "s/^KDUMP_PRESCRIPT=.*$/KDUMP_PRESCRIPT=\"\/tmp\/createdir\"/" /etc/sysconfig/kdump
            sed -i "s/^KDUMP_REQUIRED_PROGRAMS=.*$/KDUMP_REQUIRED_PROGRAMS=\"\/tmp\/createdir\"/" /etc/sysconfig/kdump
            TEMPDELAY=$(($RANDOM%30))
            #work around for the kdump on sles 11.2
            echo "/bin/mkdir -p /root/tmp/" > /tmp/createdir
            #following 5 lines is the work around for kdump on multiply nodes
            echo "/bin/sleep ${TEMPDELAY}" >> /tmp/createdir
            echo "/bin/mount -o nolock ${KDIP}:${KDPATH} /tmp" >> /tmp/createdir
            echo "/bin/mkdir -p /tmp/${NODE}" >> /tmp/createdir
            echo "/bin/sleep ${TEMPDELAY}" >> /tmp/createdir
            echo "/bin/umount /tmp" >> /tmp/createdir
            /bin/chmod 777 /tmp/createdir    
            #change the mount and remount shell scripts' name, workaround for kdump on stateless node
            oldmount=`ls /lib/mkinitrd/boot/*-mount.sh`
            oldremount=`ls /lib/mkinitrd/boot/*-remount.sh`
            mv $oldmount ${oldmount}.bak
            mv $oldremount ${oldremount}.bak
	    /etc/init.d/boot.kdump restart
            mv ${oldmount}.bak $oldmount
            mv ${oldremount}.bak $oldremount
	else
	    if (pmatch $OSVER "fedora*") || (pmatch $OSVER "rhel6*") || (pmatch $OSVER "rhels6*") || [ -f /etc/fedora-release ] || [ -f /etc/redhat-release ];then
		echo "net $KDIP:$KDPATH" > /etc/kdump.conf
                echo "link_delay 180" >> /etc/kdump.conf
		/etc/init.d/kdump restart
	    fi
	fi
    fi

    /bin/umount -l $MOUNTPATH
else
    /bin/echo "The kdump server is not configured"
fi

exit 0