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