# Don't enable kernel core dumping yet 
[ -f /etc/sysconfig/dump.nosave ] && cp /etc/sysconfig/dump.nosave /etc/sysconfig/dump
[ -f /etc/sysconfig/dump ] && . /etc/sysconfig/dump
rm -f $DUMPDIR/ok_to_enable

EXT=`date +%m%d%y%H%M%S`
BUILD=`rpm -q --queryformat "%6{RELEASE}" kernel`

# check to make sure /proc/sys/minidump.dat exists
echo "checking for minidump" > /tmp/minidump.log
if [ -e /proc/sys/minidump.dat ]; then
	/sbin/minidump -s /proc/sys/minidump.dat 2> /tmp/minidump.err
	MINIMAGIC=`head -1 /tmp/minidump.err`
	rm -f /tmp/minidump.err
	if ! [ "$MINIMAGIC" == "Sorry, no crash information was found." ]; then
		if [ -d $DUMPDIR ]; then
			# cleanup old minidump files sitting around
			echo "removing old minidumps from $DUMPDIR" >> /tmp/minidump.log
			if ls $DUMPDIR/minidump* > /dev/null 2>/dev/null; then
				ls -tr $DUMPDIR/minidump* | awk -F. '{pair = $1".*."$3"."$4; if (last!=pair) {print pair} last=pair}' > /tmp/minipairs
				let REM="(`cat /tmp/minipairs | wc -l`)-$DUMP_LIMIT"
				if [ $REM -ge 0 ]; then
					let REM="($REM+1)"
					for i in `cat /tmp/minipairs | head -n $REM`; do
						echo "removing minidump $i" >> /tmp/minidump.log
						rm $i
					done
				fi
				rm /tmp/minipairs
			fi

			# ok, we probably have a real minidump
			echo "creating minidump $DUMPDIR/minidump.1.$BUILD.$EXT" >> /tmp/minidump.log
			/sbin/minidump -a /proc/sys/minidump.dat > $DUMPDIR/minidump.1.$BUILD.$EXT
			# clear it so we don't repeat this process everytime we boot up
			echo "clearing minidump data" >> /tmp/minidump.log
			echo "clear" > /proc/sys/minidump.dat
		fi
	fi
	echo "minidump completed" >> /tmp/minidump.log
fi

# Check for a valid crash dump in core partition
MAGIC=`hexdump -n4 -s4100 -e '"%08X"' /dev/vmdump; hexdump -n4 -s4096 -e '"%08X"' /dev/vmdump`
if [ $MAGIC == "A8190173618F23ED" ]; then

	# Cleanup old dump files, keep only DUMP_LIMIT-1 files
	if [ -d $DUMPDIR ]; then
		if ls $DUMPDIR/vmdump* >/dev/null 2>/dev/null; then
			ls -tr $DUMPDIR/vmdump* | awk -F. '{pair = $1".*."$3"."$4; if (last!=pair) {print pair} last=pair}' > /tmp/pairs
			let REM="(`cat /tmp/pairs | wc -l`)-$DUMP_LIMIT"
			if [ $REM -ge 0 ]; then
				let REM="($REM+1)"
				for i in `cat /tmp/pairs | head -n $REM`; do
					rm $i
				done
			fi
			rm /tmp/pairs
		fi
	fi

	# Save new core file
	dd if=/dev/vmdump count=2017           bs=1M of=$DUMPDIR/vmdump.1.$BUILD.$EXT
	dd if=/dev/vmdump count=2017 skip=2017 bs=1M of=$DUMPDIR/vmdump.2.$BUILD.$EXT
	mkfs /dev/vmdump
fi

# Configure system for crash dumps
if [ -x /sbin/lkcd ] ; then
	/sbin/lkcd config
	touch $DUMPDIR/ok_to_enable
fi

