178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $FreeBSD$
478344Sobrien#
578344Sobrien
678344Sobrien# PROVIDE: savecore
7208307Sdougb# REQUIRE: dumpon ddb syslogd
8136224Smtm# KEYWORD: nojail
978344Sobrien
1078344Sobrien. /etc/rc.subr
1178344Sobrien
1278344Sobrienname="savecore"
13298784Sbaptrcvar="savecore_enable"
14298514Slmedesc="Save a core dump of the operating system"
1578344Sobrienstart_cmd="savecore_start"
1698184Sgordonstart_precmd="savecore_prestart"
1778344Sobrienstop_cmd=":"
1878344Sobrien
1998184Sgordonsavecore_prestart()
2078344Sobrien{
21124622Smtm	# Quit if we have no dump device
22124622Smtm	case ${dumpdev} in
23124622Smtm	[Nn][Oo] | '')
24124622Smtm		debug 'No dump device. Quitting.'
25124622Smtm		return 1
26124622Smtm		;;
27136684Sthomas	[Aa][Uu][Tt][Oo])
28248488Scperciva		if [ ! -L /dev/dumpdev ]; then
29248487Scperciva			return 1
30248487Scperciva		fi
31136901Sdes		dumpdev=`/bin/realpath /dev/dumpdev`
32136684Sthomas		;;
33124622Smtm	esac
3498184Sgordon
35124622Smtm	# If there is no crash directory set it now
36124622Smtm	case ${dumpdir} in
37124622Smtm	'')
38124622Smtm		dumpdir='/var/crash'
3998184Sgordon		;;
40124622Smtm	[Nn][Oo])
41124622Smtm		dumpdir='NO'
4298184Sgordon		;;
4398184Sgordon	esac
44124622Smtm
45136901Sdes	if [ ! -c "${dumpdev}" ]; then
46136901Sdes		warn "Dump device does not exist.  Savecore not run."
47124622Smtm		return 1
48124622Smtm	fi
49136901Sdes
50136901Sdes	if [ ! -d "${dumpdir}" ]; then
51136901Sdes		warn "Dump directory does not exist.  Savecore not run."
52136901Sdes		return 1
53136901Sdes	fi
5498184Sgordon	return 0
5598184Sgordon}
5698184Sgordon
5798184Sgordonsavecore_start()
5898184Sgordon{
59180317Smtm	local dev
60180317Smtm
61180317Smtm	case "${dumpdev}" in
62180317Smtm	[Aa][Uu][Tt][Oo])
63180317Smtm		dev=
64180317Smtm		;;
65180317Smtm	*)
66180317Smtm		dev="${dumpdev}"
67180317Smtm		;;
68180317Smtm	esac
69180317Smtm
70244218Spjd	if savecore -C "${dev}" >/dev/null; then
71180318Smtm		savecore ${savecore_flags} ${dumpdir} ${dumpdev}
72182460Sjhb		if checkyesno crashinfo_enable; then
73182460Sjhb			${crashinfo_program} -d ${dumpdir}
74182460Sjhb		fi
75254992Sgavin		sync
76179962Smtm	else
77197947Sdougb		check_startmsgs && echo 'No core dumps found.'
78179962Smtm	fi
7978344Sobrien}
8078344Sobrien
8178344Sobrienload_rc_config $name
8278344Sobrienrun_rc_command "$1"
83