1e71ca95cSGerald Jelinek#!/bin/ksh93 -p 2e71ca95cSGerald Jelinek# 3e71ca95cSGerald Jelinek# CDDL HEADER START 4e71ca95cSGerald Jelinek# 5e71ca95cSGerald Jelinek# The contents of this file are subject to the terms of the 6e71ca95cSGerald Jelinek# Common Development and Distribution License (the "License"). 7e71ca95cSGerald Jelinek# You may not use this file except in compliance with the License. 8e71ca95cSGerald Jelinek# 9e71ca95cSGerald Jelinek# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10e71ca95cSGerald Jelinek# or http://www.opensolaris.org/os/licensing. 11e71ca95cSGerald Jelinek# See the License for the specific language governing permissions 12e71ca95cSGerald Jelinek# and limitations under the License. 13e71ca95cSGerald Jelinek# 14e71ca95cSGerald Jelinek# When distributing Covered Code, include this CDDL HEADER in each 15e71ca95cSGerald Jelinek# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16e71ca95cSGerald Jelinek# If applicable, add the following below this CDDL HEADER, with the 17e71ca95cSGerald Jelinek# fields enclosed by brackets "[]" replaced with your own identifying 18e71ca95cSGerald Jelinek# information: Portions Copyright [yyyy] [name of copyright owner] 19e71ca95cSGerald Jelinek# 20e71ca95cSGerald Jelinek# CDDL HEADER END 21e71ca95cSGerald Jelinek# 22e71ca95cSGerald Jelinek# 23*ab5dfd5eS# Copyright 2010 Sun Microsystems, Inc. All rights reserved. 24e71ca95cSGerald Jelinek# Use is subject to license terms. 25e71ca95cSGerald Jelinek# 26e71ca95cSGerald Jelinek 27e71ca95cSGerald Jelinek# 28e71ca95cSGerald Jelinek# common shell script functions 29e71ca95cSGerald Jelinek# 30e71ca95cSGerald Jelinek. /usr/lib/brand/solaris10/common.ksh 31e71ca95cSGerald Jelinek. /usr/lib/brand/shared/uninstall.ksh 32e71ca95cSGerald Jelinek 33e71ca95cSGerald Jelinek# 34e71ca95cSGerald Jelinek# options processing 35e71ca95cSGerald Jelinek# 36*ab5dfd5eS# If we weren't passed at least two arguments, exit now. 37*ab5dfd5eS(( $# < 2 )) && exit $ZONE_SUBPROC_USAGE 38*ab5dfd5eS 39e71ca95cSGerald Jelinekzonename=$1 40e71ca95cSGerald Jelinekzonepath=$2 41*ab5dfd5eS 42e71ca95cSGerald Jelinekshift 2 43e71ca95cSGerald Jelinek 44e71ca95cSGerald Jelinekoptions="FhHnv" 45e71ca95cSGerald Jelinekoptions_repeat="" 46e71ca95cSGerald Jelinekoptions_seen="" 47e71ca95cSGerald Jelinek 48e71ca95cSGerald Jelinekopt_F="" 49e71ca95cSGerald Jelinekopt_n="" 50e71ca95cSGerald Jelinekopt_v="" 51e71ca95cSGerald Jelinek 52e71ca95cSGerald Jelinek# check for bad or duplicate options 53e71ca95cSGerald JelinekOPTIND=1 54e71ca95cSGerald Jelinekwhile getopts $options OPT ; do 55e71ca95cSGerald Jelinekcase $OPT in 56e71ca95cSGerald Jelinek \? ) usage_err ;; # invalid argument 57e71ca95cSGerald Jelinek : ) usage_err ;; # argument expected 58e71ca95cSGerald Jelinek * ) 59e71ca95cSGerald Jelinek opt=`echo $OPT | sed 's/-\+//'` 60e71ca95cSGerald Jelinek if [ -n "$options_repeat" ]; then 61e71ca95cSGerald Jelinek echo $options_repeat | grep $opt >/dev/null 62e71ca95cSGerald Jelinek [ $? = 0 ] && break 63e71ca95cSGerald Jelinek fi 64e71ca95cSGerald Jelinek ( echo $options_seen | grep $opt >/dev/null ) && 65e71ca95cSGerald Jelinek usage_err 66e71ca95cSGerald Jelinek options_seen="${options_seen}${opt}" 67e71ca95cSGerald Jelinek ;; 68e71ca95cSGerald Jelinekesac 69e71ca95cSGerald Jelinekdone 70e71ca95cSGerald Jelinek 71e71ca95cSGerald Jelinek# check for a help request 72e71ca95cSGerald JelinekOPTIND=1 73e71ca95cSGerald Jelinekwhile getopts :$options OPT ; do 74e71ca95cSGerald Jelinekcase $OPT in 75e71ca95cSGerald Jelinek h|H ) usage 76e71ca95cSGerald Jelinekesac 77e71ca95cSGerald Jelinekdone 78e71ca95cSGerald Jelinek 79e71ca95cSGerald Jelinek# process options 80e71ca95cSGerald JelinekOPTIND=1 81e71ca95cSGerald Jelinekwhile getopts :$options OPT ; do 82e71ca95cSGerald Jelinekcase $OPT in 83e71ca95cSGerald Jelinek F ) opt_F="-F" ;; 84e71ca95cSGerald Jelinek n ) opt_n="-n" ;; 85e71ca95cSGerald Jelinek v ) opt_v="-v" ;; 86e71ca95cSGerald Jelinekesac 87e71ca95cSGerald Jelinekdone 88e71ca95cSGerald Jelinekshift `expr $OPTIND - 1` 89e71ca95cSGerald Jelinek 90e71ca95cSGerald Jelinek[ $# -gt 0 ] && usage_err 91e71ca95cSGerald Jelinek 92e71ca95cSGerald Jelinek# 93e71ca95cSGerald Jelinek# main 94e71ca95cSGerald Jelinek# 95e71ca95cSGerald Jelinekzoneroot=$zonepath/root 96e71ca95cSGerald Jelinek 97e71ca95cSGerald Jelineknop="" 98e71ca95cSGerald Jelinekif [[ -n "$opt_n" ]]; then 99e71ca95cSGerald Jelinek nop="echo" 100e71ca95cSGerald Jelinek # 101e71ca95cSGerald Jelinek # in '-n' mode we should never return success (since we haven't 102e71ca95cSGerald Jelinek # actually done anything). so override ZONE_SUBPROC_OK here. 103e71ca95cSGerald Jelinek # 104e71ca95cSGerald Jelinek ZONE_SUBPROC_OK=$ZONE_SUBPROC_FATAL 105e71ca95cSGerald Jelinekfi 106e71ca95cSGerald Jelinek 107e71ca95cSGerald Jelinek# 108e71ca95cSGerald Jelinek# We want uninstall to work in the face of various problems, such as a 109e71ca95cSGerald Jelinek# zone with no delegated root dataset or multiple active datasets, so we 110e71ca95cSGerald Jelinek# don't use the common functions. Instead, we do our own work and 111e71ca95cSGerald Jelinek# are tolerant of errors. 112e71ca95cSGerald Jelinek# 113e71ca95cSGerald Jelinekuninstall_get_zonepath_ds 114e71ca95cSGerald Jelinekuninstall_get_zonepath_root_ds 115e71ca95cSGerald Jelinek 116e71ca95cSGerald Jelinek# find all the zone BE datasets. 117e71ca95cSGerald Jelinekunset fs_all 118e71ca95cSGerald Jelinek(( fs_all_c = 0 )) 119e71ca95cSGerald Jelinek/sbin/zfs list -H -t filesystem -o name -r $ZONEPATH_RDS | while read fs; do 120e71ca95cSGerald Jelinek # only look at filesystems directly below $ZONEPATH_RDS 121e71ca95cSGerald Jelinek [[ "$fs" != ~()($ZONEPATH_RDS/+([^/])) ]] && continue 122e71ca95cSGerald Jelinek 123e71ca95cSGerald Jelinek fs_all[$fs_all_c]=$fs 124e71ca95cSGerald Jelinek (( fs_all_c = $fs_all_c + 1 )) 125e71ca95cSGerald Jelinekdone 126e71ca95cSGerald Jelinek 127e71ca95cSGerald Jelinekdestroy_zone_datasets 128e71ca95cSGerald Jelinek 129e71ca95cSGerald Jelinekexit $ZONE_SUBPROC_OK 130