e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#!/bin/ksh93 -p
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# CDDL HEADER START
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# The contents of this file are subject to the terms of the
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# Common Development and Distribution License (the "License").
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# You may not use this file except in compliance with the License.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# or http://www.opensolaris.org/os/licensing.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# See the License for the specific language governing permissions
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# and limitations under the License.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# When distributing Covered Code, include this CDDL HEADER in each
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# If applicable, add the following below this CDDL HEADER, with the
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# fields enclosed by brackets "[]" replaced with your own identifying
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# information: Portions Copyright [yyyy] [name of copyright owner]
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# CDDL HEADER END
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
ab5dfd5e82c7de6e8a7172573741f3c5890a82fa# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# Use is subject to license terms.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# common shell script functions
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek. /usr/lib/brand/solaris10/common.ksh
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek. /usr/lib/brand/shared/uninstall.ksh
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# options processing
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
ab5dfd5e82c7de6e8a7172573741f3c5890a82fa# If we weren't passed at least two arguments, exit now.
ab5dfd5e82c7de6e8a7172573741f3c5890a82fa(( $# < 2 )) && exit $ZONE_SUBPROC_USAGE
ab5dfd5e82c7de6e8a7172573741f3c5890a82fa
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekzonename=$1
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekzonepath=$2
ab5dfd5e82c7de6e8a7172573741f3c5890a82fa
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekshift 2
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekoptions="FhHnv"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekoptions_repeat=""
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekoptions_seen=""
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekopt_F=""
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekopt_n=""
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekopt_v=""
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# check for bad or duplicate options
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald JelinekOPTIND=1
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekwhile getopts $options OPT ; do
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekcase $OPT in
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek \? ) usage_err ;; # invalid argument
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek : ) usage_err ;; # argument expected
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek * )
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek opt=`echo $OPT | sed 's/-\+//'`
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if [ -n "$options_repeat" ]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek echo $options_repeat | grep $opt >/dev/null
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek [ $? = 0 ] && break
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek fi
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ( echo $options_seen | grep $opt >/dev/null ) &&
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek usage_err
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek options_seen="${options_seen}${opt}"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ;;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekesac
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekdone
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# check for a help request
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald JelinekOPTIND=1
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekwhile getopts :$options OPT ; do
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekcase $OPT in
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek h|H ) usage
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekesac
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekdone
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# process options
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald JelinekOPTIND=1
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekwhile getopts :$options OPT ; do
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekcase $OPT in
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek F ) opt_F="-F" ;;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek n ) opt_n="-n" ;;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek v ) opt_v="-v" ;;
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekesac
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekdone
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekshift `expr $OPTIND - 1`
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek[ $# -gt 0 ] && usage_err
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# main
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekzoneroot=$zonepath/root
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelineknop=""
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekif [[ -n "$opt_n" ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek nop="echo"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek #
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # in '-n' mode we should never return success (since we haven't
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # actually done anything). so override ZONE_SUBPROC_OK here.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek #
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek ZONE_SUBPROC_OK=$ZONE_SUBPROC_FATAL
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekfi
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# We want uninstall to work in the face of various problems, such as a
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# zone with no delegated root dataset or multiple active datasets, so we
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# don't use the common functions. Instead, we do our own work and
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# are tolerant of errors.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek#
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekuninstall_get_zonepath_ds
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekuninstall_get_zonepath_root_ds
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# find all the zone BE datasets.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekunset fs_all
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek(( fs_all_c = 0 ))
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/sbin/zfs list -H -t filesystem -o name -r $ZONEPATH_RDS | while read fs; do
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # only look at filesystems directly below $ZONEPATH_RDS
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek [[ "$fs" != ~()($ZONEPATH_RDS/+([^/])) ]] && continue
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek fs_all[$fs_all_c]=$fs
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek (( fs_all_c = $fs_all_c + 1 ))
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekdone
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekdestroy_zone_datasets
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekexit $ZONE_SUBPROC_OK