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"
1378344Sobrienstart_cmd="savecore_start"
1498184Sgordonstart_precmd="savecore_prestart"
1578344Sobrienstop_cmd=":"
1678344Sobrien
1798184Sgordonsavecore_prestart()
1878344Sobrien{
19124622Smtm	# Quit if we have no dump device
20124622Smtm	case ${dumpdev} in
21124622Smtm	[Nn][Oo] | '')
22124622Smtm		debug 'No dump device. Quitting.'
23124622Smtm		return 1
24124622Smtm		;;
25136684Sthomas	[Aa][Uu][Tt][Oo])
26248488Scperciva		if [ ! -L /dev/dumpdev ]; then
27248487Scperciva			return 1
28248487Scperciva		fi
29136901Sdes		dumpdev=`/bin/realpath /dev/dumpdev`
30136684Sthomas		;;
31124622Smtm	esac
3298184Sgordon
33124622Smtm	# If there is no crash directory set it now
34124622Smtm	case ${dumpdir} in
35124622Smtm	'')
36124622Smtm		dumpdir='/var/crash'
3798184Sgordon		;;
38124622Smtm	[Nn][Oo])
39124622Smtm		dumpdir='NO'
4098184Sgordon		;;
4198184Sgordon	esac
42124622Smtm
43136901Sdes	if [ ! -c "${dumpdev}" ]; then
44136901Sdes		warn "Dump device does not exist.  Savecore not run."
45124622Smtm		return 1
46124622Smtm	fi
47136901Sdes
48136901Sdes	if [ ! -d "${dumpdir}" ]; then
49136901Sdes		warn "Dump directory does not exist.  Savecore not run."
50136901Sdes		return 1
51136901Sdes	fi
5298184Sgordon	return 0
5398184Sgordon}
5498184Sgordon
5598184Sgordonsavecore_start()
5698184Sgordon{
57180317Smtm	local dev
58180317Smtm
59180317Smtm	case "${dumpdev}" in
60180317Smtm	[Aa][Uu][Tt][Oo])
61180317Smtm		dev=
62180317Smtm		;;
63180317Smtm	*)
64180317Smtm		dev="${dumpdev}"
65180317Smtm		;;
66180317Smtm	esac
67180317Smtm
68244218Spjd	if savecore -C "${dev}" >/dev/null; then
69180318Smtm		savecore ${savecore_flags} ${dumpdir} ${dumpdev}
70182460Sjhb		if checkyesno crashinfo_enable; then
71182460Sjhb			${crashinfo_program} -d ${dumpdir}
72182460Sjhb		fi
73254992Sgavin		sync
74179962Smtm	else
75197947Sdougb		check_startmsgs && echo 'No core dumps found.'
76179962Smtm	fi
7778344Sobrien}
7878344Sobrien
7978344Sobrienload_rc_config $name
8078344Sobrienrun_rc_command "$1"
81