version 1.2, 2010/04/20 18:25:55 |
version 1.17, 2010/04/23 22:14:22 |
|
|
#!/bin/sh |
#!/bin/ksh - |
# $Id$ |
# $Id$ |
|
|
# Copyright (c) 2010 Andrew Fresh <andrew@afresh1.com> |
# Copyright (c) 2010 Andrew Fresh <andrew@afresh1.com> |
|
|
# based on (and some parts taken from) siteXXtools/install.site |
# based on (and some parts taken from) siteXXtools/install.site |
# Copyright (c) 2006 Alex Holst <a@mongers.org> |
# Copyright (c) 2006 Alex Holst <a@mongers.org> |
|
|
echo XXX THIS IS NOT IN ANY WAY SHAPE OR FORM COMPLETE XXX |
BASEDIR=/var/siteXX |
exit |
useradd_args="-m -gid =uid" |
|
[ -e /var/siteXX/siteXXrc ] && . /var/siteXX/siteXXrc |
|
|
user_add_args="-gid =uid" # Could be in .siteXYrc |
export PKG_PATH |
|
|
for _f in /var/siteXX/*/siteXXrc; do |
do_pre() { |
. "$_f" |
echo 'Running post install from sxxu' |
done |
} |
|
|
for _f in /var/siteXX/*/*_list; do |
do_post() { |
local _cmd=`basename "${_f%_list}"` |
echo 'See /var/log/install.log for install messages.' |
local _args=`eval echo \\${${_cmd}_args}` |
} |
echo Running $_cmd $_args |
|
|
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 |
|
_line=${_line%%#*} # strip comments |
|
test -z "$_line" && continue |
|
_roles[${#_roles[@]}]="$_role" |
|
fi |
|
done < roles |
|
|
|
for _role in "${_roles[@]}"; do |
|
apply_role "$_role" |
|
done |
|
|
|
cd "${_oldpwd}" |
|
} |
|
|
|
|
|
append_pkg_path() { |
|
[ ! -e pkg_path ] && return |
|
|
|
echo ' ==> Setting PKG_PATH' |
local _line |
local _line |
while read _line; do |
while read _line; do |
${_cmd} ${_args} ${_line} |
_line=${_line%%#*} # strip comments |
done < $f |
test -z "$_line" && continue |
done |
if [ -z "${PKG_PATH}" ]; then |
|
PKG_PATH="$_line" |
|
else |
|
PKG_PATH="${PKG_PATH}:${_line}" |
|
fi |
|
done < pkg_path |
|
|
|
PKG_PATH=`eval echo $PKG_PATH` |
|
} |
|
|
|
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 |