1 #!/bin/sh 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License (the "License"). 7 # You may not use this file except in compliance with the License. 8 # 9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 # or http://www.opensolaris.org/os/licensing. 11 # See the License for the specific language governing permissions 12 # and limitations under the License. 13 # 14 # When distributing Covered Code, include this CDDL HEADER in each 15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 # If applicable, add the following below this CDDL HEADER, with the 17 # fields enclosed by brackets "[]" replaced with your own identifying 18 # information: Portions Copyright [yyyy] [name of copyright owner] 19 # 20 # CDDL HEADER END 21 # 22 # 23 # Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 # Use is subject to license terms. 25 # 26 # i.manifest - smf(5) service manifest install class action script 27 # 28 29 repfile=$PKG_INSTALL_ROOT/etc/svc/repository.db 30 export repfile 31 32 SVCCFG=/usr/sbin/svccfg 33 SVCADM=/usr/sbin/svcadm 34 AWK=/usr/bin/awk 35 RM=/usr/bin/rm 36 CP=/usr/bin/cp 37 MV=/usr/bin/mv 38 CHMOD=/usr/bin/chmod 39 CHOWN=/usr/bin/chown 40 41 # 42 # Helper function. Handle services deathrow file. 43 # Arguments: $1:manifest file. 44 # 45 svc_deathrow() 46 { 47 TEMP=/tmp/svc_deathrow.$$ 48 DEATHROW_FILE=${PKG_INSTALL_ROOT}/etc/svc/deathrow 49 # 50 # Services deathrow file handling, file format: 51 # <fmri>< ><manifest file>< ><package name> 52 # (field separator is a space character) 53 # 54 if [ -s ${DEATHROW_FILE} ]; then 55 # 56 # Manifest file could be from another Solaris version, bypass 57 # the service bundle and validation (we only need the fmris 58 # list). Calling svccfg inventory with SVCCFG_NOVALIDATE=1 is 59 # safe because there is no access to the alternate repository. 60 # 61 ENTITIES=`SVCCFG_NOVALIDATE=1 $SVCCFG inventory $1` 62 for fmri in $ENTITIES; do 63 # 64 # If fmri matches one in deathrow file, remove the 65 # line from the file. 66 # 67 >${TEMP} 68 $AWK "(\$1==\"$fmri\") \ 69 {next}; {print}" ${DEATHROW_FILE} >>${TEMP} && \ 70 $MV ${TEMP} ${DEATHROW_FILE} 71 $RM -f ${TEMP} 72 done 73 fi 74 } 75 76 # 77 # If the repository does not yet exist, create it from the appropriate seed. If 78 # for some reason the seeds do not exist, svccfg(1M) will create the repository 79 # automatically. 80 # 81 if [ ! -f $repfile ]; then 82 if [ -n "$SUNW_PKG_INSTALL_ZONENAME" -a \ 83 "$SUNW_PKG_INSTALL_ZONENAME" != "global" ]; then 84 [ -f $PKG_INSTALL_ROOT/lib/svc/seed/nonglobal.db ] && \ 85 $CP $PKG_INSTALL_ROOT/lib/svc/seed/nonglobal.db $repfile 86 else 87 [ -f $PKG_INSTALL_ROOT/lib/svc/seed/global.db ] && \ 88 $CP $PKG_INSTALL_ROOT/lib/svc/seed/global.db $repfile 89 fi 90 $CHMOD 0600 $repfile 91 $CHOWN root:sys $repfile 92 fi 93 94 if [ ! -r $PKG_INSTALL_ROOT/etc/svc/volatile/repository_door ]; then 95 # 96 # smf(5) is not presently running for the destination environment. 97 # Since we presently cannot refresh without a running svc.startd(1M), we 98 # cannot consistently handle dependent placement. Defer to next boot. 99 # 100 while read src dst; do 101 $CP -p $src $dst 102 # deathrow handling 103 svc_deathrow $dst 104 done 105 else 106 # 107 # Local package install. 108 # 109 while read src dst; do 110 $CP -p $src $dst 111 112 [ "$PKG_INSTALL_ROOT" = "" -o "$PKG_INSTALL_ROOT" = "/" ] && \ 113 $SVCADM restart svc:/system/manifest-import:default 114 done 115 fi 116 117 exit 0 118