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