PGDATA=/var/lib/pgsql/data
postgresql_conf=$PGDATA/postgresql.conf
pghba_conf=$PGDATA/pg_hba.conf
+postgresql_sysconfig=/etc/sysconfig/pgsql/postgresql
# Export so that we do not have to specify -p to psql invocations
export PGPORT=$PLC_DB_PORT
-# /etc/init.d/postgresql always returns 0, even on failure
-postgresql_start ()
-{
- # start() always returns 0
- (exec 3>&- 4>&- ; service postgresql start)
+# can't trust the return of service postgresql start / nor status
+function postgresql_check () {
- # status() will still return 0 even while still initializing
+ # wait until postmaster is up and running - or 10s max
if status postmaster && [ -f /var/lock/subsys/postgresql ] ; then
# The only way we can be sure is if we can access it
for i in $(seq 1 10) ; do
return 1
}
-postgresql_init ()
-{
- service postgresql initdb &> /dev/null || :
- postgresql_start
-}
-
case "$1" in
start)
if [ "$PLC_DB_ENABLED" != "1" ] ; then
MESSAGE=$"Starting PostgreSQL server"
dialog "$MESSAGE"
-
+
+ ######## sysconfig
+# xxx on f16, the systemd init script won't read /etc/sysconfig/pgsql/postgresql any more
+# need to find out how to perform this configuration, if still needed
# Set data directory and redirect startup output to /var/log/pgsql
- mkdir -p /etc/sysconfig/pgsql
- (
+ mkdir -p $(dirname $postgresql_sysconfig)
+ touch $postgresql_sysconfig
+ tmp=${postgresql_sysconfig}.new
+ # remove any previous definitions and write ours
+ ( egrep -v '^(PGDATA=|PGLOG=|PGPORT=)' $postgresql_sysconfig
echo "PGDATA=$PGDATA"
echo "PGLOG=/var/log/pgsql"
echo "PGPORT=$PLC_DB_PORT"
- ) >>/etc/sysconfig/pgsql/postgresql
+ ) > $tmp ; mv -f $tmp $postgresql_sysconfig
- # Fix ownership (rpm installation may have changed it)
+ ######## /var/lib/pgsql/data
+ # Fix ownership of /var/lib/pgsql (rpm installation may have changed it)
chown -R -H postgres:postgres $(dirname $PGDATA)
# PostgreSQL must be started at least once to bootstrap
# /var/lib/pgsql/data
if [ ! -f $postgresql_conf ] ; then
- postgresql_init
- check
- service postgresql stop
- check
+# fedora 16 uses systemd
+# http://docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/sect-Release_Notes-Changes_for_Sysadmin.html
+ if type postgresql-setup >& /dev/null ; then
+ postgresql-setup initdb || :
+ check
+ else
+ service postgresql initdb &> /dev/null || postgresql :
+ check
+ fi
fi
+ ######## /var/lib/pgsql/data/postgresql.conf
# Enable DB server. drop Postgresql<=7.x
# PostgreSQL >=8.0 defines listen_addresses
# listen on a specific IP + localhost, more robust when run within a vserver
sed -i -e '/^timezone=/d' $postgresql_conf
echo "timezone='UTC'" >> $postgresql_conf
- # Disable access to all DBs from all hosts
+ ######## /var/lib/pgsql/data/pg_hba.conf
+ # Disable access to MyPLC and drupal DBs from all hosts
sed -i -e '/^\(host\|local\)/d' $pghba_conf
# Enable passwordless localhost access
# Fix ownership (sed -i changes it)
chown postgres:postgres $postgresql_conf $pghba_conf
- # Start up the server
- postgresql_start
+ ######## Start up the server - ignore retcod and check this our way
+ (exec 3>&- 4>&- ; service postgresql start)
+ postgresql_check
check
- # Create/update the unprivileged database user and password
+ ######## 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=$local_config $local_config
- service plc reload
+ #service plc reload
+ plc_reload force
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
fi
check
- # Create the databases 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 --template=template0 --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