manifest-import revision 293e3ab30a546cd932ee22f9d54b3979fcb52095
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#!/bin/ksh
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# CDDL HEADER START
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# The contents of this file are subject to the terms of the
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Common Development and Distribution License (the "License").
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# You may not use this file except in compliance with the License.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# or http://www.opensolaris.org/os/licensing.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# See the License for the specific language governing permissions
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# and limitations under the License.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# When distributing Covered Code, include this CDDL HEADER in each
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# If applicable, add the following below this CDDL HEADER, with the
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# fields enclosed by brackets "[]" replaced with your own identifying
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# information: Portions Copyright [yyyy] [name of copyright owner]
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# CDDL HEADER END
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 0a Initialization.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync[ -f /lib/svc/share/smf_include.sh ] || exit 1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync. /lib/svc/share/smf_include.sh
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncactivity=false
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncEMI_SERVICE="svc:/system/early-manifest-import:default"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncPROFILE_DIR_SITE="/etc/svc/profile/site"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncX=
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncALT_REPOSITORY=
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncALT_MFST_DIR=
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncearly=false
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync[ "$SMF_FMRI" == "$EMI_SERVICE" ] && early=true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncusage()
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync{
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Usage: /lib/svc/method/manifest-import [-n]" \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync "[-f repository-file -d manifest-directory]"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "\nOptions:"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "-n dryrun"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "-f and -d specify alternate repository and" \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync "manifest directory for import\n"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync exit 2
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncwhile getopts "nd:f:" opt; do
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync case $opt in
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync n) X=echo;;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync d) ALT_MFST_DIR=$OPTARG;;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync f) ALT_REPOSITORY=$OPTARG;;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ?) usage;;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync esac
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncdone
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Both -f and -d options must be specified together or not specified at all
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync[ -n "$ALT_REPOSITORY" -a -z "$ALT_MFST_DIR" ] && usage
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync[ -n "$ALT_MFST_DIR" -a -z "$ALT_REPOSITORY" ] && usage
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction svccfg_apply {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync $X /usr/sbin/svccfg apply $1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $? -ne 0 ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "WARNING: svccfg apply $1 failed" | tee /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# If the smf/manifest table has file entries that are missing
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# then there is work to be done by the cleanup process.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction cleanup_needwork {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ "$early" == true ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync smfmfiles=`/usr/bin/svcprop smf/manifest | \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync awk '(/^lib_/ && /\/manifestfile /) {print $3}'`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync else
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync smfmfiles=`/usr/bin/svcprop smf/manifest | \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync awk '/\/manifestfile / {print $3}'`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync nw=`/lib/svc/bin/mfstscan $smfmfiles 2>&1 1>/dev/null`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ "$nw" ] && return 1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return 0
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Upon upgrading to early manifest import code, preserve hashes of system
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# profiles which lived under /var/svc/profile so that svccfg apply would
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# not re-apply the profiles and overwrite user customizations. Simply
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# migrate manifestfile and hash values to new property groups named after
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# profiles under /etc/svc/profile. If the profiles don't really exist,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# svccfg cleanup will remove the property groups in a later step.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Existing generic.xml, inetd_services.xml, and name_service.xml symlinks
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# need to be preserved.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Don't process site.xml profile since it is still supported under
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# /var/svc/profile directory.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction preserve_system_profiles {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # If /var is a separate fs, return and let Late Import
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # preserves the hashes.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -d "/var/svc/profile" ] || return 1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Preserve hashes for the following profiles: generic (two
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # cases) and platform (uname -i, uname -m outputs).
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync gn="var_svc_profile_generic_open_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync gh=`/usr/bin/svcprop -p ${gn}/md5sum smf/manifest 2>/dev/null`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ $? = 0 ] || gh=""
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync gn="etc_svc_profile_generic_open_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync gln="var_svc_profile_generic_limited_net_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync glh=`/usr/bin/svcprop -p ${gln}/md5sum smf/manifest 2>/dev/null`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ $? = 0 ] || glh=""
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync gln="etc_svc_profile_generic_limited_net_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync LC_ALL=C pl=`/usr/bin/uname -i | /usr/bin/tr , _`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync pln="var_svc_profile_platform_${pl}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync plh=`/usr/bin/svcprop -p ${pln}/md5sum smf/manifest 2>/dev/null`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ $? = 0 ] || plh=""
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync pln="etc_svc_profile_platform_${pl}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync LC_ALL=C plm=`/usr/bin/uname -m | /usr/bin/tr , _`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $plm != $pl ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync plmn="var_svc_profile_platform_${plm}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync plmh=`/usr/bin/svcprop -p ${plmn}/md5sum smf/manifest \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync 2>/dev/null`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ $? = 0 ] || plmh=""
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync plmn="etc_svc_profile_platform_${plm}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync else
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync plmh=""
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -n "$gh" ] && {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Preserving generic hash ($gh)."
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest addpg ${gn} framework
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop ${gn}/md5sum = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync opaque: $gh
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop ${gn}/manifestfile = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync astring: "/etc/svc/profile/generic.xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync }
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -n "$glh" ] && {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Preserving generic_limited hash ($glh)."
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest addpg ${gln} framework
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop ${gln}/md5sum = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync opaque: $glh
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop ${gln}/manifestfile = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync astring: "/etc/svc/profile/generic.xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync }
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -n "$plh" ] && {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Preserving platform hash ($plh)."
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest addpg $pln framework
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop $pln/md5sum = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync opaque: $plh
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop ${pln}/manifestfile = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync astring: "/etc/svc/profile/platform_${pl}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync }
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -n "$plmh" ] && {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Preserving platform hash ($plmh)."
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest addpg $plmn framework
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop $plmn/md5sum = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync opaque: $plmh
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg -s smf/manifest setprop \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ${plmn}/manifestfile = \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync astring: "/etc/svc/profile/platform_${plm}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync }
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Move symlinks from /var/svc/profile to /etc/svc/profile
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync generic_prof="/var/svc/profile/generic.xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ns_prof="/var/svc/profile/name_service.xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync inetd_prof="/var/svc/profile/inetd_services.xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync platform_prof="/var/svc/profile/platform.xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -L "$generic_prof" ] && mv $generic_prof /etc/svc/profile/
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -L "$ns_prof" ] && mv $ns_prof /etc/svc/profile/
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -L "$inetd_prof" ] && mv $inetd_prof /etc/svc/profile/
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -L "$platform_prof" ] && mv $platform_prof /etc/svc/profile/
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return 0
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 2. Manifest import. Application directories first, then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# site-specific manifests.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction import_manifests {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync typeset basedir=$1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync typeset console_print=$2
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync typeset logf="/etc/svc/volatile/manifest_import.$$"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync rm -f $logf
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync nonsite_dirs=`/usr/bin/find $basedir/* -name site \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -prune -o -type d -print -prune`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -n "$_MFST_DEBUG" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync nonsite_manifests=`/lib/svc/bin/mfstscan $nonsite_dirs`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync site_manifests=`/lib/svc/bin/mfstscan $basedir/site`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync manifests="$nonsite_manifests $site_manifests"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Changed manifests to import:"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync for m in $manifests; do echo " $m"; done
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Upon boot, attempt to move the repository to tmpfs.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -z "$ALT_REPOSITORY" -a -z "$ALT_MFST_DIR" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svcadm _smf_repository_switch fast
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Import the manifests while giving a running display of imports on
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # console, and a final count in the logfile.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync dirs="$nonsite_dirs"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -d "$basedir/site" ] && dirs="$dirs $basedir/site"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ "$console_print" = "true" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync $X /usr/sbin/svccfg import -p /dev/msglog $dirs > $logf 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync else
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync $X /usr/sbin/svccfg import $dirs > $logf 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync grep "Loaded .*. smf(5) service descriptions" $logf > /dev/null 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $? -eq 0 ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync activity=true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -s $logf ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync grep "smf(5) service descriptions failed to load" $logf > /dev/null 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync failures=$?
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $failures -eq 0 ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "svccfg warnings:"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync cat $logf
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $failures -eq 0 -a "$console_print" = "true" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync msg="svccfg import warnings. See"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync msg="$msg /var/svc/log/system-manifest-import:default.log ."
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo $msg > /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync rm -f $logf
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 3. Profile application. We must create the platform profile upon
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# first boot, as we may be a diskless client of a platform or
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# architecture distinct from our NFS server.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Generic and platform profiles are only supported in /etc.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction apply_profile {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # If smf/manifest doesn't have any profile under /etc/var/profile,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # this is very likely an import after upgrade so call
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # preserve_system_profiles in that case.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync LC_ALL=C pl=`/usr/bin/uname -i | /usr/bin/tr , _`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync pln="etc_svc_profile_platform_${pl}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync LC_ALL=C plm=`/usr/bin/uname -m | /usr/bin/tr , _`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ $plm != $pl ] && plmn="etc_svc_profile_platform_${plm}_xml"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync preserve_profiles=1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync for prof in $pln $plmn etc_svc_profile_platform_none_xml \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync etc_svc_profile_generic_limited_net_xml \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync etc_svc_profile_generic_open_xml; do
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if /usr/bin/svcprop -p $prof smf/manifest >/dev/null 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync preserve_profiles=0
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync break
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync done
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $preserve_profiles -eq 1 ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "/etc/svc system profiles not found: upgrade system profiles"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync preserve_system_profiles || return
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync typeset prefix="/etc/svc/profile"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync svccfg_apply $prefix/generic.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ ! -f $prefix/platform.xml ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync this_karch=`uname -m`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync this_plat=`uname -i`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -f $prefix/platform_$this_plat.xml ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync platform_profile=platform_$this_plat.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync elif [ -f $prefix/platform_$this_karch.xml ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync platform_profile=platform_$this_karch.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync else
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync platform_profile=platform_none.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ln -s $platform_profile $prefix/platform.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync svccfg_apply $prefix/platform.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 4. Upgrade handling. The upgrade file generally consists of a series
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# of svcadm(1M) and svccfg(1M) commands.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction handle_upgrade {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -f /var/svc/profile/upgrade ] && activity=true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync unset SVCCFG_CHECKHASH
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -f /var/svc/profile/upgrade ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync . /var/svc/profile/upgrade
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/mv /var/svc/profile/upgrade \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /var/svc/profile/upgrade.app.`date +\%Y\%m\%d\%H\%M\%S`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Rename the datalink upgrade script file. This script is used in the
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # network/physical service to upgrade datalink configuration, but
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # the file cannot be renamed until now (when the file system becomes
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # read-write).
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync datalink_script=/var/svc/profile/upgrade_datalink
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -f "${datalink_script}" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/mv "${datalink_script}" \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync "${datalink_script}".app.`date +\%Y\%m\%d\%H\%M\%S`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync )
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 5. Giving administrator the final say, apply site.xml profile and profiles
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# under /etc/svc/profile/site directory.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfunction apply_site_profile {
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync typeset prefix="$1"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync [ -f $prefix/site.xml ] && svccfg_apply $prefix/site.xml
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -d $PROFILE_DIR_SITE -a "$1" = "/etc/svc/profile" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync svccfg_apply $PROFILE_DIR_SITE
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync}
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 0b Cleanup deathrow
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif [ "$early" = "false" ];then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync deathrow=/etc/svc/deathrow
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -s $deathrow ];then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # svc.startd has unconfigured the services found in deathrow,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # clean them now.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync while read fmri mfst pkgname; do
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Delete services and instances from the deathrow file.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg delete -f $fmri >/dev/null 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Remove deathrow manifest hash.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg delhash -d $mfst >/dev/null 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync done < $deathrow
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/mv $deathrow $deathrow.old
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncSVCCFG_CHECKHASH=1 export SVCCFG_CHECKHASH
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 0c Clean up repository
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif [ "$early" = "false" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ -z "$X" ] && /usr/bin/svcprop smf/manifest 2>/dev/null |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/grep '^ar_svc_[^/]*/md5sum opaque ' >/dev/null
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync set -- `
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/svcprop smf/manifest 2>/dev/null |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/grep '^ar_svc[^/]*/md5sum opaque ' |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/bin/tr '/' ' ' |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync while read pg prop type value; do
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "$pg/$value"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync done
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync `
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync backup=`echo "$#/$#" | sed 's/.//g'`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fwidth=`echo "$#\c" | wc -c`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Converting obsolete repository entries: \c" > /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync i=1; n=$#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync while [ $# -gt 0 ]; do
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync printf "%${fwidth}s/%${fwidth}s" $i $n > /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo $1 | sed 's:/: :' | (
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync read pg value
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (echo "select /smf/manifest"; echo "delpg v$pg") |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg 2>/dev/null >/dev/null
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (echo "select /smf/manifest"; echo "delpg $pg") |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg 2>/dev/null >/dev/null
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (echo "select /smf/manifest";
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "addpg v$pg framework") |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg 2>/dev/null >/dev/null
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (echo "select /smf/manifest";
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "setprop v$pg/md5sum = opaque: $value") |
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg 2>/dev/null >/dev/null
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync )
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync i=`expr $i + 1`
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync shift
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "$backup\c" > /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync done
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo > /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Converted $n obsolete repository entries"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync activity=true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# If the alternate repository and directory are specified, simply set
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# SVCCFG_REPOSITORY env, run svccfg import on the given directory, and
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# exit.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif [ -n "$ALT_REPOSITORY" -a -n "$ALT_MFST_DIR" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync SVCCFG_REPOSITORY=$ALT_REPOSITORY export SVCCFG_REPOSITORY
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync import_manifests "$ALT_MFST_DIR" false
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync unset SVCCFG_REPOSITORY
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync exit 0
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# Call import and apply profiles here
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif [ "$early" = "true" ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync import_manifests "/lib/svc/manifest" true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync apply_profile
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync apply_site_profile "/etc/svc/profile"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncelse
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Process both /lib/svc/manifest and /var/svc/manifest
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # during late manifest-import
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # First import the manifests
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync import_manifests "/lib/svc/manifest" true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync import_manifests "/var/svc/manifest" true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Apply profiles
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync apply_profile
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync apply_site_profile "/etc/svc/profile"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync # Run the upgrade script
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync #
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync handle_upgrade
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync apply_site_profile "/var/svc/profile"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# 6. Final actions.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif $activity; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svcadm _smf_backup "manifest_import" || true
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# If the filesystem is NOT read only then move the repo back to perm
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# There is no care wether the switch was made or not, but just want
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# to move it. If it is already perm this does not affect anything
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync# at least on the surface. REALLY want to improve on this...
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync#
1b33c96954667ba382fa595baf7b31290bfdd517vboxsynctouch /etc/svc/smf_rwtest.$$ > /dev/null 2>&1
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif [ $? -eq 0 ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync rm -f /etc/svc/smf_rwtest.$$
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svcadm _smf_repository_switch perm || { \
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "Repository switch back operation failed, \c"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "please check the system log for the"
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync echo "possible fatal error messages."
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync exit $SMF_EXIT_ERR_FATAL
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync }
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncif $activity; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg cleanup | /usr/bin/tee /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncelse
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync cleanup_needwork
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if [ $? -ne 0 ]; then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync /usr/sbin/svccfg cleanup -a | /usr/bin/tee /dev/msglog
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync fi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncfi
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncexit 0
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync