xref: /illumos-gate/usr/src/cmd/dumpadm/svc-dumpadm (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate#!/sbin/sh
2*7c478bd9Sstevel@tonic-gate#
3*7c478bd9Sstevel@tonic-gate# CDDL HEADER START
4*7c478bd9Sstevel@tonic-gate#
5*7c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the
6*7c478bd9Sstevel@tonic-gate# Common Development and Distribution License, Version 1.0 only
7*7c478bd9Sstevel@tonic-gate# (the "License").  You may not use this file except in compliance
8*7c478bd9Sstevel@tonic-gate# with the License.
9*7c478bd9Sstevel@tonic-gate#
10*7c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11*7c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing.
12*7c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions
13*7c478bd9Sstevel@tonic-gate# and limitations under the License.
14*7c478bd9Sstevel@tonic-gate#
15*7c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each
16*7c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17*7c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the
18*7c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying
19*7c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner]
20*7c478bd9Sstevel@tonic-gate#
21*7c478bd9Sstevel@tonic-gate# CDDL HEADER END
22*7c478bd9Sstevel@tonic-gate#
23*7c478bd9Sstevel@tonic-gate#
24*7c478bd9Sstevel@tonic-gate# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
25*7c478bd9Sstevel@tonic-gate# Use is subject to license terms.
26*7c478bd9Sstevel@tonic-gate#
27*7c478bd9Sstevel@tonic-gate#ident	"%Z%%M%	%I%	%E% SMI"
28*7c478bd9Sstevel@tonic-gate
29*7c478bd9Sstevel@tonic-gate. /lib/svc/share/smf_include.sh
30*7c478bd9Sstevel@tonic-gate
31*7c478bd9Sstevel@tonic-gate#
32*7c478bd9Sstevel@tonic-gate# mksavedir
33*7c478bd9Sstevel@tonic-gate# Make sure that $DUMPADM_SAVDIR is set and exists.
34*7c478bd9Sstevel@tonic-gate#
35*7c478bd9Sstevel@tonic-gatemksavedir ()
36*7c478bd9Sstevel@tonic-gate{
37*7c478bd9Sstevel@tonic-gate	[ -z "$DUMPADM_SAVDIR" ] && DUMPADM_SAVDIR=/var/crash/`uname -n`
38*7c478bd9Sstevel@tonic-gate	[ -d "$DUMPADM_SAVDIR" ] || /usr/bin/mkdir -m 0700 -p $DUMPADM_SAVDIR
39*7c478bd9Sstevel@tonic-gate}
40*7c478bd9Sstevel@tonic-gate
41*7c478bd9Sstevel@tonic-gate#
42*7c478bd9Sstevel@tonic-gate# We haven't run savecore on a dump device yet
43*7c478bd9Sstevel@tonic-gate#
44*7c478bd9Sstevel@tonic-gatesavedev=none
45*7c478bd9Sstevel@tonic-gate
46*7c478bd9Sstevel@tonic-gate#
47*7c478bd9Sstevel@tonic-gate# If we previously crashed early in boot before dumpadm was used to configure
48*7c478bd9Sstevel@tonic-gate# an alternate dump device, then the dump is in the primary swap partition,
49*7c478bd9Sstevel@tonic-gate# which was configured as the dump device by the first swapadd early in boot.
50*7c478bd9Sstevel@tonic-gate# Thus before we run dumpadm to configure the dump device, we first run
51*7c478bd9Sstevel@tonic-gate# savecore to check the swap partition for a dump.
52*7c478bd9Sstevel@tonic-gate#
53*7c478bd9Sstevel@tonic-gateif [ -x /usr/bin/savecore ]; then
54*7c478bd9Sstevel@tonic-gate	[ -r /etc/dumpadm.conf ] && . /etc/dumpadm.conf
55*7c478bd9Sstevel@tonic-gate
56*7c478bd9Sstevel@tonic-gate	if [ "x$DUMPADM_ENABLE" != xno ] && mksavedir; then
57*7c478bd9Sstevel@tonic-gate		/usr/bin/savecore $DUMPADM_SAVDIR
58*7c478bd9Sstevel@tonic-gate		shift $#
59*7c478bd9Sstevel@tonic-gate		set -- `/usr/sbin/dumpadm 2>/dev/null | /usr/bin/grep 'device:'`
60*7c478bd9Sstevel@tonic-gate		savedev=${3:-none}
61*7c478bd9Sstevel@tonic-gate	fi
62*7c478bd9Sstevel@tonic-gateelse
63*7c478bd9Sstevel@tonic-gate	echo "WARNING: /usr/bin/savecore is missing or not executable" >& 2
64*7c478bd9Sstevel@tonic-gatefi
65*7c478bd9Sstevel@tonic-gate
66*7c478bd9Sstevel@tonic-gate#
67*7c478bd9Sstevel@tonic-gate# Now run dumpadm to configure the dump device based on the settings
68*7c478bd9Sstevel@tonic-gate# previously saved by dumpadm.  See dumpadm(1m) for instructions on
69*7c478bd9Sstevel@tonic-gate# how to modify the dump settings.
70*7c478bd9Sstevel@tonic-gate#
71*7c478bd9Sstevel@tonic-gateif [ -x /usr/sbin/dumpadm ]; then
72*7c478bd9Sstevel@tonic-gate	/usr/sbin/dumpadm -u || $SMF_EXIT_ERR_CONFIG
73*7c478bd9Sstevel@tonic-gateelse
74*7c478bd9Sstevel@tonic-gate	echo "WARNING: /usr/sbin/dumpadm is missing or not executable" >& 2
75*7c478bd9Sstevel@tonic-gate	exit $SMF_EXIT_ERR_CONFIG
76*7c478bd9Sstevel@tonic-gatefi
77*7c478bd9Sstevel@tonic-gate
78*7c478bd9Sstevel@tonic-gateif [ -r /etc/dumpadm.conf ]; then
79*7c478bd9Sstevel@tonic-gate	. /etc/dumpadm.conf
80*7c478bd9Sstevel@tonic-gateelse
81*7c478bd9Sstevel@tonic-gate	echo "WARNING: /etc/dumpadm.conf is missing or unreadable" >& 2
82*7c478bd9Sstevel@tonic-gate	exit $SMF_EXIT_ERR_CONFIG
83*7c478bd9Sstevel@tonic-gatefi
84*7c478bd9Sstevel@tonic-gate
85*7c478bd9Sstevel@tonic-gate#
86*7c478bd9Sstevel@tonic-gate# Now that dumpadm has reconfigured /dev/dump, we need to run savecore again
87*7c478bd9Sstevel@tonic-gate# because the dump device may have changed.  If the earlier savecore had
88*7c478bd9Sstevel@tonic-gate# saved the dump, savecore will just exit immediately.
89*7c478bd9Sstevel@tonic-gate#
90*7c478bd9Sstevel@tonic-gateif [ "x$DUMPADM_ENABLE" != xno ]; then
91*7c478bd9Sstevel@tonic-gate	if /usr/sbin/swap -l | grep "^${DUMPADM_DEVICE} " >/dev/null 2>&1; then
92*7c478bd9Sstevel@tonic-gate		#
93*7c478bd9Sstevel@tonic-gate		# If the dump device is part of swap, we only need to run
94*7c478bd9Sstevel@tonic-gate		# savecore a second time if the device is different from the
95*7c478bd9Sstevel@tonic-gate		# swap device on which we initially ran savecore.
96*7c478bd9Sstevel@tonic-gate		#
97*7c478bd9Sstevel@tonic-gate		[ "x$savedev" != "x$DUMPADM_DEVICE" ] && \
98*7c478bd9Sstevel@tonic-gate		    mksavedir && /usr/bin/savecore $DUMPADM_SAVDIR &
99*7c478bd9Sstevel@tonic-gate	else
100*7c478bd9Sstevel@tonic-gate		#
101*7c478bd9Sstevel@tonic-gate		# The dump device couldn't have been dedicated before we
102*7c478bd9Sstevel@tonic-gate		# ran dumpadm, so we must execute savecore again.
103*7c478bd9Sstevel@tonic-gate		#
104*7c478bd9Sstevel@tonic-gate		mksavedir && /usr/bin/savecore $DUMPADM_SAVDIR &
105*7c478bd9Sstevel@tonic-gate	fi
106*7c478bd9Sstevel@tonic-gatefi
107*7c478bd9Sstevel@tonic-gate
108*7c478bd9Sstevel@tonic-gateexit $SMF_EXIT_OK
109