dbmail-setup.sh 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/bin/sh
  2. ##
  3. ## dbmail-setup.sh -- DBMail RDBMS Setup Utility
  4. ##
  5. # command line argument sanity check
  6. if [ $# -eq 0 ]; then
  7. echo "$0:ERROR: invalid command line" 1>&2
  8. echo "$0:USAGE: $0 install [<database-directory>]" 1>&2
  9. echo "$0:USAGE: $0 uninstall" 1>&2
  10. exit 1
  11. fi
  12. # package configuration
  13. db_type="@db_type@"
  14. db_script="@l_prefix@/share/dbmail/dbmail-setup.sql"
  15. # determine database details
  16. # FIXME: bail out if extracted values are empty or don't make sense
  17. db_dir="@l_prefix@/var/dbmail/db"
  18. db_name=`grep "^db" @l_prefix@/etc/dbmail/dbmail.conf | sed -e 's;^[^=]*= *;;'`
  19. db_user=`grep "^user" @l_prefix@/etc/dbmail/dbmail.conf | sed -e 's;^[^=]*= *;;'`
  20. db_pass=`grep "^pass" @l_prefix@/etc/dbmail/dbmail.conf | sed -e 's;^[^=]*= *;;'`
  21. # determine RDBMS-specific details
  22. if [ ".$db_type" = .sqlite ]; then
  23. db_suser="@l_rusr@"
  24. db_spass="@l_rgrp@"
  25. elif [ ".$db_type" = .mysql ]; then
  26. db_suser=`grep "^user" @l_prefix@/etc/mysql/my.pwd |\
  27. sed -e 's;^user[^=]*= *;;' -e 's; *$;;'`
  28. db_spass=`grep "^password" @l_prefix@/etc/mysql/my.pwd |\
  29. sed -e 's;^password[^=]*= *;;' -e 's; *$;;'`
  30. elif [ ".$db_type" = .pgsql ]; then
  31. db_suser="postgresql"
  32. db_spass="" # has to be interactive
  33. fi
  34. # dispatch operation
  35. cmd="$1"
  36. shift
  37. case "$cmd" in
  38. install )
  39. # create the DBMail database
  40. if [ $# -gt 0 ]; then
  41. db_dir="$1"
  42. shift
  43. fi
  44. if [ ".$db_type" = .sqlite ]; then
  45. ( umask 077
  46. @l_prefix@/bin/sqlite3 $db_name <$db_script
  47. chown $db_suser:$db_spass $db_name
  48. chmod 640 $db_name
  49. ) || exit $?
  50. elif [ ".$db_type" = .mysql ]; then
  51. # FIXME: MySQL doesn't allow easy relocation of tablespaces AFAIK --rse
  52. @l_prefix@/bin/mysqladmin --user="$db_suser" --password="$db_spass" create "$db_name"
  53. ( echo "GRANT ALL ON $db_name.* TO $db_user@localhost IDENTIFIED BY '$db_pass';"
  54. echo "FLUSH PRIVILEGES;"
  55. ) | @l_prefix@/bin/mysql --user="$db_suser" --password="$db_spass" mysql
  56. @l_prefix@/bin/mysql --user="$db_user" --password="$db_pass" "$db_name" <$db_script
  57. elif [ ".$db_type" = .pgsql ]; then
  58. ( echo "CREATE ROLE $db_user LOGIN ENCRYPTED PASSWORD '$db_pass' NOCREATEDB NOCREATEUSER;"
  59. echo "CREATE TABLESPACE $db_name OWNER $db_user LOCATION '$db_dir';"
  60. echo "CREATE DATABASE $db_name OWNER $db_user TABLESPACE $db_name;"
  61. ) | @l_prefix@/bin/psql -q -W -U "$db_suser" -d template1 -f-
  62. PGPASSWORD="$db_pass" @l_prefix@/bin/psql -q -U "$db_user" -d "$db_name" -f- <$db_script
  63. fi
  64. ;;
  65. uninstall )
  66. # remove the DBMail database
  67. if [ ".$db_type" = .sqlite ]; then
  68. rm -f $db_name >/dev/null 2>&1 || true
  69. elif [ ".$db_type" = .mysql ]; then
  70. ( echo "DROP DATABASE $db_name;"
  71. ) | @l_prefix@/bin/mysql --user="$db_suser" --password="$db_spass" mysql
  72. elif [ ".$db_type" = .pgsql ]; then
  73. ( echo "DROP DATABASE $db_name;"
  74. echo "DROP TABLESPACE $db_name;"
  75. echo "DROP ROLE $db_user;"
  76. ) | @l_prefix@/bin/psql -q -W -U "$db_suser" -d template1 -f-
  77. fi
  78. ;;
  79. esac