1#!/bin/sh 2# 3# 4 5# PROVIDE: dumpon 6# BEFORE: disks 7# KEYWORD: nojail 8 9. /etc/rc.subr 10 11name="dumpon" 12desc="Dump kernel corefiles from swap to disk" 13start_cmd="dumpon_start" 14stop_cmd="dumpon_stop" 15 16dumpon_try() 17{ 18 local flags 19 20 flags=${dumpon_flags} 21 if [ -n "${dumppubkey}" ]; then 22 warn "The dumppubkey variable is deprecated. Use dumpon_flags." 23 flags="${flags} -k ${dumppubkey}" 24 fi 25 if /sbin/dumpon ${flags} "${1}"; then 26 # Make a symlink in devfs for savecore 27 ln -fs "${1}" /dev/dumpdev 28 return 0 29 fi 30 warn "unable to specify $1 as a dump device" 31 return 1 32} 33 34dumpon_warn_unencrypted() 35{ 36 local flag 37 38 if [ -n "${dumppubkey}" ]; then 39 return 40 fi 41 for flag in ${dumpon_flags}; do 42 if [ "$flag" = -k ]; then 43 return 44 fi 45 done 46 warn "Kernel dumps will be written to the swap partition without encryption." 47} 48 49dumpon_start() 50{ 51 local dev mp type more 52 53 # Enable dumpdev so that savecore can see it. Enable it 54 # early so a crash early in the boot process can be caught. 55 # 56 case ${dumpdev} in 57 [Nn][Oo]) 58 ;; 59 [Aa][Uu][Tt][Oo] | '') 60 root_hold_wait 61 dev=$(/bin/kenv -q dumpdev) 62 if [ -n "${dev}" ] ; then 63 dumpon_try "${dev}" 64 return $? 65 fi 66 if [ -z "${dumpdev}" ] ; then 67 return 68 fi 69 while read dev mp type more ; do 70 [ "${type}" = "swap" ] || continue 71 case ${dev} in 72 *.bde|*.eli) 73 dumpon_warn_unencrypted 74 dev=${dev%.*} 75 ;; 76 esac 77 [ -c "${dev}" ] || continue 78 dumpon_try "${dev}" 2>/dev/null && return 0 79 done </etc/fstab 80 echo "No suitable dump device was found." 1>&2 81 return 1 82 ;; 83 *) 84 root_hold_wait 85 dumpon_try "${dumpdev}" 86 ;; 87 esac 88} 89 90dumpon_stop() 91{ 92 case ${dumpdev} in 93 [Nn][Oo]) 94 ;; 95 *) 96 rm -f /dev/dumpdev 97 /sbin/dumpon -v off 98 ;; 99 esac 100} 101 102load_rc_config "$name" 103 104# doesn't make sense to run in a svcj: config setting 105dumpon_svcj="NO" 106 107run_rc_command "$1" 108