# NGZ install # ... function checkPkgAction { typeset -n ACTION=$1 TAG=$2 if [[ ! ${ACTION} =~ ^(install|uninstall|avoid|unavoid|reject)$ ]]; then Log.fatal "$3() expects as first argument either 'install'," \ "'uninstall', 'avoid', 'unavoid' or 'reject'" exit 2 fi if [[ ${ACTION} == 'reject' ]]; then TAG=${ uname -v ; } if [[ ${TAG} == '11.0' ]]; then # 11.0 AI does not support pkg install --reject ACTION='uninstall' TAG='name' else # since 11.1 ACTION='install' TAG='reject' fi else TAG='name' fi } # ... function installZone { Log.info 'Preprocessing manifest for AI ...' # since "smart" AI developers do not use a real XML parser (but other # bogus stuff)/ is unable to handle valid XML manifests, we need to make # sure to feed something, what it can handle... cat >$TMPDIR/manifest.xslt< EOF xsltproc -o $MANIFEST.$$ $TMPDIR/manifest.xslt $MANIFEST Log.info "Installing zone $ZNAME ..." # install [-m manifest] [-c profile.xml | dir] # install {-a archive|-d path} {-p|-u} [-s|-v] [-c profile.xml | dir] zoneadm -z $ZNAME install -c ${PROFILE_DIR}/ -m $MANIFEST.$$ #... } # GZ install stuff # ... function createManifest { . getClientConfig typeset MF=${ mktemp -t example.XXXXXX; } [[ -z "${MF}" ]] && exit 1 typeset CONSDEF=${ getConsoleDefs "${C_CONS}"; } cat >${MF}< (single user) -s -v -B \$ZFS-BOOTFS,${CONSDEF} (default) -v -B \$ZFS-BOOTFS,${CONSDEF} EOF typeset -a DISKS=( ) integer I=0 K if [[ -n ${C_DISK} ]]; then typeset D1=${C_DISK#*;} D0 D X if [[ ${D1} != ${C_DISK} ]]; then X=${.sh.match} D0=${X%;} X=${D1#*;} if [[ $X != ${D1} ]]; then D1=${.sh.match} D1=${D1%;} else D1=$X fi fi for D in ${D0} ${D1} ; do if [[ $D == 'boot_disk' ]]; then DISKS[$I]='' else X=${D%%:*} if [[ $X =~ ^(ctd|volid|devpath|devid|receptacle|wwn)$ ]]; then DISKS[$I]='' else Log.fatal "Ungültiger disk typ $X - nur (ctd|volid|devpath|d evid|receptacle|wwn) sind erlaubt." exit 1 fi fi I=$((I+1)) done fi for (( K=0; K < I; K++ )); do cat >>$MF< ${DISKS[$K]} EOF done cat >>${MF}< EOF integer MAX=${#C_LOCALE[@]} if [[ ${MAX} == 1 && ${C_LOCALE[0]} == 'ALL' ]]; then print 'facet.locale.*' >>${MF} else print 'facet.locale.*' >>${MF} for (( i=0; i < MAX; i++ )); do print "facet.locale.${C_LOCALE[$i]}" \ >>${MF} done fi MAX=${#C_NODOCS[@]} for (( I=0; I < MAX; I++ )); do print "facet.${C_NODOCS[$I]}" >>${MF} done X='/group/system/solaris-small-server' # [[ $C_TYPE != server ]] && X='/group/system/solaris-large-server' [[ ${C_TYPE} != 'server' ]] && X='/group/system/solaris-desktop' (( ${XFER} != ${HTTP} && ${XFER} != ${NFS} )) && XFER=${HTTP} [[ ${C_DEVISION} == 'iws' ]] && (( XFER+=2 )) Log.info "Benutze entire@${PKG_REL} package ..." cat >>$MF<flush-content-cache-on-success pkg:/entire@${PKG_REL} pkg:$X EOF # make packages uniq typeset -A PKG2ADD typeset -A PKG2DEL MAX=${#C_ADDPKG[@]} for (( I=0; I < MAX; I++ )); do PKG2ADD[${C_ADDPKG[$I]}]=1 done MAX=${#C_DELPKG[@]} for (( I=0; I < MAX; I++ )); do PKG2DEL[${C_DELPKG[$I]}]=1 done typeset PKG for PKG in "${!PKG2ADD[@]}"; do print "pkg:${PKG}" >>${MF} done print '' >>${MF} MAX=${#PKG2DEL[@]} if (( MAX )); then # neither reject nor avoid works reliable # if [[ ${ uname -v ; } == '11.0' ]]; then print '' >>${MF} # else # print '' >>${MF} # fi for PKG in "${!PKG2DEL[@]}"; do print "pkg:${PKG}" >>${MF} done print '' >>${MF} fi cat >>${MF}< pkg:/primary-admin pkg:/first-boot-script EOF print "${MF}" } # ...