xref: /titanic_51/usr/src/cmd/svc/common/i.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# i.manifest - smf(5) service manifest install class action script
27*ead1f93eSLiane Praza#
28*ead1f93eSLiane Praza
29*ead1f93eSLiane Prazarepfile=$PKG_INSTALL_ROOT/etc/svc/repository.db
30*ead1f93eSLiane Prazaexport repfile
31*ead1f93eSLiane Praza
32*ead1f93eSLiane PrazaSVCCFG=/usr/sbin/svccfg
33*ead1f93eSLiane PrazaSVCADM=/usr/sbin/svcadm
34*ead1f93eSLiane PrazaAWK=/usr/bin/awk
35*ead1f93eSLiane PrazaRM=/usr/bin/rm
36*ead1f93eSLiane PrazaCP=/usr/bin/cp
37*ead1f93eSLiane PrazaMV=/usr/bin/mv
38*ead1f93eSLiane PrazaCHMOD=/usr/bin/chmod
39*ead1f93eSLiane PrazaCHOWN=/usr/bin/chown
40*ead1f93eSLiane Praza
41*ead1f93eSLiane Praza#
42*ead1f93eSLiane Praza# Helper function. Handle services deathrow file.
43*ead1f93eSLiane Praza# Arguments: $1:manifest file.
44*ead1f93eSLiane Praza#
45*ead1f93eSLiane Prazasvc_deathrow()
46*ead1f93eSLiane Praza{
47*ead1f93eSLiane Praza	TEMP=/tmp/svc_deathrow.$$
48*ead1f93eSLiane Praza	DEATHROW_FILE=${PKG_INSTALL_ROOT}/etc/svc/deathrow
49*ead1f93eSLiane Praza	#
50*ead1f93eSLiane Praza	# Services deathrow file handling, file format:
51*ead1f93eSLiane Praza	# <fmri>< ><manifest file>< ><package name>
52*ead1f93eSLiane Praza	# (field separator is a space character)
53*ead1f93eSLiane Praza	#
54*ead1f93eSLiane Praza	if [ -s ${DEATHROW_FILE} ]; then
55*ead1f93eSLiane Praza		#
56*ead1f93eSLiane Praza		# Manifest file could be from another Solaris version, bypass
57*ead1f93eSLiane Praza		# the service bundle and validation (we only need the fmris
58*ead1f93eSLiane Praza		# list). Calling svccfg inventory with SVCCFG_NOVALIDATE=1 is
59*ead1f93eSLiane Praza		# safe because there is no access to the alternate repository.
60*ead1f93eSLiane Praza		#
61*ead1f93eSLiane Praza		ENTITIES=`SVCCFG_NOVALIDATE=1 $SVCCFG inventory $1`
62*ead1f93eSLiane Praza		for fmri in $ENTITIES; do
63*ead1f93eSLiane Praza			#
64*ead1f93eSLiane Praza			# If fmri matches one in deathrow file, remove the
65*ead1f93eSLiane Praza			# line from the file.
66*ead1f93eSLiane Praza			#
67*ead1f93eSLiane Praza			>${TEMP}
68*ead1f93eSLiane Praza			$AWK "(\$1==\"$fmri\") \
69*ead1f93eSLiane Praza			    {next}; {print}" ${DEATHROW_FILE} >>${TEMP} && \
70*ead1f93eSLiane Praza			    $MV ${TEMP} ${DEATHROW_FILE}
71*ead1f93eSLiane Praza			$RM -f ${TEMP}
72*ead1f93eSLiane Praza		done
73*ead1f93eSLiane Praza	fi
74*ead1f93eSLiane Praza}
75*ead1f93eSLiane Praza
76*ead1f93eSLiane Praza#
77*ead1f93eSLiane Praza# If the repository does not yet exist, create it from the appropriate seed.  If
78*ead1f93eSLiane Praza# for some reason the seeds do not exist, svccfg(1M) will create the repository
79*ead1f93eSLiane Praza# automatically.
80*ead1f93eSLiane Praza#
81*ead1f93eSLiane Prazaif [ ! -f $repfile ]; then
82*ead1f93eSLiane Praza	if [ -n "$SUNW_PKG_INSTALL_ZONENAME" -a \
83*ead1f93eSLiane Praza	    "$SUNW_PKG_INSTALL_ZONENAME" != "global" ]; then
84*ead1f93eSLiane Praza		[ -f $PKG_INSTALL_ROOT/lib/svc/seed/nonglobal.db ] && \
85*ead1f93eSLiane Praza		$CP $PKG_INSTALL_ROOT/lib/svc/seed/nonglobal.db $repfile
86*ead1f93eSLiane Praza	else
87*ead1f93eSLiane Praza		[ -f $PKG_INSTALL_ROOT/lib/svc/seed/global.db ] && \
88*ead1f93eSLiane Praza		$CP $PKG_INSTALL_ROOT/lib/svc/seed/global.db $repfile
89*ead1f93eSLiane Praza	fi
90*ead1f93eSLiane Praza	$CHMOD 0600 $repfile
91*ead1f93eSLiane Praza	$CHOWN root:sys $repfile
92*ead1f93eSLiane Prazafi
93*ead1f93eSLiane Praza
94*ead1f93eSLiane Prazaif [ ! -r $PKG_INSTALL_ROOT/etc/svc/volatile/repository_door ]; then
95*ead1f93eSLiane Praza	#
96*ead1f93eSLiane Praza	# smf(5) is not presently running for the destination environment.
97*ead1f93eSLiane Praza	# Since we presently cannot refresh without a running svc.startd(1M), we
98*ead1f93eSLiane Praza	# cannot consistently handle dependent placement.  Defer to next boot.
99*ead1f93eSLiane Praza	#
100*ead1f93eSLiane Praza	while read src dst; do
101*ead1f93eSLiane Praza		$CP -p $src $dst
102*ead1f93eSLiane Praza		# deathrow handling
103*ead1f93eSLiane Praza		svc_deathrow $dst
104*ead1f93eSLiane Praza	done
105*ead1f93eSLiane Prazaelse
106*ead1f93eSLiane Praza	#
107*ead1f93eSLiane Praza	# Local package install.
108*ead1f93eSLiane Praza	#
109*ead1f93eSLiane Praza	while read src dst; do
110*ead1f93eSLiane Praza		$CP -p $src $dst
111*ead1f93eSLiane Praza
112*ead1f93eSLiane Praza		[ "$PKG_INSTALL_ROOT" = "" -o "$PKG_INSTALL_ROOT" = "/" ] && \
113*ead1f93eSLiane Praza		    $SVCADM restart svc:/system/manifest-import:default
114*ead1f93eSLiane Praza	done
115*ead1f93eSLiane Prazafi
116*ead1f93eSLiane Praza
117*ead1f93eSLiane Prazaexit 0
118