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