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: savecore 7*0696600cSBjoern A. Zeeb# REQUIRE: dumpon ddb syslogd 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="savecore" 13*0696600cSBjoern A. Zeebrcvar="savecore_enable" 14*0696600cSBjoern A. Zeebdesc="Save a core dump of the operating system" 15*0696600cSBjoern A. Zeebstart_cmd="savecore_start" 16*0696600cSBjoern A. Zeebstart_precmd="savecore_prestart" 17*0696600cSBjoern A. Zeebstop_cmd=":" 18*0696600cSBjoern A. Zeeb 19*0696600cSBjoern A. Zeebsavecore_prestart() 20*0696600cSBjoern A. Zeeb{ 21*0696600cSBjoern A. Zeeb # Quit if we have no dump device 22*0696600cSBjoern A. Zeeb case ${dumpdev} in 23*0696600cSBjoern A. Zeeb [Nn][Oo] | '') 24*0696600cSBjoern A. Zeeb debug 'No dump device. Quitting.' 25*0696600cSBjoern A. Zeeb return 1 26*0696600cSBjoern A. Zeeb ;; 27*0696600cSBjoern A. Zeeb [Aa][Uu][Tt][Oo]) 28*0696600cSBjoern A. Zeeb if [ ! -L /dev/dumpdev ]; then 29*0696600cSBjoern A. Zeeb return 1 30*0696600cSBjoern A. Zeeb fi 31*0696600cSBjoern A. Zeeb dumpdev=`/bin/realpath /dev/dumpdev` 32*0696600cSBjoern A. Zeeb ;; 33*0696600cSBjoern A. Zeeb esac 34*0696600cSBjoern A. Zeeb 35*0696600cSBjoern A. Zeeb # If there is no crash directory set it now 36*0696600cSBjoern A. Zeeb case ${dumpdir} in 37*0696600cSBjoern A. Zeeb '') 38*0696600cSBjoern A. Zeeb dumpdir='/var/crash' 39*0696600cSBjoern A. Zeeb ;; 40*0696600cSBjoern A. Zeeb [Nn][Oo]) 41*0696600cSBjoern A. Zeeb dumpdir='NO' 42*0696600cSBjoern A. Zeeb ;; 43*0696600cSBjoern A. Zeeb esac 44*0696600cSBjoern A. Zeeb 45*0696600cSBjoern A. Zeeb if [ ! -c "${dumpdev}" ]; then 46*0696600cSBjoern A. Zeeb warn "Dump device does not exist. Savecore not run." 47*0696600cSBjoern A. Zeeb return 1 48*0696600cSBjoern A. Zeeb fi 49*0696600cSBjoern A. Zeeb 50*0696600cSBjoern A. Zeeb if [ ! -d "${dumpdir}" ]; then 51*0696600cSBjoern A. Zeeb warn "Dump directory does not exist. Savecore not run." 52*0696600cSBjoern A. Zeeb return 1 53*0696600cSBjoern A. Zeeb fi 54*0696600cSBjoern A. Zeeb return 0 55*0696600cSBjoern A. Zeeb} 56*0696600cSBjoern A. Zeeb 57*0696600cSBjoern A. Zeebsavecore_start() 58*0696600cSBjoern A. Zeeb{ 59*0696600cSBjoern A. Zeeb local dev 60*0696600cSBjoern A. Zeeb 61*0696600cSBjoern A. Zeeb case "${dumpdev}" in 62*0696600cSBjoern A. Zeeb [Aa][Uu][Tt][Oo]) 63*0696600cSBjoern A. Zeeb dev= 64*0696600cSBjoern A. Zeeb ;; 65*0696600cSBjoern A. Zeeb *) 66*0696600cSBjoern A. Zeeb dev="${dumpdev}" 67*0696600cSBjoern A. Zeeb ;; 68*0696600cSBjoern A. Zeeb esac 69*0696600cSBjoern A. Zeeb 70*0696600cSBjoern A. Zeeb if savecore -C "${dev}" >/dev/null; then 71*0696600cSBjoern A. Zeeb savecore ${savecore_flags} ${dumpdir} ${dumpdev} 72*0696600cSBjoern A. Zeeb if checkyesno crashinfo_enable; then 73*0696600cSBjoern A. Zeeb ${crashinfo_program} -b -d ${dumpdir} 74*0696600cSBjoern A. Zeeb fi 75*0696600cSBjoern A. Zeeb sync 76*0696600cSBjoern A. Zeeb else 77*0696600cSBjoern A. Zeeb check_startmsgs && echo 'No core dumps found.' 78*0696600cSBjoern A. Zeeb fi 79*0696600cSBjoern A. Zeeb} 80*0696600cSBjoern A. Zeeb 81*0696600cSBjoern A. Zeebload_rc_config $name 82*0696600cSBjoern A. Zeebrun_rc_command "$1" 83