xref: /titanic_44/usr/src/cmd/svc/common/r.manifest (revision ead1f93ee620d7580f7e53350fe5a884fc4f158a)
1*ead1f93eSLiane Praza#!/bin/sh
2*ead1f93eSLiane Praza#
3*ead1f93eSLiane Praza# CDDL HEADER START
4*ead1f93eSLiane Praza#
5*ead1f93eSLiane Praza# The contents of this file are subject to the terms of the
6*ead1f93eSLiane Praza# Common Development and Distribution License (the "License").
7*ead1f93eSLiane Praza# You may not use this file except in compliance with the License.
8*ead1f93eSLiane Praza#
9*ead1f93eSLiane Praza# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*ead1f93eSLiane Praza# or http://www.opensolaris.org/os/licensing.
11*ead1f93eSLiane Praza# See the License for the specific language governing permissions
12*ead1f93eSLiane Praza# and limitations under the License.
13*ead1f93eSLiane Praza#
14*ead1f93eSLiane Praza# When distributing Covered Code, include this CDDL HEADER in each
15*ead1f93eSLiane Praza# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*ead1f93eSLiane Praza# If applicable, add the following below this CDDL HEADER, with the
17*ead1f93eSLiane Praza# fields enclosed by brackets "[]" replaced with your own identifying
18*ead1f93eSLiane Praza# information: Portions Copyright [yyyy] [name of copyright owner]
19*ead1f93eSLiane Praza#
20*ead1f93eSLiane Praza# CDDL HEADER END
21*ead1f93eSLiane Praza#
22*ead1f93eSLiane Praza#
23*ead1f93eSLiane Praza# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*ead1f93eSLiane Praza# Use is subject to license terms.
25*ead1f93eSLiane Praza#
26*ead1f93eSLiane Praza#
27*ead1f93eSLiane Praza# r.manifest - smf(5) manifest remove class action script
28*ead1f93eSLiane Praza#
29*ead1f93eSLiane Praza
30*ead1f93eSLiane PrazaMFSTSCAN=/lib/svc/bin/mfstscan
31*ead1f93eSLiane PrazaSVCCFG=/usr/sbin/svccfg
32*ead1f93eSLiane PrazaSVCPROP=/usr/bin/svcprop
33*ead1f93eSLiane PrazaSVCADM=/usr/sbin/svcadm
34*ead1f93eSLiane PrazaAWK=/usr/bin/awk
35*ead1f93eSLiane PrazaCP=/usr/bin/cp
36*ead1f93eSLiane PrazaRM=/usr/bin/rm
37*ead1f93eSLiane Praza
38*ead1f93eSLiane Praza# number of seconds to wait before killing processes
39*ead1f93eSLiane PrazaSTOP_DELAY=60
40*ead1f93eSLiane Praza
41*ead1f93eSLiane Praza#
42*ead1f93eSLiane Praza# Helper function. Delete the manifest hash value.
43*ead1f93eSLiane Praza# Arguments: $1: manifest file.
44*ead1f93eSLiane Praza#
45*ead1f93eSLiane Prazasvc_delhash()
46*ead1f93eSLiane Praza{
47*ead1f93eSLiane Praza	$SVCCFG delhash $1 >/dev/null 2>&1
48*ead1f93eSLiane Praza	if [ "$?" != "0" ];then
49*ead1f93eSLiane Praza		# this Solaris release doesn't have delhash command
50*ead1f93eSLiane Praza		pg_name=`$MFSTSCAN -t $1`
51*ead1f93eSLiane Praza		if $SVCPROP -q -p $pg_name smf/manifest; then
52*ead1f93eSLiane Praza			$SVCCFG -s smf/manifest delpg $pg_name
53*ead1f93eSLiane Praza		fi
54*ead1f93eSLiane Praza	fi
55*ead1f93eSLiane Praza}
56*ead1f93eSLiane Praza
57*ead1f93eSLiane Praza#
58*ead1f93eSLiane Praza# Helper function. Handle services deathrow file.
59*ead1f93eSLiane Praza# Arguments: $1:manifest file, $2:package name.
60*ead1f93eSLiane Praza#
61*ead1f93eSLiane Prazasvc_deathrow()
62*ead1f93eSLiane Praza{
63*ead1f93eSLiane Praza	DEATHROW_FILE=${PKG_INSTALL_ROOT}/etc/svc/deathrow
64*ead1f93eSLiane Praza	# remove alternate root from manifest path
65*ead1f93eSLiane Praza	manifest=`echo "${PKG_INSTALL_ROOT} $1" | $AWK \
66*ead1f93eSLiane Praza	    '{ print substr($2, length($1)+1); }'`
67*ead1f93eSLiane Praza	#
68*ead1f93eSLiane Praza	# Services deathrow file handling, file format:
69*ead1f93eSLiane Praza	# <fmri>< ><manifest file>< ><package name>
70*ead1f93eSLiane Praza	# (field separator is a space character)
71*ead1f93eSLiane Praza	#
72*ead1f93eSLiane Praza	# Manifest file could be from another Solaris version, bypass the
73*ead1f93eSLiane Praza	# the service bundle and validation (we only need the fmris list).
74*ead1f93eSLiane Praza	# Calling svccfg inventory with SVCCFG_NOVALIDATE=1 is safe because
75*ead1f93eSLiane Praza	# there is no access to the alternate repository.
76*ead1f93eSLiane Praza	#
77*ead1f93eSLiane Praza	ENTITIES=`SVCCFG_NOVALIDATE=1 $SVCCFG inventory $1`
78*ead1f93eSLiane Praza	for fmri in $ENTITIES; do
79*ead1f93eSLiane Praza		# add to services deathrow file
80*ead1f93eSLiane Praza		echo ${fmri} ${manifest} $2 >> ${DEATHROW_FILE}
81*ead1f93eSLiane Praza	done
82*ead1f93eSLiane Praza}
83*ead1f93eSLiane Praza
84*ead1f93eSLiane Prazawait_disable() {
85*ead1f93eSLiane Praza	svcinst=$1
86*ead1f93eSLiane Praza	wait_time=$2
87*ead1f93eSLiane Praza
88*ead1f93eSLiane Praza	while [ ${nsec:=0} -lt $wait_time ]; do
89*ead1f93eSLiane Praza		state=`$SVCPROP -p restarter/state $svcinst`
90*ead1f93eSLiane Praza		if [ "$state" = "disabled" -o "$state" = "maintenance" ]; then
91*ead1f93eSLiane Praza			nstate=`$SVCPROP -p restarter/next_state $svcinst`
92*ead1f93eSLiane Praza			if [ "$nstate" = "none" ]; then
93*ead1f93eSLiane Praza				return 0
94*ead1f93eSLiane Praza			fi
95*ead1f93eSLiane Praza		fi
96*ead1f93eSLiane Praza		/usr/bin/sleep 1
97*ead1f93eSLiane Praza		nsec=`expr ${nsec} + 1`
98*ead1f93eSLiane Praza	done
99*ead1f93eSLiane Praza
100*ead1f93eSLiane Praza	return 1
101*ead1f93eSLiane Praza}
102*ead1f93eSLiane Praza
103*ead1f93eSLiane Prazaif [ "$PKG_INSTALL_ROOT" != "" -a "$PKG_INSTALL_ROOT" != "/" ]; then
104*ead1f93eSLiane Praza	#
105*ead1f93eSLiane Praza	# We can't safely disable the service in this case.
106*ead1f93eSLiane Praza	#
107*ead1f93eSLiane Praza	smf_alive=no
108*ead1f93eSLiane Prazaelse
109*ead1f93eSLiane Praza	#
110*ead1f93eSLiane Praza	# We can verify if the service is disabled prior to
111*ead1f93eSLiane Praza	# removal.
112*ead1f93eSLiane Praza	#
113*ead1f93eSLiane Praza	if [ -r /etc/svc/volatile/repository_door ]; then
114*ead1f93eSLiane Praza		smf_alive=yes
115*ead1f93eSLiane Praza	fi
116*ead1f93eSLiane Prazafi
117*ead1f93eSLiane Praza
118*ead1f93eSLiane Prazawhile read mfst; do
119*ead1f93eSLiane Praza	if [ "$smf_alive" = "yes" ]; then
120*ead1f93eSLiane Praza		$RM -f $mfst
121*ead1f93eSLiane Praza
122*ead1f93eSLiane Praza		$SVCADM restart svc:/system/manifest-import:default
123*ead1f93eSLiane Praza	else
124*ead1f93eSLiane Praza		# deathrow handling
125*ead1f93eSLiane Praza		svc_deathrow $mfst $PKGINST
126*ead1f93eSLiane Praza
127*ead1f93eSLiane Praza		$RM -f $mfst
128*ead1f93eSLiane Praza	fi
129*ead1f93eSLiane Praza
130*ead1f93eSLiane Prazadone
131*ead1f93eSLiane Praza
132*ead1f93eSLiane Prazaexit 0
133