xref: /illumos-gate/usr/src/lib/brand/solaris10/zone/uninstall.ksh (revision ab5dfd5e82c7de6e8a7172573741f3c5890a82fa)
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