Fri, 03 Aug 2012 15:56:30 +0200
Use upstream man pages to avoid local help2man failures, likely due to
shell capability assumptions or cross platform environment variance.
The upstream man pages are probably better formatted anyway.
michael@290 | 1 | #!/bin/sh |
michael@290 | 2 | ## |
michael@290 | 3 | ## davical-setup |
michael@290 | 4 | ## |
michael@290 | 5 | |
michael@290 | 6 | # command line argument sanity check |
michael@290 | 7 | prg="$0" |
michael@290 | 8 | if [ $# -eq 0 ]; then |
michael@290 | 9 | echo "$prg:ERROR: invalid command line" 1>&2 |
michael@290 | 10 | echo "$prg:USAGE: $prg install [<admin-password>]" 1>&2 |
michael@290 | 11 | echo "$prg:USAGE: $prg uninstall" 1>&2 |
michael@290 | 12 | echo "$prg:USAGE: $prg edit" 1>&2 |
michael@290 | 13 | exit 1 |
michael@290 | 14 | fi |
michael@290 | 15 | |
michael@290 | 16 | # database configuration |
michael@290 | 17 | db_dir="@l_prefix@/var/davical/db" |
michael@290 | 18 | db_name="davical" |
michael@290 | 19 | db_user="davical" |
michael@290 | 20 | db_pass="davical" |
michael@290 | 21 | db_sname=`grep "^superuser_database" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ |
michael@290 | 22 | sed -e 's;^ *superuser_database="\(.*\)".*;\1;'` |
michael@290 | 23 | db_suser=`grep "^superuser_username" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ |
michael@290 | 24 | sed -e 's;^ *superuser_username="\(.*\)".*;\1;'` |
michael@290 | 25 | db_spass=`grep "^superuser_password" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ |
michael@290 | 26 | sed -e 's;^ *superuser_password="\(.*\)".*;\1;'` |
michael@290 | 27 | |
michael@290 | 28 | # dispatch operation |
michael@290 | 29 | cmd="${1:-"install"}" |
michael@290 | 30 | shift |
michael@290 | 31 | case "$cmd" in |
michael@290 | 32 | install ) |
michael@290 | 33 | # determine admin password |
michael@290 | 34 | admin_password="$1" |
michael@290 | 35 | if [ ".$admin_password" = . ]; then |
michael@290 | 36 | admin_password="`@l_prefix@/bin/apg -Mncl -a1 -m12 -n1`" |
michael@290 | 37 | echo "ATTENTION: using generated \"admin\" password: \"$admin_password\"" 1>&2 |
michael@290 | 38 | fi |
michael@290 | 39 | |
michael@290 | 40 | # create database |
michael@290 | 41 | ( echo "CREATE ROLE $db_user LOGIN ENCRYPTED PASSWORD '$db_pass' NOCREATEDB NOCREATEUSER;" |
michael@290 | 42 | echo "CREATE TABLESPACE $db_name OWNER $db_user LOCATION '$db_dir';" |
michael@396 | 43 | echo "CREATE DATABASE $db_name OWNER $db_user TABLESPACE $db_name TEMPLATE template0 ENCODING 'UTF8';" |
michael@290 | 44 | ) | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_sname" -f- |
michael@396 | 45 | |
michael@396 | 46 | # ensure PL/PgSQL language is available |
michael@290 | 47 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" \ |
michael@290 | 48 | -c "CREATE LANGUAGE plpgsql;" |
michael@290 | 49 | |
michael@290 | 50 | # create schema 1/2 (from original "create_database" script) |
michael@290 | 51 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 52 | -f "@l_prefix@/lib/davical/awl/dba/awl-tables.sql" 2>&1 | grep -v NOTICE |
michael@290 | 53 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 54 | -f "@l_prefix@/lib/davical/awl/dba/schema-management.sql" 2>&1 | grep -v NOTICE |
michael@290 | 55 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 56 | -f "@l_prefix@/lib/davical/davical/dba/davical.sql" 2>&1 | grep -v NOTICE |
michael@290 | 57 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 58 | -f "@l_prefix@/lib/davical/davical/dba/base-data.sql" 2>&1 | grep -v NOTICE |
michael@290 | 59 | |
michael@396 | 60 | # create schema 2/3 (from nowhere, but required by appuser_permissions.txt below) |
michael@396 | 61 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@396 | 62 | -f "@l_prefix@/lib/davical/davical/dba/views/dav_principal.sql" 2>&1 | grep -v NOTICE |
michael@396 | 63 | |
michael@396 | 64 | # create schema 3/3 (from original "update-davical-database" script) |
michael@290 | 65 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 66 | -f "@l_prefix@/lib/davical/davical/dba/supported_locales.sql" 2>&1 | grep -v NOTICE |
michael@290 | 67 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 68 | -f "@l_prefix@/lib/davical/davical/dba/caldav_functions.sql" 2>&1 | egrep -v '(NOTICE|ERROR)' |
michael@290 | 69 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -A -t \ |
michael@290 | 70 | -f "@l_prefix@/lib/davical/davical/dba/rrule_functions.sql" 2>&1 | egrep -v '(NOTICE|ERROR)' |
michael@290 | 71 | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_name" -A -t \ |
michael@290 | 72 | -f "@l_prefix@/lib/davical/davical/dba/appuser_permissions.txt" 2>&1 | grep -v NOTICE |
michael@290 | 73 | |
michael@290 | 74 | # set admin password |
michael@290 | 75 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" \ |
michael@290 | 76 | -c "UPDATE usr SET password = '**$admin_password' WHERE user_no = 1;" |
michael@290 | 77 | ;; |
michael@290 | 78 | |
michael@290 | 79 | uninstall ) |
michael@396 | 80 | # destroy PL/PgSQL language |
michael@290 | 81 | PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" \ |
michael@290 | 82 | -c "DROP LANGUAGE plpgsql CASCADE;" 2>&1 | grep -v NOTICE |
michael@396 | 83 | |
michael@396 | 84 | # destroy database |
michael@290 | 85 | ( echo "DROP DATABASE $db_name;" |
michael@290 | 86 | echo "DROP TABLESPACE $db_name;" |
michael@290 | 87 | echo "DROP ROLE $db_user;" |
michael@290 | 88 | ) | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_sname" -f- |
michael@290 | 89 | ;; |
michael@290 | 90 | |
michael@290 | 91 | edit ) |
michael@396 | 92 | # edit database |
michael@290 | 93 | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -U "$db_suser" -d "$db_name" |
michael@290 | 94 | ;; |
michael@290 | 95 | esac |
michael@290 | 96 |