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