e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# CDDL HEADER START
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# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# See the License for the specific language governing permissions
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# and limitations under the License.
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# CDDL HEADER END
aaf50cd7b192ad1851a354c30d96acc96ae2839f# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekm_zfs=$(gettext "A ZFS file system was created for the zone.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekm_usage=$(gettext "solaris10 brand usage:\n\tattach [-a archive | -d directory | -r recv_type]\n\tThe -a archive option specifies an archive name which can be a flar,\n\ttar, pax or cpio archive.\n\tThe -d directory option specifies an existing directory.\n\tThe -r recv_type option specifies the type of archive to be read from\n\tstdin.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekinstall_fail=$(gettext "*** Attach FAILED ***")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekf_n_unimpl=$(gettext "The -n option is not yet implemented.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekf_zfs=$(gettext "Error creating a ZFS file system (%s) for the zone.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekf_nodataset=$(gettext "Error: there is no ZFS file system for the zone.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekf_zfsdestroy=$(gettext "Error destroying ZFS file system %s.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekf_sanity_notzone=$(gettext "Error: this is a system image and not a zone image.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekf_baddir=$(gettext "Invalid '%s' directory within the zone")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# Clean up on interrupt
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek msg=$(gettext "Installation cancelled due to interrupt.")
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# If the attach failed then clean up the ZFS datasets we created.
aaf50cd7b192ad1851a354c30d96acc96ae2839f if [[ $EXIT_CODE != $ZONE_SUBPROC_OK && $rm_ds == 1 ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek /usr/lib/brand/solaris10/uninstall $ZONENAME $ZONEPATH -F
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# If we weren't passed at least two arguments, exit now.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# XXX shared/common script currently uses lower case zonename & zonepath
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekshift; shift # remove ZONENAME and ZONEPATH from arguments array
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# Other brand attach options are invalid for this brand.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if [[ -n "$inst_type" ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if [[ -n "$inst_type" ]]; then
aaf50cd7b192ad1851a354c30d96acc96ae2839f # '-d -' means use the existing zonepath.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek if [[ -n "$inst_type" ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekif [[ $noexecute == 1 && -n "$inst_type" ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # The zone doesn't have to exist when the -n option is used, so do
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # this work early.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # XXX do the sw validation for solaris10 minimal patch level to ensure
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # everything will be ok.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekif [[ -z "$inst_type" ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # If we're not using a pre-existing zone directory layout then create
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek # the zone datasets and mount them.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek zds=$(/usr/sbin/zfs list -H -t filesystem -o name $pdir 2>/dev/null)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# The zone's datasets are now in place, validate that things
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# are setup correctly.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek/usr/sbin/zfs list -H -o name $ZONEPATH_DS/ROOT >/dev/null 2>&1
090f667debfb7792a579172d3f173753762ee29aif [ ! -d $ZONEROOT ]; then
090f667debfb7792a579172d3f173753762ee29a mount -F zfs $ACTIVE_DS $ZONEROOT || fail_fatal "$f_zfs_mount"
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald JelinekLOGFILE=$(/usr/bin/mktemp -t -p /var/tmp $zonename.attach_log.XXXXXX)
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekif [[ -z "$LOGFILE" ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# Perform a final check that this is really a zone image and not an archive of
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# a system image which would need p2v. Check for a well-known S10 SMF service
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinek# that shouldn't exist in a zone.
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekif [[ -e $ZONEROOT/var/svc/manifest/system/sysevent.xml ]]; then
e71ca95ca6de23d33b54cb55cefdef30bc7c969bGerald Jelinekzone_logfile="${logdir}/$zonename.attach$$.log"