#!/bin/bash setup() { export LC_ALL=C MY_PATH="`dirname \"$0\"`" MY_PATH="`( cd \"$MY_PATH\" && pwd )`" . $MY_PATH/tim-common } #--- onexit() ----------------------------------------------------- # @param $1 integer (optional) Exit status. If not set, use `$?' function onexit() { local exit_status=${1:-$?} if [ $exit_status != 0 ]; then log "FAILED INSTALL" echo "FAILED INSTALL" > ${INSTANCE_LOCK} else log "FINISHED SUCCESSFULLY" rm ${INSTANCE_LOCK} fi echo Exiting $0 with exit status: $exit_status exit $exit_status } trap onexit 1 2 3 15 ERR usage() { cat << EOF TIM-create - Tiki Instance Creator usage: $0 -u -t -g -i OPTIONS: -h Show this message -i id of instance -u username on Tiki.org -U userid on Tiki.org -r GIT Repository -g GIT branch -t SVN Tag (Tiki version) -P Subdirectory path EOF } while getopts “hc:i:t:u:U:p:g:r:” OPTION do case $OPTION in h) usage exit 1 ;; i) ID=$OPTARG ;; g) GITBRANCH=$OPTARG ;; t) SVNTAG=$OPTARG ;; u) TUSER=$OPTARG ;; U) TUSERID=$OPTARG ;; p) TPATH=$OPTARG ;; r) GITREP="$OPTARG" ;; ?) usage exit ;; esac done if ([[ -z $SVNTAG ]] && [[ -z $GITBRANCH ]] && [[ -z $GITREP ]]) || [[ -z $TUSER ]] || [[ -z $ID ]] then usage exit 1 fi setup debug() { echo "COMMAND: $COMMAND" echo "GITREP: $GITREP" echo "GITBRANCH: $GITBRANCH" echo "SVNTAG: $SVNTAG" echo "TUSER: $TUSER" echo "ID: $ID" } create() { # tim-create runs as a separate process and doesn't know $COMMAND # we set it manually here to be shown in logs COMMAND="create" if [ ! -w "${LOCKSDIR}" ] ; then echo "FAIL: Lock files directory '${LOCKSDIR}' is not writable" exit 1 fi if [[ -e $INSTANCE_LOCK ]] ; then echo "FAIL: Lock file already exists. Reason: $INSTANCE_LOCK_REASON."; exit 1; fi #TODO: remove stale locks if ! mkdir $INSTANCE_DIR; then echo "FAIL: $INSTANCE_DIR not created" echo "FAILED: mkdir - contact admin" > ${INSTANCE_LOCK} exit 1 fi echo "CREATE" > "${INSTANCE_LOCK}" || (echo "FAIL: Failed to create lock file ${INSTANCE_LOCK}"; exit 1) # Can only be called here because $INSTANCE_DIR needs to exist for $INSTANCE_LOG startlog log "Starting instance creation" # Trunk cache gets updated via cron every now and then # we lock it, so we don't install from a broken tarball if [[ ! -z $SVNTAG ]] then while [[ -e $SVN_CACHE/$SVNTAG.lock ]]; do log "Waiting for tarball lock" sleep 5 done log "Unpacking tarball" tar -C $INSTANCE_DIR -xzf $SVN_CACHE/$SVNTAG.tar.gz if echo $BRANCHES | grep ${SVNTAG} > /dev/null; then log "SVN upping because this is $SVNTAG" cd $INSTANCE_DIR svn upgrade svn up fi fi # GIT if [[ ! -z $GITBRANCH ]] then log "Cloning git $GITBRANCH from $GITREP" git clone --depth 1 -b $GITBRANCH $GITREP $INSTANCE_DIR --quiet fi log "Chown-ing everything to TIM user and group" chown -R $TIM_USER.$TIM_GROUP $INSTANCE_DIR log "Running setup.sh" cd $INSTANCE_DIR sh setup.sh -u $TIM_USER -g $TIM_GROUP -n fix log "Creating database" mysql -e "CREATE DATABASE $DB;" log "Setting GRANTs on database" mysql -e "GRANT ALL ON $DB.* TO tiki@localhost IDENTIFIED BY 'password';" log "Creating local.php" cat > $INSTANCE_DIR/db/local.php < ${INFOFILE} echo "$infotextversion" >> ${INFOFILE} # Cannot inject data useful to developers as remarksbox on top of homepage because page is not created et until first login } echo "CREATION START - watch ${SUBDOMAIN}.show.tiki.org " create echo "CREATION END - results in http://${SUBDOMAIN}.show.tiki.org/install_log.txt (available after a delay)" exit 0