# -------------------------------------------------------------------------
# constants
-EVERGREEN_BASE="/home/opensrf/Evergreen"
+EVERGREEN_BASE="$(pwd)" # option to override?
PING_FILE="/openils/var/web/ping.txt"
+XUL_DIR="/openils/var/web/xul"
+XULRUNNER_VERSION="14.0.1"
DETACH_SLEEP=30
-OSRF="sudo -u opensrf"
+START_SLEEP=10
+CONFIGURE_OPS="--prefix=/openils --sysconfdir=/openils/conf --with-dbi=/usr/lib/x86_64-linux-gnu/dbd"
+RUNNER=$(whoami)
+OWNER=$(stat -c %U $EVERGREEN_BASE);
+BUILDER=""
+OSRF=""
+GIT="git"
-# run git commands from an opensrf login shell (-i) and use git -C to
-# set the Evergreen checkout directory, since -i drops you into $HOME.
-GIT="$OSRF -i git -C $EVERGREEN_BASE"
# command line arguments
GIT_TAG=""
GIT_BRANCH=""
GIT_PULL=""
CLIENT_BUILD_ID=""
+CLIENT_SERIES_ID=""
GIT_REMOTE="kcls"
SKIP_DETACH=""
REATTACH=""
SKIP_APACHE=""
WEB_ONLY=""
-SKIP_REBUILD=""
+REBUILD=""
+BUILD_XUL=""
# if the script exits early, SUCCESS will be left as 0,
# which is our sign to warn the user.
Staff client build ID. If -t is used and no -s is specified,
the value for -t will also be used as the build ID.
+ -i <code-series>
+ The major code series (e.g. "kcls-2.4") which we are
+ installing. If set, a symlink to the staff client build
+ for the series is also created. This is useful when clients
+ are deployed with a series version instead of a tag version
+ (which would require a new client with every update).
+
-r <git-remote>
Defaults to "kcls".
for major upgrades. This option is ignored when a branch
(-b) is used, since checking out a branch results in a
'git reset --hard', forcing configure, etc. to run anyway.
+
+ -x
+ Build a XUL client and place it in the published "builds"
+ directory.
+
USAGE
trap - EXIT
exit;
fi
}
+function set_builder {
+
+ if [ $RUNNER != $OWNER ]; then
+ BUILDER="sudo -u $OWNER "
+ # run git commands from a login shell (-i) and use git -C to set
+ # the Evergreen checkout directory, since -i drops you into $HOME.
+ GIT="$BUILDER -i git -C $EVERGREEN_BASE"
+ announce "Building as user $OWNER"
+ fi
+
+ if [ $RUNNER != "opensrf" ]; then
+ OSRF="sudo -u opensrf"
+ fi
+}
+
function inspect_params {
- # parameter sanity checks
- if [ -z "$GIT_TAG" -a -z "$GIT_BRANCH" -a -z "$GIT_PULL" ]; then
- announce "Tag, branch, or pull must be specified"
- usage;
+ if [ -z "$CLIENT_BUILD_ID" -a -n "$GIT_TAG" ]; then
+ # default to using the git tag if no client build ID is provided
+ CLIENT_BUILD_ID="$GIT_TAG";
fi;
- # default to using the git tag if no client build ID is provided
- [ -z "$CLIENT_BUILD_ID" -a -n "$GIT_TAG" ] && CLIENT_BUILD_ID="$GIT_TAG";
-
- # more parameter sanity checks
if [ -z "$CLIENT_BUILD_ID" -a -z "$WEB_ONLY" ]; then
- announce "Staff client build ID (-s) required if no tag is specified"
- usage;
+ # if we still have no build ID, use the current date.
+ # other symlinks will be
+ CLIENT_BUILD_ID=$(date +'%FT%T')
+ announce "No -s specified; using $CLIENT_BUILD_ID as client build ID"
fi;
# checking out a branch causes a 'git reset --hard', which
# means that the full build has to be done regardless,
# so skip this option when GIT_BRANCH is set.
- if [ -n "$GIT_BRANCH" -a -n "$SKIP_REBUILD" ]; then
- announce "-c param is ignored when a branch is specified"
- SKIP_REBUILD="";
+ if [ -n "$GIT_BRANCH" -a -z "$REBUILD" ]; then
+ announce "-c param is applied by default when a branch is specified"
+ REBUILD="YES";
fi
}
# local checkout is available, but not checked out.
announce "Recovering existing checkout for $LOCAL"
- $GIT checkout "$LOCAL" > /dev/null
+ $GIT checkout -f "$LOCAL" > /dev/null
else
announce "$LOCAL is already checked out"
$OSRF cp /openils/conf/fm_IDL.xml /openils/var/web/reports/
}
+# -----------------------------------------------------------------------
+# 1. Create persistent links to current staff client server directory
+# 2. Make staff client build directories available for easy download
+# from an Evergreen brick.
+# -----------------------------------------------------------------------
+function publish_staff_client_build {
+ cd $EVERGREEN_BASE;
+
+ $OSRF mkdir -p $XUL_DIR/builds/
+ $OSRF cp -r Open-ILS/xul/staff_client/build $XUL_DIR/builds/
+ cd $XUL_DIR
+
+ # set up links to current server files
+
+ $OSRF rm -f server
+ $OSRF rm -f current
+ $OSRF ln -s $CLIENT_BUILD_ID current
+ $OSRF ln -s current/server server
+
+ if [ -n "$CLIENT_SERIES_ID" ]; then
+ $OSRF rm -f $CLIENT_SERIES_ID;
+ $OSRF ln -s $CLIENT_BUILD_ID $CLIENT_SERIES_ID;
+ fi
+
+ # create current build bundle zip file
+
+ cd builds
+ $OSRF rm -r build/server # server files are not needed by installed clients
+ $OSRF rm -f current-client-build.zip
+ $OSRF zip -rq $CLIENT_BUILD_ID.zip build
+ $OSRF ln -s $CLIENT_BUILD_ID.zip current-client-build.zip
+ $OSRF rm -r build # don't need the extracted version on the server
+
+ if [ -n "$BUILD_XUL" ]; then
+ build_staff_client;
+ fi
+}
+
+function build_staff_client {
+ cd $XUL_DIR/builds/
+ if [ ! -r "xulrunner-$XULRUNNER_VERSION.en-US.win32.zip" ]; then
+ $OSRF wget "http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/$XULRUNNER_VERSION/runtimes/xulrunner-$XULRUNNER_VERSION.en-US.win32.zip"
+ fi
+ cd $EVERGREEN_BASE/Open-ILS/xul/staff_client
+
+ # xulrunner exe has to be in the source directory to get packaged.
+ # link it into place, then later remove it.
+ $BUILDER ln -s $XUL_DIR/builds/"xulrunner-$XULRUNNER_VERSION.en-US.win32.zip" .
+ $BUILDER make rigrelease
+ $BUILDER make STAFF_CLIENT_STAMP_ID=$CLIENT_BUILD_ID build
+ $BUILDER make win-client
+
+ $OSRF mv evergreen_staff_client_setup.exe \
+ $XUL_DIR/builds/evergreen-setup-$CLIENT_BUILD_ID.exe
+
+ $BUILDER rm "xulrunner-$XULRUNNER_VERSION.en-US.win32.zip" # remove symlink
+
+ cd $XUL_DIR/builds/
+ $OSRF rm -f evergreen-setup-current.exe
+ $OSRF ln -s "evergreen-setup-$CLIENT_BUILD_ID.exe" \
+ evergreen-setup-current.exe
+}
+
+# copy custom files into place
+function copy_custom_files {
+ cd $EVERGREEN_BASE;
+
+ # web templates
+ $OSRF cp -r KCLS/openils/var/templates_kcls /openils/var/
+
+ $OSRF mkdir -p /openils/var/cgi-bin/ezproxy/
+ $OSRF cp Open-ILS/examples/remoteauth.cgi /openils/var/cgi-bin/ezproxy/
+
+ $OSRF cp ./KCLS/utility-scripts/send-print-notices.pl /openils/bin/
+
+ # copy bin files which are not normally installed into place
+ $OSRF cp ./Open-ILS/src/support-scripts/edi_fetcher.pl /openils/bin/
+ $OSRF cp ./Open-ILS/src/support-scripts/edi_pusher.pl /openils/bin/
+ $OSRF cp ./Open-ILS/src/edi_translator/edi_webrick.rb /openils/bin/
+ $OSRF cp ./Open-ILS/src/edi_translator/edi_webrick.bash /openils/bin/
+ $OSRF cp ./Open-ILS/src/support-scripts/marc_stream_importer.pl /openils/bin/
+ $OSRF cp ./Open-ILS/src/support-scripts/oils_header.pl /openils/bin/
+ $OSRF cp ./Open-ILS/src/support-scripts/set_pbx_holidays.pl /openils/bin/
+}
+
+
function deploy_code {
announce "Building and installing Evergreen"
- if [ -n "$SKIP_REBUILD" ]; then
- # pass PATH in case 'make' forces ./configure to run.
- $OSRF PATH=$PATH:/openils/bin make > /dev/null
- else
+ # the separate incantations for $BUILDER / $OSRF are required
+ # becuase it's an error to preceded setting a variable with
+ # an empty variable.
- $OSRF autoreconf -i > /dev/null
- $OSRF PATH=$PATH:/openils/bin ./configure --prefix=/openils \
- --sysconfdir=/openils/conf \
- --with-dbi=/usr/lib/x86_64-linux-gnu/dbd > /dev/null
- $OSRF make clean all > /dev/null
+ if [ -z "$REBUILD" ]; then
+ if [ -n "$BUILDER" ]; then
+ $BUILDER PATH=$PATH:/openils/bin make > /dev/null
+ else
+ PATH=$PATH:/openils/bin make > /dev/null
+ fi
+ else
+ if [ -n "$BUILDER" ]; then
+ $BUILDER autoreconf -i > /dev/null
+ $BUILDER PATH=$PATH:/openils/bin ./configure $CONFIGURE_OPS > /dev/null
+ $BUILDER make clean all > /dev/null
+ else
+ autoreconf -i > /dev/null
+ PATH=$PATH:/openils/bin ./configure $CONFIGURE_OPS > /dev/null
+ make clean all > /dev/null
+ fi
fi
sudo make STAFF_CLIENT_STAMP_ID="$CLIENT_BUILD_ID" install > /dev/null
- sudo chown -R opensrf:opensrf $EVERGREEN_BASE
+
+ # recover ownership of repo files after sudo/install
+ sudo chown -R $OWNER:$OWNER $EVERGREEN_BASE
announce "Running post-install steps"
+ # opensrf always owns /openils
set +e # chown returns non-zero on R/O NFS shares
sudo chown -R opensrf:opensrf /openils > /dev/null 2>&1;
set -e
- $OSRF KCLS/misc-scripts/post-install-tasks.sh -b kcls-2.4.001 > /dev/null
+ publish_staff_client_build;
- $OSRF PATH=$PATH:/openils/bin \
- /openils/bin/osrf_control --localhost --start-all > /dev/null
+ copy_custom_files;
+
+ if [ -n "$OSRF" ]; then
+
+ $OSRF PATH=$PATH:/openils/bin \
+ /openils/bin/osrf_control --localhost --start-all > /dev/null
+ else
+
+ PATH=$PATH:/openils/bin \
+ /openils/bin/osrf_control --localhost --start-all > /dev/null
+ fi
# give services a chance to start up
- announce "Giving services a few seconds to start up"
- sleep 5;
+ announce "Giving services $START_SLEEP seconds to start up"
+ sleep $START_SLEEP;
announce "Running autogen"
$OSRF /openils/bin/autogen.sh > /dev/null
trap on_exit EXIT;
-while getopts "t:b:r:s:pdanwch" opt; do
+while getopts "t:b:r:s:i:pdanwchx" opt; do
case $opt in
t) GIT_TAG="$OPTARG";;
b) GIT_BRANCH="$OPTARG";;
r) GIT_REMOTE="$OPTARG";;
s) CLIENT_BUILD_ID="$OPTARG";;
+ i) CLIENT_SERIES_ID="$OPTARG";;
p) GIT_PULL="YES";;
d) SKIP_DETACH="YES";;
a) REATTACH="YES";;
n) SKIP_APACHE="YES";;
w) WEB_ONLY="YES";;
- c) SKIP_REBUILD="YES";;
+ c) REBUILD="YES";;
+ x) BUILD_XUL="YES";;
h|*) usage;
esac
done;
+set_builder;
inspect_params;
if [ -z "$SKIP_DETACH" ]; then
fi
if [ -n "$REATTACH" -a -z "$SKIP_DETACH" ]; then
- announce "Reattaching brick (after a short sleep)"
- sleep 5;
+ announce "Reattaching brick after $START_SLEEP seconds"
+ sleep $START_SLEEP;
$OSRF mv $PING_FILE- $PING_FILE
fi;
+++ /dev/null
-#!/bin/bash
-# -----------------------------------------------------------------------
-# Author: Bill Erickson
-#
-set -euo pipefail
-BUILD_ID=''
-XUL_DIR=/openils/var/web/xul
-
-while getopts "b:" opt; do
- case $opt in
- b) BUILD_ID="$OPTARG"
- esac
-done;
-
-[ -z "$BUILD_ID" ] && echo "-b <staff-client-build-ID> required!" && exit;
-[ "$(id -un)" != "opensrf" ] && echo "Run as opensrf!" && exit;
-
-
-
-# -----------------------------------------------------------------------
-# 1. Create persistent links to current staff client server directory
-# 2. Make staff client build directories available for easy download
-# from an Evergreen brick.
-# -----------------------------------------------------------------------
-function publish_staff_client_build {
-
- cd /home/opensrf/Evergreen/
- mkdir -p $XUL_DIR/builds/
- cp -r Open-ILS/xul/staff_client/build $XUL_DIR/builds/
- cd $XUL_DIR
-
- # set up links to current server files
-
- rm -f server
- rm -f current
- ln -s $BUILD_ID current
- ln -s current/server server
-
- # create current build bundle zip file
-
- cd builds
- rm -r build/server # server files are not needed by installed clients
- rm -f current-client-build.zip
- zip -rq $BUILD_ID.zip build
- ln -s $BUILD_ID.zip current-client-build.zip
- rm -r build # don't need the extracted version on the server
-}
-
-# copy custom files into place
-function copy_custom_files {
- cd /home/opensrf/Evergreen/
- # web templates
- cp -r KCLS/openils/var/templates_kcls /openils/var/
-
- mkdir -p /openils/var/cgi-bin/ezproxy/
- cp Open-ILS/examples/remoteauth.cgi /openils/var/cgi-bin/ezproxy/
-
- cp ./KCLS/utility-scripts/send-print-notices.pl /openils/bin/
-
- # copy bin files which are not normally installed into place
- cp ./Open-ILS/src/support-scripts/edi_fetcher.pl /openils/bin/
- cp ./Open-ILS/src/support-scripts/edi_pusher.pl /openils/bin/
- cp ./Open-ILS/src/edi_translator/edi_webrick.rb /openils/bin/
- cp ./Open-ILS/src/edi_translator/edi_webrick.bash /openils/bin/
- cp ./Open-ILS/src/support-scripts/marc_stream_importer.pl /openils/bin/
- cp ./Open-ILS/src/support-scripts/oils_header.pl /openils/bin/
- cp ./Open-ILS/src/support-scripts/set_pbx_holidays.pl /openils/bin/
-}
-
-publish_staff_client_build;
-copy_custom_files;