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>