#!/bin/ksh - # $Id: install.sxxu,v 1.20 2013/04/20 21:36:26 andrew Exp $ # Copyright (c) 2010 Andrew Fresh # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # based on (and some parts taken from) siteXXtools/install.site # Copyright (c) 2006 Alex Holst BASEDIR=/var/siteXX useradd_args="-m -gid =uid" [ -e $BASEDIR/siteXXrc ] && . $BASEDIR/siteXXrc export PKG_PATH do_pre() { echo 'Running post install from sxxu' } do_post() { echo 'See /var/log/install.log for install messages.' } process_roles() { local _oldpwd="${PWD}" cd "${BASEDIR}" if [ ! -e roles ]; then echo 'No roles defined.' exit fi local _roles unset _roles set -A _roles local _role while read _role; do if [ -n "${_role}" ]; then _role=${_role%%#*} # strip comments test -z "$_role" && continue _roles[${#_roles[@]}]="$_role" fi done < roles for _role in "${_roles[@]}"; do apply_role "$_role" done cd "${_oldpwd}" } append_pkg_path() { [ -e pkg_path -o -d packages ] || return echo ' ==> Setting PKG_PATH' [ -d packages ] && PKG_PATH="${PKG_PATH}:${PWD}/packages" [ -e pkg_path ] || return; local _line while read _line; do _line=${_line%%#*} # strip comments [ -z "$_line" ] && continue PKG_PATH="${PKG_PATH}:${_line}" done < pkg_path PKG_PATH=`eval echo $PKG_PATH | sed -e 's/^:*//'` } run_command_lists() { local _f for _f in *_list; do [ ! -f "${_f}" ] && continue local _cmd=`basename "${_f%_list}"` local _args=`eval echo \\${${_cmd}_args}` echo " ==> Running $_cmd $_args" local _line while read _line; do _line=${_line%%#*} # strip comments test -z "$_line" && continue echo " => ${_cmd} ${_args} ${_line}" eval ${_cmd} ${_args} ${_line} done < "${_f}" done } apply_patches() { [ ! -d patches ] && return echo ' ==> Applying patches' local _p for _p in patches/*; do [ X"patches/*" == X"${_p}" ] && continue echo " => $_p" # -N Always assume a forward patch. # -t Never prompt; assume the user is expert # -p0 full path, always patch -N -t -p0 -d / < "$_p" done } install_packages() { [ ! -d packages ] && return echo ' ==> Installing packages' find packages -name '*.tgz' -print0 | xargs -0 pkg_add ${pkg_add_args} } apply_role() { local _role="$1" local _oldpwd="${PWD}" local _rolepwd="${BASEDIR}/${_role}" if [ ! -d "${_rolepwd}" ]; then echo "===> Missing ${_role}" return fi echo "===> Applying role ${_role}" cd "${_rolepwd}" if [ -e ./siteXXrc ]; then echo ' ==> Including siteXXrc' . ./siteXXrc fi cd "${_rolepwd}" && append_pkg_path cd "${_rolepwd}" && run_command_lists cd "${_rolepwd}" && apply_patches cd "${_rolepwd}" && install_packages cd "${_rolepwd}" if [ -e ./install.site ]; then if [ -x ./install.site ]; then echo ' ==> Running install.site' ./install.site else echo ' ==> Including install.site' . ./install.site fi fi cd "${_oldpwd}" } if [ ! -d "${BASEDIR}" ]; then echo Nothing to do. exit fi do_pre 2>&1 | /usr/bin/tee /var/log/install.log process_roles 2>&1 | /usr/bin/tee -a /var/log/install.log | grep '^...>' do_post 2>&1 | /usr/bin/tee -a /var/log/install.log