michael@290: #!/bin/sh michael@290: ## michael@290: ## davical-setup michael@290: ## michael@290: michael@290: # command line argument sanity check michael@290: prg="$0" michael@290: if [ $# -eq 0 ]; then michael@290: echo "$prg:ERROR: invalid command line" 1>&2 michael@290: echo "$prg:USAGE: $prg install []" 1>&2 michael@290: echo "$prg:USAGE: $prg uninstall" 1>&2 michael@290: echo "$prg:USAGE: $prg edit" 1>&2 michael@290: exit 1 michael@290: fi michael@290: michael@290: # database configuration michael@290: db_dir="@l_prefix@/var/davical/db" michael@290: db_name="davical" michael@290: db_user="davical" michael@290: db_pass="davical" michael@290: db_sname=`grep "^superuser_database" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ michael@290: sed -e 's;^ *superuser_database="\(.*\)".*;\1;'` michael@290: db_suser=`grep "^superuser_username" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ michael@290: sed -e 's;^ *superuser_username="\(.*\)".*;\1;'` michael@290: db_spass=`grep "^superuser_password" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ michael@290: sed -e 's;^ *superuser_password="\(.*\)".*;\1;'` michael@290: michael@290: # dispatch operation michael@290: cmd="${1:-"install"}" michael@290: shift michael@290: case "$cmd" in michael@290: install ) michael@290: # determine admin password michael@290: admin_password="$1" michael@290: if [ ".$admin_password" = . ]; then michael@290: admin_password="`@l_prefix@/bin/apg -Mncl -a1 -m12 -n1`" michael@290: echo "ATTENTION: using generated \"admin\" password: \"$admin_password\"" 1>&2 michael@290: fi michael@290: michael@290: # create database michael@290: ( echo "CREATE ROLE $db_user LOGIN ENCRYPTED PASSWORD '$db_pass' NOCREATEDB NOCREATEUSER;" michael@290: echo "CREATE TABLESPACE $db_name OWNER $db_user LOCATION '$db_dir';" michael@396: echo "CREATE DATABASE $db_name OWNER $db_user TABLESPACE $db_name TEMPLATE template0 ENCODING 'UTF8';" michael@290: ) | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_sname" -f- michael@396: michael@396: # ensure PL/PgSQL language is available michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" \ michael@290: -c "CREATE LANGUAGE plpgsql;" michael@290: michael@290: # create schema 1/2 (from original "create_database" script) michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/awl/dba/awl-tables.sql" 2>&1 | grep -v NOTICE michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/awl/dba/schema-management.sql" 2>&1 | grep -v NOTICE michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/davical/dba/davical.sql" 2>&1 | grep -v NOTICE michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/davical/dba/base-data.sql" 2>&1 | grep -v NOTICE michael@290: michael@396: # create schema 2/3 (from nowhere, but required by appuser_permissions.txt below) michael@396: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@396: -f "@l_prefix@/lib/davical/davical/dba/views/dav_principal.sql" 2>&1 | grep -v NOTICE michael@396: michael@396: # create schema 3/3 (from original "update-davical-database" script) michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/davical/dba/supported_locales.sql" 2>&1 | grep -v NOTICE michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/davical/dba/caldav_functions.sql" 2>&1 | egrep -v '(NOTICE|ERROR)' michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/davical/dba/rrule_functions.sql" 2>&1 | egrep -v '(NOTICE|ERROR)' michael@290: PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_name" -A -t \ michael@290: -f "@l_prefix@/lib/davical/davical/dba/appuser_permissions.txt" 2>&1 | grep -v NOTICE michael@290: michael@290: # set admin password michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" \ michael@290: -c "UPDATE usr SET password = '**$admin_password' WHERE user_no = 1;" michael@290: ;; michael@290: michael@290: uninstall ) michael@396: # destroy PL/PgSQL language michael@290: PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" \ michael@290: -c "DROP LANGUAGE plpgsql CASCADE;" 2>&1 | grep -v NOTICE michael@396: michael@396: # destroy database michael@290: ( echo "DROP DATABASE $db_name;" michael@290: echo "DROP TABLESPACE $db_name;" michael@290: echo "DROP ROLE $db_user;" michael@290: ) | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_sname" -f- michael@290: ;; michael@290: michael@290: edit ) michael@396: # edit database michael@290: PGPASSWORD="$db_spass" @l_prefix@/bin/psql -U "$db_suser" -d "$db_name" michael@290: ;; michael@290: esac michael@290: