X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc.d%2Fpostgresql;h=8105637b55af1785eaebd593ce2a5df226aee708;hb=c77f3870faf07bbab64757cb6b75a991260b795a;hp=11f7da5b62eb570051368d38ff1b8249005af996;hpb=e0318500d74a006a3b75232df4082fe74afbc10b;p=myplc.git diff --git a/plc.d/postgresql b/plc.d/postgresql index 11f7da5..8105637 100755 --- a/plc.d/postgresql +++ b/plc.d/postgresql @@ -7,12 +7,13 @@ # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id: postgresql,v 1.4 2006/06/23 20:29:22 mlhuang Exp $ +# $Id$ # # Source function library and configuration . /etc/plc.d/functions . /etc/planetlab/plc_config +local_config=/etc/planetlab/configs/site.xml # Be verbose set -x @@ -29,7 +30,7 @@ export PGPORT=$PLC_DB_PORT postgresql_start () { # start() always returns 0 - service postgresql start + (exec 3>&- 4>&- ; service postgresql start) # status() will still return 0 even while still initializing if status postmaster && [ -f /var/lock/subsys/postgresql ] ; then @@ -45,6 +46,12 @@ postgresql_start () return 1 } +postgresql_init () +{ + service postgresql initdb &> /dev/null || : + postgresql_start +} + case "$1" in start) if [ "$PLC_DB_ENABLED" != "1" ] ; then @@ -68,7 +75,7 @@ case "$1" in # PostgreSQL must be started at least once to bootstrap # /var/lib/pgsql/data if [ ! -f $postgresql_conf ] ; then - postgresql_start + postgresql_init check service postgresql stop check @@ -90,14 +97,46 @@ case "$1" in # Enable passwordless localhost access echo "local all all trust" >>$pghba_conf - # Enable access from the API and web servers + # Enable access from the API, boot, and web servers PLC_API_IP=$(gethostbyname $PLC_API_HOST) + PLC_BOOT_IP=$(gethostbyname $PLC_BOOT_HOST) PLC_WWW_IP=$(gethostbyname $PLC_WWW_HOST) + ip_failure=0 + if [ -z "$PLC_API_IP" ] ; then + MESSAGE=$"PLC_API_IP is not set" + dialog "$MESSAGE" + ip_failure=1 + fi + if [ -z "$PLC_BOOT_IP" ] ; then + MESSAGE=$"PLC_BOOT_IP is not set" + dialog "$MESSAGE" + ip_failure=1 + fi + if [ -z "$PLC_WWW_IP" ] ; then + MESSAGE=$"PLC_WWW_IP is not set" + dialog "$MESSAGE" + ip_failure=1 + fi + if [ $ip_failure -eq 1 ] ; then + /bin/false + check + fi + ( + echo "host $PLC_DB_NAME $PLC_DB_USER 127.0.0.1/32 password" echo "host $PLC_DB_NAME $PLC_DB_USER $PLC_API_IP/32 password" + echo "host $PLC_DB_NAME $PLC_DB_USER $PLC_BOOT_IP/32 password" echo "host $PLC_DB_NAME $PLC_DB_USER $PLC_WWW_IP/32 password" + # Drupal also uses PostgreSQL + echo "host drupal $PLC_DB_USER 127.0.0.1/32 password" + echo "host drupal $PLC_DB_USER $PLC_WWW_IP/32 password" ) >>$pghba_conf + # Append site-specific access rules + for file in $pghba_conf.d/*.conf ; do + cat "$file" >>$pghba_conf + done + # Fix ownership (sed -i changes it) chown postgres:postgres $postgresql_conf $pghba_conf @@ -108,19 +147,27 @@ case "$1" in # Create/update the unprivileged database user and password if [ -z "$PLC_DB_PASSWORD" ] ; then PLC_DB_PASSWORD=$(uuidgen) - plc-config --category=plc_db --variable=password --value="$PLC_DB_PASSWORD" --save + plc-config --category=plc_db --variable=password --value="$PLC_DB_PASSWORD" --save=$local_config $local_config + service plc reload fi if ! psql -U $PLC_DB_USER -c "" template1 >/dev/null 2>&1 ; then psql -U postgres -c "CREATE USER $PLC_DB_USER PASSWORD '$PLC_DB_PASSWORD'" template1 else psql -U postgres -c "ALTER USER $PLC_DB_USER WITH PASSWORD '$PLC_DB_PASSWORD'" template1 fi + check - # Create the database if necessary + # Create the databases if necessary if ! psql -U $PLC_DB_USER -c "" $PLC_DB_NAME >/dev/null 2>&1 ; then - createdb -U postgres $PLC_DB_NAME - psql -U $PLC_DB_USER -f /usr/share/pl_db/plc_schema_3.sql $PLC_DB_NAME + createdb -U postgres --encoding=UNICODE --owner=$PLC_DB_USER $PLC_DB_NAME + psql -U $PLC_DB_USER -f /usr/share/plc_api/$PLC_DB_NAME.sql $PLC_DB_NAME + fi + check + if ! psql -U $PLC_DB_USER -c "" drupal >/dev/null 2>&1 ; then + createdb -U postgres --encoding=UNICODE --owner=$PLC_DB_USER drupal + psql -U $PLC_DB_USER -f /var/www/html/database/database.pgsql drupal fi + check result "$MESSAGE" ;; @@ -138,7 +185,9 @@ case "$1" in # Shut down the server service postgresql stop - check + + # /etc/init.d/postgresql fails if it is not running + [ "$PLC_DB_ENABLED" = 1 ] && check result "$MESSAGE" ;;