xcat-core/xCAT/postscripts/enablekdump
2012-06-16 01:41:46 +00:00

142 lines
5.1 KiB
Bash
Executable File

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