src/brand/common.ksh
author Dan Price <dp@eng.sun.com>
Wed, 18 Mar 2009 18:35:27 -0700
changeset 954 8614b0c63fb3
parent 547 9a267e76a197
child 1091 fc73bc2d78ce
permissions -rw-r--r--
4771 zone operations fail with package inventory errors when authority changes 7335 zone install needs to be cleverer about publishers 7343 publisher changes broke ipkg zones 7389 Setting ROOT before building should work 7391 need to be able to specify additional packages to install into zones
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
547
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     1
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     2
# CDDL HEADER START
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     3
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     4
# The contents of this file are subject to the terms of the
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     5
# Common Development and Distribution License (the "License").
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     6
# You may not use this file except in compliance with the License.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     7
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     8
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
     9
# or http://www.opensolaris.org/os/licensing.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    10
# See the License for the specific language governing permissions
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    11
# and limitations under the License.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    12
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    13
# When distributing Covered Code, include this CDDL HEADER in each
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    14
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    15
# If applicable, add the following below this CDDL HEADER, with the
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    16
# fields enclosed by brackets "[]" replaced with your own identifying
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    17
# information: Portions Copyright [yyyy] [name of copyright owner]
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    18
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    19
# CDDL HEADER END
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    20
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    21
#
954
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    22
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
547
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    23
# Use is subject to license terms.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    24
#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    25
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    26
ZONE_SUBPROC_OK=0
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    27
ZONE_SUBPROC_USAGE=253
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    28
ZONE_SUBPROC_INCOMPLETE=254
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    29
ZONE_SUBPROC_FATAL=255
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    30
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    31
PROP_PARENT="org.opensolaris.libbe:parentbe"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    32
PROP_ACTIVE="org.opensolaris.libbe:active"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    33
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    34
f_zfs_in_root=$(gettext "Installing a zone in the ROOT pool is unsupported.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    35
f_zfs_create=$(gettext "Unable to create the zone's ZFS dataset.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    36
f_root_create=$(gettext "Unable to create the zone's ZFS dataset mountpoint.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    37
f_no_gzbe=$(gettext "Error: unable to determine global zone boot environment.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    38
f_no_ds=$(gettext "Error: no zonepath dataset.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    39
f_multiple_ds=$(gettext "Error: multiple active datasets.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    40
f_no_active_ds=$(gettext "Error: no active dataset.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    41
f_zfs_mount=$(gettext "Unable to mount the zone's ZFS dataset.")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    42
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    43
fail_incomplete() {
954
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    44
	printf "ERROR: " 1>&2
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    45
	printf "$@" 1>&2
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    46
	printf "\n" 1>&2
547
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    47
	exit $ZONE_SUBPROC_INCOMPLETE
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    48
}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    49
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    50
fail_fatal() {
954
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    51
	printf "ERROR: " 1>&2
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    52
	printf "$@" 1>&2
8614b0c63fb3 4771 zone operations fail with package inventory errors when authority changes
Dan Price <dp@eng.sun.com>
parents: 547
diff changeset
    53
	printf "\n" 1>&2
547
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    54
	exit $ZONE_SUBPROC_FATAL
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    55
}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    56
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    57
fail_usage() {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    58
	print "Usage: $1"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    59
	exit $ZONE_SUBPROC_USAGE
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    60
}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    61
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    62
get_current_gzbe() {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    63
	#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    64
	# If there is no beadm command then the system doesn't really
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    65
	# support multiple boot environments.  We still want zones to work,
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    66
	# so simulate the existence of a single boot environment.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    67
	#
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    68
	if [ -x /usr/sbin/beadm ]; then
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    69
		CURRENT_GZBE=`/usr/sbin/beadm list -H | /usr/bin/nawk -F\; '{
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    70
			# Field 3 is the BE status.  'N' is the active BE.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    71
			if ($3 ~ "N")
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    72
				# Field 2 is the BE UUID
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    73
				print $2
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    74
		}'`
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    75
	else
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    76
		CURRENT_GZBE="opensolaris"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    77
	fi
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    78
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    79
	if [ -z "$CURRENT_GZBE" ]; then
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    80
		fail_fatal "$f_no_gzbe"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    81
	fi
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    82
}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    83
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    84
# Find the dataset mounted on the zonepath.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    85
get_zonepath_ds() {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    86
	ZONEPATH_DS=`/usr/sbin/zfs list -H -t filesystem -o name,mountpoint | \
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    87
	    /usr/bin/nawk -v zonepath=$1 '{
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    88
		if ($2 == zonepath)
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    89
			print $1
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    90
	}'`
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    91
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    92
	if [ -z "$ZONEPATH_DS" ]; then
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    93
		fail_fatal "$f_no_ds"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    94
	fi
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    95
}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    96
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    97
# Find the active dataset under the zonepath dataset to mount on zonepath/root.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    98
# $1 CURRENT_GZBE
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
    99
# $2 ZONEPATH_DS
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   100
get_active_ds() {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   101
	ACTIVE_DS=`/usr/sbin/zfs list -H -r -t filesystem \
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   102
	    -o name,$PROP_PARENT,$PROP_ACTIVE $2/ROOT | \
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   103
	    /usr/bin/nawk -v gzbe=$1 ' {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   104
		if ($1 ~ /ROOT\/[^\/]+$/ && $2 == gzbe && $3 == "on") {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   105
			print $1
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   106
			if (found == 1)
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   107
				exit 1
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   108
			found = 1
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   109
		}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   110
	    }'`
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   111
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   112
	if [ $? -ne 0 ]; then
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   113
		fail_fatal "$f_multiple_ds"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   114
	fi
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   115
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   116
	if [ -z "$ACTIVE_DS" ]; then
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   117
		fail_fatal "$f_no_active_ds"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   118
	fi
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   119
}
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   120
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   121
# Check that zone is not in the ROOT dataset.
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   122
fail_zonepath_in_rootds() {
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   123
	case $1 in
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   124
		rpool/ROOT/*)
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   125
			fail_fatal "$f_zfs_in_root"
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   126
			break;
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   127
			;;
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   128
		*)
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   129
			break;
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   130
			;;
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   131
	esac
9a267e76a197 3454 initial ipkg brand enhancements for SNAP support
<gerald.jelinek@sun.com>
parents:
diff changeset
   132
}