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