#!/bin/sh # # Build the DAViCal database # DBNAME="${1:-davical}" ADMINPW="${2}" DBADIR="`dirname \"$0\"`" INSTALL_NOTE_FN="`mktemp -t tmp.XXXXXXXXXX`" # Candidate locations of the AWL directory awldirs="${DBADIR}/../../awl /usr/share/awl /usr/share/php/awl /usr/local/share/awl" # Disable globbing and use newline as seperator set -f; IFS=' ' for d in $awldirs ; do if [ -f "${d}/dba/awl-tables.sql" ] ; then AWLDIR="${d}" break fi done # Renable file globbing and reset seperator set +f; unset IFS if [ -z "${AWLDIR}" ] ; then echo "Unable to find AWL libraries" exit 1 fi AWL_DBAUSER="${3:-davical_dba}" AWL_APPUSER="${4:-davical_app}" # set -x # Get the major version for PostgreSQL export DBVERSION="`psql -qXAt ${PSQLOPTS} -c "SELECT version();" template1 | cut -f2 -d' ' | cut -f1-2 -d'.'`" install_note() { cat >>"${INSTALL_NOTE_FN}" } db_users() { psql -qXAt ${PSQLOPTS} -c "SELECT usename FROM pg_user;" template1 } create_db_user() { if ! db_users | grep "^${1}$" >/dev/null ; then psql -qXAt ${PSQLOPTS} -c "CREATE USER ${1} NOCREATEDB NOCREATEROLE;" template1 cat </dev/null; then createlang ${PSQLOPTS} plpgsql "${DBNAME}" fi } try_db_user() { [ "XtestX`psql -U "${1}" -qXAt ${PSQLOPTS} -c \"SELECT usename FROM pg_user;\" \"${DBNAME}\" 2>/dev/null`" != "XtestX" ] } # Hide all the annoying NOTICE... messages export PGOPTIONS='--client-min-messages=warning' create_db_user "${AWL_DBAUSER}" create_db_user "${AWL_APPUSER}" # FIXME: Need to check that the database was actually created. if ! createdb --encoding UTF8 --template template0 --owner "${AWL_DBAUSER}" ${PSQLOPTS} "${DBNAME}" ; then echo "Unable to create database" exit 1 fi # # Try a few alternatives for a database user or give up... if try_db_user "${AWL_DBAUSER}" ; then export DBA="-U ${AWL_DBAUSER}" else if try_db_user "postgres" ; then export DBA="-U postgres" else if try_db_user "${USER}" ; then export DBA="" else if try_db_user "${PGUSER}" ; then export DBA="" else cat <&1 psql -qXAt ${PSQLOPTS} ${DBA} -f "${AWLDIR}/dba/schema-management.sql" "${DBNAME}" 2>&1 # # Load the DAViCal tables psql -qXAt ${PSQLOPTS} ${DBA} -f "${DBADIR}/davical.sql" "${DBNAME}" 2>&1 # # Set permissions for the application DB user on the database if ! ${DBADIR}/update-davical-database ${DBAOPTS} --dbuser "${AWL_DBAUSER}" --dbname "${DBNAME}" --appuser "${AWL_APPUSER}" --nopatch --owner "${AWL_DBAUSER}" ; then cat <