Print this page
        
*** 8,194 ****
  # A full copy of the text of the CDDL should have accompanied this
  # source.  A copy of the CDDL is also available via the Internet at
  # http://www.illumos.org/license/CDDL.
  #
  # Copyright 2016 Joyent, Inc.  All rights reserved.
  #
  
- #
- # This is only an example install script. It is not currently used for anything.
- #
- 
  PATH=/bin:/usr/bin:/usr/sbin
  export PATH
  
! fullpath()
! {
!         typeset path="$1"
  
!         echo $path | egrep -s "^/" || path="${PWD:=$(pwd)}/$path"
!         echo $path
! }
  
! makedir()
! {
!         typeset dirname=$(fullpath "$1")
!         typeset mode=""
! 
!         [[ $# -eq 2 ]] && mode="-m $2"
! 
!         [[ -d "$dirname" ]] && return
! 
!         if ! mkdir $mode -p "$dirname"; then
!                 echo $(gettext "Aborting installation...")
!                 exit 255
!         fi
  }
  
! symlink()
! {
!         typeset src="$1"
!         typeset dst=$(fullpath "$2")
  
!         [[ -e "$dst" || -h "$dst" ]] && rm -f "$dst"
          
!         if ! ln -s "$src" "$dst"; then
!                 echo $(gettext "Aborting installation...")
!                 exit 255
!         fi
! }
  
! install_ln()
! {
!         typeset source="$1"
!         typeset target=$(fullpath "$2")
  
!         log "    Installing \"$target\""
  
!         mv -f "$target" "$target.$tag" 2>/dev/null
! 
!         if ! ln -s "$source" "$target"; then
!                 return 1
          fi
  
!         return 0
! }
! 
! # If we weren't passed 3 arguments, exit now.
! [[ $# -lt 3 ]] && exit 254
! 
! # Extract the brand directory name from the path.
! branddir=$(dirname "$0")
! zonename="$1"
! zoneroot="$2"
! install_src="3"
! install_root="$zoneroot/root"
! ZPOOL=`df $ZONEROOT | awk -F '[()]' '{split($2, field, "/"); print field[1]; }'`
! if [ -z "$ZPOOL" ]; then
!         ROOTDEV="none"
  else
!         ROOTDEV="/dev/$ZPOOL"
! fi
  
! if [[ ! -f "$install_src" ]]; then
!         echo "$install_src: file not found\n"
!         exit 254
! fi
! 
! if [[ ! -d "$install_root" ]]; then
!         if ! mkdir -p "$install_root" 2>/dev/null; then
!                 echo "Could not create install directory $install_root"
!                 exit 254
          fi
- fi
  
! if ! ( cd "$install_root" && gtar -xzf "$install_src" ) ; then
!         echo "Error: extraction from tar archive failed"
!         exit 255
! fi
! 
! tag="lxsave_$(date +%m.%d.%Y@%T)"
! 
! if [[ ! -d "$install_root" ]]; then
!         exit 255
! fi
! 
! cd "$install_root"
! 
! makedir native/dev
! makedir native/etc/default
! makedir native/etc/svc/volatile
! makedir native/lib
! makedir native/proc
! makedir native/tmp 1777
! makedir native/usr
! makedir native/var
! 
! makedir mnt
! makedir opt
! makedir usr/local/bin
! makedir usr/local/include
! makedir usr/local/lib
! makedir usr/local/sbin
! makedir usr/local/share
! makedir usr/local/src
! 
! makedir dev 0755
! makedir tmp 1777
! makedir proc 0555
! makedir boot 0755
! 
! symlink /bin/sh sbin/sh
! symlink /bin/su usr/bin/su
! symlink /native/usr/lib/ld.so.1 usr/lib/ld.so.1
! 
! libpam_so="$(echo lib/libpam.so.0.*)"
! libpam_misc="$(echo lib/libpam_misc.so.0.*)"
! libpamc_so="$(echo lib/libpamc.so.0.*)"
! 
! symlink "/$libpam_so" lib/libpam.so.0
! symlink "/$libpam_misc" lib/libpam_misc.so.0
! symlink "/$libpamc_so" lib/libpamc.so.0
! 
! makedir var/ld
! 
! if ! crle -c var/ld/ld.config -l /native/lib:/native/usr/lib \
!      -s /native/lib/secure:/native/usr/lib/secure; then
!         exit 255
! fi
! 
! mv -f etc/fstab etc/fstab.$tag 2>/dev/null
! 
! cat > etc/fstab <<- EOF
!         $ROOTDEV        /                       zfs     defaults        1 1
!         proc            /proc                   proc    defaults        0 0
! EOF
! 
! if [[ $? -ne 0 ]]; then
!         exit 255
! fi
! 
! if [[ ! -e "$install_root/etc/hosts" ]]; then
!         cat > "$install_root/etc/hosts" <<-_EOF_
!                 127.0.0.1               localhost
!         _EOF_
! fi
! 
! #
! # Perform distribution-specific changes.
! #
! distro=""
! if [[ -f etc/redhat-release ]]; then
!         distro="redhat"
! elif [[ -f etc/lsb-release ]]; then
!         if egrep -s Ubuntu etc/lsb-release; then
!                 distro="ubuntu"
!         elif [[ -f etc/debian_version ]]; then
!                 distro="debian"
          fi
- elif [[ -f etc/debian_version ]]; then
-         distro="debian"
  fi
  
! if [[ -z $distro ]]; then
!         exit 255
! fi
  
  exit 0
--- 8,137 ----
  # A full copy of the text of the CDDL should have accompanied this
  # source.  A copy of the CDDL is also available via the Internet at
  # http://www.illumos.org/license/CDDL.
  #
  # Copyright 2016 Joyent, Inc.  All rights reserved.
+ # Copyright 2016 OmniTI Computer Consulting, Inc.  All rights reserved.
  #
  
  PATH=/bin:/usr/bin:/usr/sbin
  export PATH
  
! . /usr/lib/brand/shared/common.ksh
  
! ZFS_SEED=""
! TAR_SEED=""
  
! bad_usage() {
!         echo "LX zone install bad option"
!         echo "Available options are:"
!         echo "  -s <absolute-pathname>  Path to ZFS send stream or gzip thereof"
!         echo "  -t <absolute-pathname>  Path to tar archive or gzip thereof"
!         exit $ZONE_SUBPROC_USAGE
  }
  
! while getopts "R:s:t:z:" opt
! do
!         case "$opt" in
!                 R)      ZONEPATH="$OPTARG";;
!                 z)      ZONENAME="$OPTARG";;
!                 s)      ZFS_SEED="$OPTARG";;
!                 t)      TAR_SEED="$OPTARG";;
!                 *)      bad_usage ;;
!         esac
! done
! shift OPTIND-1
  
! if [[ $ZFS_SEED == "" && $TAR_SEED == "" ]]; then
!     echo "The -s <absolute-pathname> argument or the -t <absolute-pathname>"
!     echo "argument is required for LX installation."
!     bad_usage
! fi
  
! if [[ $ZFS_SEED != "" && $TAR_SEED != "" ]]; then
!     echo "You must only specify one of -s or -t for LX installation."
!     bad_usage
! fi
  
! # Set the ZONEPATH_DS variable so we know the zone's dataset.
! get_zonepath_ds $ZONEPATH
  
! # Do something based on whatever ZFS_SEED is.
  
! if [[ -f $TAR_SEED ]]; then
!     type=`file -b $TAR_SEED | awk '{print $1}'`
!     if [[ $type == "gzip" ]]; then
!         args="-xzf"
!     else
!         args="-xf"
      fi
+     cd $ZONEPATH
+     # Be very precise about permissions and ownership.
+     mkdir -m 0755 dev
+     chgrp sys dev
+     mkdir -m 0755 root
+     chgrp root sys
+     cd root
+     gtar $args $TAR_SEED
+     exit 0
+ elif [[ ! -f $ZFS_SEED ]]; then
+     # Try and eat a snapshot or a filesystem.
+     outstr=`zfs list -Ht filesystem $ZFS_SEED 2>/dev/null | awk '{print $1}'`
+     if [[ $outstr == $ZFS_SEED ]]; then
+         # We have a zfs filesystem name.
+         # Snapshot it using today's date/time
+         snapname=`date -u "+%Y-%m-%d:%H:%M:%S"`
+         ZFS_SEED=$ZFS_SEED@$snapname
+         zfs snapshot $ZFS_SEED
+         if [[ $? != 0 ]]; then
+             echo "ZFS snapshot ($ZFS_SEED) command failed ($?)."
+             exit $ZONE_SUBPROC_FATAL
+         fi
+         # else continue on with the new snapshot...
+     fi
  
!     outstr=`zfs list -Ht snapshot $ZFS_SEED 2>/dev/null | awk '{print $1}'`
!     if [[ $outstr == $ZFS_SEED ]]; then
!         # Hmmm, we found a snapshot name!
!         echo "Cloning from snapshot $ZFS_SEED"
!         # zoneadm already created $ZONEPATH_DS, destroy it before we clone.
!         zfs destroy $ZONEPATH_DS
!         zfs clone $ZFS_SEED $ZONEPATH_DS
!         if [[ $? != 0 ]]; then
!             echo "ZFS clone ($ZFS_SEED to $ZONEPATH_DS) failed ($?)."
!             exit $ZONE_SUBPROC_FAIL
!         fi
!         # zfs promote $ZONEPATH_DS
!         # if [[ $? != 0 ]]; then
!         #    echo "ZFS promote ($ZONEPATH_DS) failed ($?)."
!         #    exit $ZONE_SUBPROC_FAIL
!         # fi
!     else 
!         echo "Seed file $ZFS_SEED $TAR_SEED not found."
!         bad_usage
!     fi
  else
!     type=`file -b $ZFS_SEED | awk '{print $1}'`
  
!     # For now, we are dependent on the output of file(1).
!     # I'm being cheesy in checking the first word of file(1)'s output.
!     if [[ $type == "ZFS" ]]; then
!         zfs recv -F $ZONEPATH_DS < $ZFS_SEED
!     elif [[ $type == "gzip" ]]; then
!         gunzip -c $ZFS_SEED | zfs recv -F $ZONEPATH_DS
!     else
!         echo "Seed file $ZFS_SEED not a ZFS receive (or compressed) one."
!         bad_usage
      fi
  
!     if [[ $? != 0 ]]; then
!         echo "ZFS receive command failed ($?)."
!         exit $ZONE_SUBPROC_FATAL
      fi
  fi
  
! # One Joyent-ism we need to clean up.
! rmdir $ZONEPATH/cores
! # And one we should probably adopt.
! zfs set devices=off $ZONEPATH_DS
  
  exit 0