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