]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - libexec/rc/rc.d/dumpon
Merge bmake-20230510
[FreeBSD/FreeBSD.git] / libexec / rc / rc.d / dumpon
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: dumpon
7 # BEFORE: disks
8 # KEYWORD: nojail
9
10 . /etc/rc.subr
11
12 name="dumpon"
13 desc="Dump kernel corefiles from swap to disk"
14 start_cmd="dumpon_start"
15 stop_cmd="dumpon_stop"
16
17 dumpon_try()
18 {
19         local flags
20
21         flags=${dumpon_flags}
22         if [ -n "${dumppubkey}" ]; then
23                 warn "The dumppubkey variable is deprecated.  Use dumpon_flags."
24                 flags="${flags} -k ${dumppubkey}"
25         fi
26         /sbin/dumpon ${flags} "${1}"
27         if [ $? -eq 0 ]; then
28                 # Make a symlink in devfs for savecore
29                 ln -fs "${1}" /dev/dumpdev
30                 return 0
31         fi
32         warn "unable to specify $1 as a dump device"
33         return 1
34 }
35
36 dumpon_warn_unencrypted()
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
49 dumpon_start()
50 {
51         # Enable dumpdev so that savecore can see it. Enable it
52         # early so a crash early in the boot process can be caught.
53         #
54         case ${dumpdev} in
55         [Nn][Oo] | '')
56                 ;;
57         [Aa][Uu][Tt][Oo])
58                 root_hold_wait
59                 dev=$(/bin/kenv -q dumpdev)
60                 if [ -n "${dev}" ] ; then
61                         dumpon_try "${dev}"
62                         return $?
63                 fi
64                 while read dev mp type more ; do
65                         [ "${type}" = "swap" ] || continue
66                         case ${dev} in
67                         *.bde|*.eli)
68                                 dumpon_warn_unencrypted
69                                 dev=${dev%.*}
70                                 ;;
71                         esac
72                         [ -c "${dev}" ] || continue
73                         dumpon_try "${dev}" 2>/dev/null && return 0
74                 done </etc/fstab
75                 echo "No suitable dump device was found." 1>&2
76                 return 1
77                 ;;
78         *)
79                 root_hold_wait
80                 dumpon_try "${dumpdev}"
81                 ;;
82         esac
83 }
84
85 dumpon_stop()
86 {
87         case ${dumpdev} in
88         [Nn][Oo] | '')
89                 ;;
90         *)
91                 rm -f /dev/dumpdev
92                 /sbin/dumpon -v off
93                 ;;
94         esac
95 }
96
97 load_rc_config $name
98 run_rc_command "$1"