xref: /freebsd/libexec/rc/rc.d/dumpon (revision 0696600c41600d80bcd993bfd8e675d0ae6951fe)
1*0696600cSBjoern A. Zeeb#!/bin/sh
2*0696600cSBjoern A. Zeeb#
3*0696600cSBjoern A. Zeeb# $FreeBSD$
4*0696600cSBjoern A. Zeeb#
5*0696600cSBjoern A. Zeeb
6*0696600cSBjoern A. Zeeb# PROVIDE: dumpon
7*0696600cSBjoern A. Zeeb# BEFORE: disks
8*0696600cSBjoern A. Zeeb# KEYWORD: nojail
9*0696600cSBjoern A. Zeeb
10*0696600cSBjoern A. Zeeb. /etc/rc.subr
11*0696600cSBjoern A. Zeeb
12*0696600cSBjoern A. Zeebname="dumpon"
13*0696600cSBjoern A. Zeebdesc="Dump kernel corefiles from swap to disk"
14*0696600cSBjoern A. Zeebstart_cmd="dumpon_start"
15*0696600cSBjoern A. Zeebstop_cmd="dumpon_stop"
16*0696600cSBjoern A. Zeeb
17*0696600cSBjoern A. Zeebdumpon_try()
18*0696600cSBjoern A. Zeeb{
19*0696600cSBjoern A. Zeeb	local flags
20*0696600cSBjoern A. Zeeb
21*0696600cSBjoern A. Zeeb	flags=${dumpon_flags}
22*0696600cSBjoern A. Zeeb	if [ -n "${dumppubkey}" ]; then
23*0696600cSBjoern A. Zeeb		warn "The dumppubkey variable is deprecated.  Use dumpon_flags."
24*0696600cSBjoern A. Zeeb		flags="${flags} -k ${dumppubkey}"
25*0696600cSBjoern A. Zeeb	fi
26*0696600cSBjoern A. Zeeb	/sbin/dumpon ${flags} "${1}"
27*0696600cSBjoern A. Zeeb	if [ $? -eq 0 ]; then
28*0696600cSBjoern A. Zeeb		# Make a symlink in devfs for savecore
29*0696600cSBjoern A. Zeeb		ln -fs "${1}" /dev/dumpdev
30*0696600cSBjoern A. Zeeb		return 0
31*0696600cSBjoern A. Zeeb	fi
32*0696600cSBjoern A. Zeeb	warn "unable to specify $1 as a dump device"
33*0696600cSBjoern A. Zeeb	return 1
34*0696600cSBjoern A. Zeeb}
35*0696600cSBjoern A. Zeeb
36*0696600cSBjoern A. Zeebdumpon_start()
37*0696600cSBjoern A. Zeeb{
38*0696600cSBjoern A. Zeeb	# Enable dumpdev so that savecore can see it. Enable it
39*0696600cSBjoern A. Zeeb	# early so a crash early in the boot process can be caught.
40*0696600cSBjoern A. Zeeb	#
41*0696600cSBjoern A. Zeeb	case ${dumpdev} in
42*0696600cSBjoern A. Zeeb	[Nn][Oo] | '')
43*0696600cSBjoern A. Zeeb		;;
44*0696600cSBjoern A. Zeeb	[Aa][Uu][Tt][Oo])
45*0696600cSBjoern A. Zeeb		dev=$(/bin/kenv -q dumpdev)
46*0696600cSBjoern A. Zeeb		if [ -n "${dev}" ] ; then
47*0696600cSBjoern A. Zeeb			dumpon_try "${dev}"
48*0696600cSBjoern A. Zeeb			return $?
49*0696600cSBjoern A. Zeeb		fi
50*0696600cSBjoern A. Zeeb		while read dev mp type more ; do
51*0696600cSBjoern A. Zeeb			[ "${type}" = "swap" ] || continue
52*0696600cSBjoern A. Zeeb			[ -c "${dev}" ] || continue
53*0696600cSBjoern A. Zeeb			dumpon_try "${dev}" 2>/dev/null && return 0
54*0696600cSBjoern A. Zeeb		done </etc/fstab
55*0696600cSBjoern A. Zeeb		echo "No suitable dump device was found." 1>&2
56*0696600cSBjoern A. Zeeb		return 1
57*0696600cSBjoern A. Zeeb		;;
58*0696600cSBjoern A. Zeeb	*)
59*0696600cSBjoern A. Zeeb		dumpon_try "${dumpdev}"
60*0696600cSBjoern A. Zeeb		;;
61*0696600cSBjoern A. Zeeb	esac
62*0696600cSBjoern A. Zeeb}
63*0696600cSBjoern A. Zeeb
64*0696600cSBjoern A. Zeebdumpon_stop()
65*0696600cSBjoern A. Zeeb{
66*0696600cSBjoern A. Zeeb	case ${dumpdev} in
67*0696600cSBjoern A. Zeeb	[Nn][Oo] | '')
68*0696600cSBjoern A. Zeeb		;;
69*0696600cSBjoern A. Zeeb	*)
70*0696600cSBjoern A. Zeeb		rm -f /dev/dumpdev
71*0696600cSBjoern A. Zeeb		/sbin/dumpon -v off
72*0696600cSBjoern A. Zeeb		;;
73*0696600cSBjoern A. Zeeb	esac
74*0696600cSBjoern A. Zeeb}
75*0696600cSBjoern A. Zeeb
76*0696600cSBjoern A. Zeebload_rc_config $name
77*0696600cSBjoern A. Zeebrun_rc_command "$1"
78