[BACK]Return to sxxu CVS log [TXT][DIR] Up to [local] / openbsd / sxxu

Annotation of openbsd/sxxu/sxxu, Revision 1.19

1.18      andrew      1: #!/bin/ksh -
                      2: #
1.2       andrew      3: # $Id$
1.18      andrew      4: #
1.5       andrew      5: # Copyright (c) 2010 Andrew Fresh <andrew@afresh1.com>
                      6: #
                      7: # Permission to use, copy, modify, and distribute this software for any
                      8: # purpose with or without fee is hereby granted, provided that the above
                      9: # copyright notice and this permission notice appear in all copies.
                     10: #
                     11: # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     12: # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     13: # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     14: # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     15: # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     16: # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     17: # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     18: #
                     19: # based on siteXXtools/generate
                     20: # Copyright (c) 2006 Alex Holst <a@mongers.org>
                     21:
1.2       andrew     22: OSREV=$(uname -r| sed 's/\.//g')
                     23: SRCDIR=`pwd`
                     24: COMMONDIR=common
                     25: RELEASEDIR=/tmp
                     26:
1.16      andrew     27: do_pre() {
                     28:     if [ -z "$WRKDIR" ]; then
                     29:         WRKDIR=`mktemp -d -t sxxu.XXXXXXXXX` || exit 1
                     30:     fi
                     31:
1.17      andrew     32:     cd ${SRCDIR}
1.16      andrew     33:     if [ ${#MACHINES[@]} -eq 0 ]; then
                     34:         local _d
                     35:         for _d in *; do
                     36:             [ ! -d "$_d" ] && continue
                     37:             [ -z "${NORECURSE}" -a "${_d#role-}" != "$_d" ] && continue
1.17      andrew     38:             MACHINES[${#MACHINES[@]}]="${_d}"
1.16      andrew     39:         done
                     40:     fi
                     41:
1.17      andrew     42:     if [ -z "${INSTALL_SITE}" ]; then
                     43:         for INSTALL_SITE in \
                     44:             "${SRCDIR}/install.siteXX" \
                     45:             "${SRCDIR}/install.site" \
                     46:             "${SAMPLE_DIR}/install.siteXX" \
                     47:             "${SAMPLE_DIR}/install.site"
                     48:         do
                     49:             [ -e "$INSTALL_SITE" ] && break
                     50:         done
                     51:     fi
                     52:
                     53:     echo "===> Running ${0##*/} with the following settings:"
                     54:     [ -e "${CONFIG_FILE}" ] && echo " Reading config from ${CONFIG_FILE}\n"
                     55:     echo " SRCDIR: ${SRCDIR}"
                     56:     echo " WRKDIR: ${WRKDIR}"
                     57:     echo " OSREV:  ${OSREV}"
                     58:     echo ''
                     59:     echo " COMMONDIR:  ${COMMONDIR}"
                     60:     echo " RELEASEDIR: ${RELEASEDIR}"
                     61:     [ -e "${INSTALL_SITE}" ] && echo " install.site source: ${INSTALL_SITE}"
                     62:     [ -n "${REGEN_MTREE}" ]  && echo " Regenerating mtree files"
1.16      andrew     63: }
                     64:
                     65: do_loop() {
1.17      andrew     66:
1.16      andrew     67:     local _machine
                     68:     for _machine in "${MACHINES[@]}"; do
1.17      andrew     69:         _machine=`basename -- "${_machine}"`
1.16      andrew     70:
1.17      andrew     71:         if [ ! -d "${SRCDIR}/${_machine}" ]; then
1.16      andrew     72:             echo ${_machine} does not exist
                     73:             continue
                     74:         fi
                     75:
                     76:         local _site=site${OSREV}
                     77:         if [ X"${_machine}" != X"${COMMONDIR}" ]; then
                     78:             _site="${_site}-${_machine}"
                     79:         fi
                     80:
1.17      andrew     81:         echo -n "===> populating: $_site"
1.16      andrew     82:
                     83:         WRKINST="${WRKDIR}/${_site}"
                     84:
1.17      andrew     85:         if [ -z "${NORECURSE}" -o ! -e "${WRKINST}" ]; then
1.18      andrew     86:             mkdir -p "${WRKINST}"
1.17      andrew     87:             echo -n "\n ==>  including:"
1.16      andrew     88:
1.18      andrew     89:             if [ -z "$NORECURSE" ]; then
1.19    ! andrew     90:                 if [ -e "${CONFIG_FILE}" ]; then
        !            91:                     echo -n ' siteXXrc'
        !            92:                     cp ${CONFIG_FILE} "$WRKINST/siteXX/siteXXrc"
        !            93:                 fi
        !            94:
1.18      andrew     95:                 if [ -e "${INSTALL_SITE}" ]; then
                     96:                     echo -n ' install.site'
                     97:                     cp ${INSTALL_SITE} "$WRKINST/install.site"
                     98:                 fi
                     99:
                    100:                 if [ X"${_machine}" != X"${COMMONDIR}" \
                    101:                     -a -d "${SRCDIR}/${COMMONDIR}" ]; then
                    102:                     include $COMMONDIR
                    103:                 fi
1.16      andrew    104:             fi
                    105:
1.18      andrew    106:             include "${_machine}"
1.16      andrew    107:         fi
                    108:
1.17      andrew    109:         if [ -n "${REGEN_MTREE}" ]; then
1.16      andrew    110:             local _mtree="${SRCDIR}/${_machine}/siteXX/mtree"
1.17      andrew    111:             echo -n "\n ==> regenerate: ${_mtree#${SRCDIR}/}"
1.16      andrew    112:
                    113:             mkdir -p "${SRCDIR}/${_machine}/siteXX" \
                    114:                 "${WRKINST}/var/siteXX/${_machine}"
                    115:             mtree -cp "${WRKINST}" -k uid,gid,mode > "$_mtree"
                    116:         fi
                    117:
                    118:         if [ -z "$NOGZIP" ]; then
                    119:             local _tgz="${RELEASEDIR}/${_site}.tgz"
1.17      andrew    120:             echo -n "\n ==>   creating: $_tgz"
1.16      andrew    121:             tar -cz -C "${WRKINST}" -f "$_tgz" .
                    122:         fi
                    123:
                    124:         echo ' . . . done'
                    125:     done
                    126: }
                    127:
                    128: do_post() {
                    129:     if [ -z "$NOREMOVE" ]; then
                    130:         rm -rf $WRKDIR
                    131:     fi
                    132: }
                    133:
                    134: copy_special() {
1.4       andrew    135:     local _src="$1"
                    136:     local _dst="$2"
1.2       andrew    137:
1.3       andrew    138:     if [ ! -d "$_src" ]; then
1.2       andrew    139:         echo "$_src does not exist!"
                    140:         return
                    141:     fi
                    142:
1.4       andrew    143:     cd "$_src"
1.3       andrew    144:     find . \( \
                    145:         -path './siteXX' \
                    146:         -o -name 'CVS' \
                    147:         -o -name '.git' \
                    148:         -o -name '.svn' \
                    149:         \) -prune -o -print \
1.2       andrew    150:     | {
                    151:         local _file
                    152:         while read _file ; do
1.3       andrew    153:             if [ -d "$_file" ]; then
                    154:                 mkdir -p "${_dst}/${_file}"
1.2       andrew    155:             else
1.3       andrew    156:                 cp "$_file" "${_dst}/${_file}"
1.2       andrew    157:             fi
                    158:         done
                    159:     }
                    160:
1.10      andrew    161:     cd "${OLDPWD}"
1.2       andrew    162: }
                    163:
1.16      andrew    164: include() {
1.4       andrew    165:     local _src="$1"
1.2       andrew    166:
                    167:     if [ X"${_src}" == X"" ]; then
1.6       andrew    168:         echo "include <dir>"
1.2       andrew    169:         return
                    170:     fi
1.4       andrew    171:     if [ ! -d "${SRCDIR}/${_src}" ]; then
1.2       andrew    172:         return
                    173:     fi
                    174:
1.12      andrew    175:     local _siteXX_src="${SRCDIR}/${_src}/siteXX"
                    176:     local _siteXX_dst="${WRKINST}/var/siteXX/${_src}"
                    177:     if [ -d "$_siteXX_dst" ]; then
1.15      andrew    178:         echo -n " !!!${_src}!!!"
1.11      andrew    179:         return
                    180:     fi
1.12      andrew    181:     mkdir -p "$_siteXX_dst"
1.11      andrew    182:
1.18      andrew    183:     if [ -d "$_siteXX_src" ]; then
                    184:         if [ -z "${NORECURSE}" -a -e "${_siteXX_src}/roles" ]; then
                    185:             local _role
                    186:             while read _role; do
                    187:                 include "$_role"
                    188:             done < "${_siteXX_src}/roles"
                    189:         fi
1.2       andrew    190:
1.12      andrew    191:         copy_special "$_siteXX_src" "$_siteXX_dst"
1.3       andrew    192:
1.16      andrew    193:         if [ -z "${REGEN_MTREE}" -a -e "${_siteXX_src}/mtree" ]; then
1.13      andrew    194:             mtree -Uep "${WRKINST}" < "${_siteXX_src}/mtree" > /dev/null
                    195:
                    196:             local _mtree_out=`mktemp`
                    197:             mtree -ep "${WRKINST}" < "${_siteXX_src}/mtree"  > $_mtree_out
                    198:             if [ $? -ne 0 ]; then
1.16      andrew    199:                 echo "\nMTREE PROBLEMS"
1.13      andrew    200:                 cat $_mtree_out
                    201:             fi
                    202:             rm -f $_mtree_out
1.12      andrew    203:         fi
                    204:
1.18      andrew    205:     fi
1.12      andrew    206:
1.18      andrew    207:     echo -n " $_src"
                    208:     copy_special "${SRCDIR}/${_src}" "${WRKINST}"
1.3       andrew    209: }
1.2       andrew    210:
1.16      andrew    211: usage() {
                    212:     echo "usage: ${0##*/} [-kmR] [-w WRKDIR]  [machine1 [machine2 [...]]]" >&2
                    213: }
                    214:
1.17      andrew    215: for CONFIG_FILE in "${SRCDIR}/.siteXXrc" ~/.siteXXrc /etc/siteXX.conf; do
                    216:     [ -e "$CONFIG_FILE" ] && . "$CONFIG_FILE" && break
1.7       andrew    217: done
                    218:
1.16      andrew    219: while getopts :kmw:R arg; do
1.12      andrew    220:     case ${arg} in
1.16      andrew    221:     k)
                    222:         NOREMOVE=1
                    223:     ;;
1.12      andrew    224:     m)
                    225:         REGEN_MTREE=1
                    226:         NORECURSE=1
1.15      andrew    227:         NOGZIP=1
1.12      andrew    228:     ;;
1.13      andrew    229:     R)
                    230:         NORECURSE=1
1.15      andrew    231:         NOGZIP=1
1.13      andrew    232:     ;;
1.12      andrew    233:     w)
                    234:         WRKDIR=${OPTARG}
1.16      andrew    235:     ;;
                    236:     *)
                    237:         echo ${0##*/}: unknown option -- ${arg}
                    238:         usage
                    239:         exit 1
                    240:     ;;
1.12      andrew    241:     esac
                    242: done
1.13      andrew    243: shift $(($OPTIND - 1))
1.17      andrew    244:
                    245: set -A MACHINES -- "$@"
1.13      andrew    246:
1.16      andrew    247: do_pre
                    248: do_loop
                    249: do_post

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>