Yes it is possible to parse it from postgresql.conf of from provided
config file. But I'd rather not do that. One can set unix_socket_dir
parameter to "/tmp" or "/var/tmp" or some other directory that
shouldn't be owned by PostgreSQL user. I mead this parameter has to be
used very carefully. There are some bug reports for PostgreSQL
indicating that not all binary tools tolerate changing of that
parameter. So I'd rather have a system/database administrator
completely understanding what he/she is doing.
Attached is an improved patch with double quotes and error checks.
On Tue, Jun 22, 2010 at 6:53 AM, Lars Ellenberg
<[email protected]> wrote:
> On Tue, Jun 22, 2010 at 01:16:35PM +0200, Dejan Muhamedagic wrote:
>> Hi Serge,
>>
>> On Mon, Jun 21, 2010 at 10:19:13AM -0600, Serge Dubrouski wrote:
>> > Hello -
>> >
>> > Some users reported a need for this patch to cover the situation with
>> > non-default unix socket directory in PostgreSQL configuration.
>>
>> Why not set OCF_RESKEY_socketdir_default=/var/run/postgresql (or
>> whatever is its standard location)? I don't see how things could
>> go wrong with that.
>>
>> BTW, how comes that nobody complained about this before? I
>> understand that cleaning up all directories under /var/run is in
>> LSB.
>>
>> Cheers,
>>
>> Dejan
>>
>> > --
>> > Serge Dubrouski.
>>
>> > --- a/heartbeat/pgsql 2010-06-21 09:41:06.000000000 -0600
>> > +++ b/heartbeat/pgsql 2010-06-21 10:03:04.000000000 -0600
>> > @@ -27,6 +27,7 @@
>> > OCF_RESKEY_start_opt_default=""
>> > OCF_RESKEY_pgdb_default=template1
>> > OCF_RESKEY_logfile_default=/dev/null
>> > +OCF_RESKEY_socketdir_default=""
>
> could it be parsed from the postgres config file instead?
>
>> > OCF_RESKEY_stop_escalate_default=30
>> >
>> > : ${OCF_RESKEY_pgctl=${OCF_RESKEY_pgctl_default}}
>> > @@ -39,6 +40,7 @@
>> > : ${OCF_RESKEY_start_opt=${OCF_RESKEY_start_opt_default}}
>> > : ${OCF_RESKEY_pgdb=${OCF_RESKEY_pgdb_default}}
>> > : ${OCF_RESKEY_logfile=${OCF_RESKEY_logfile_default}}
>> > +: ${OCF_RESKEY_socketdir=${OCF_RESKEY_socketdir_default}}
>> > : ${OCF_RESKEY_stop_escalate=${OCF_RESKEY_stop_escalate_default}}
>> >
>> > usage() {
>> > @@ -166,6 +168,14 @@
>> > <content type="string" default="${OCF_RESKEY_logfile_default}" />
>> > </parameter>
>> >
>> > +<parameter name="socketdir" unique="0" required="0">
>> > +<longdesc lang="en">
>> > +Unix socket directory for PostgeSQL
>> > +</longdesc>
>> > +<shortdesc lang="en">socketdir</shortdesc>
>> > +<content type="string" default="${OCF_RESKEY_socketdir_default}" />
>> > +</parameter>
>> > +
>> > <parameter name="stop_escalate" unique="0" required="0">
>> > <longdesc lang="en">
>> > Number of shutdown retries (using -m fast) before resorting to -m
>> > immediate
>> > @@ -238,6 +248,11 @@
>> > ocf_log err "PostgreSQL can't write to the log file:
>> > $OCF_RESKEY_logfile"
>> > return $OCF_ERR_GENERIC
>> > fi
>> > + # Check if we need to create a socket directory
>> > + if [ -n "$OCF_RESKEY_socketdir" ]
>> > + then
>> > + check_socket_dir $OCF_RESKEY_socketdir
>> > + fi
>> >
>> > # Set options passed to pg_ctl
>> > pgctl_options="$OCF_RESKEY_ctl_opt -D $OCF_RESKEY_pgdata -l
>> > $OCF_RESKEY_logfile"
>> > @@ -419,6 +434,17 @@
>> > return 0
>> > }
>> >
>> > +# Check socket directory
>> > +check_socket_dir() {
>> > + if [ ! -d "$1" ]
>> > + then
>> > + mkdir $1
>
> please mkdir "$1"
> and if mkdir fails, fail the script.
>
>> > + fi
>> > +
>> > + chmod 2775 $1
>
> "$1", add error check
>
>> > + chown $OCF_RESKEY_pgdba:$(getent passwd $OCF_RESKEY_pgdba | cut -d
>> > ":" -f 4) $1
>
> "$1", add error check
> btw, I'd first chown, then chmod.
>
> --
> : Lars Ellenberg
> : LINBIT | Your Way to High Availability
> : DRBD/HA support and consulting http://www.linbit.com
>
> DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
> _______________________________________________________
> Linux-HA-Dev: [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
>
--
Serge Dubrouski.
--- a/heartbeat/pgsql 2010-06-22 08:58:33.000000000 -0600
+++ b/heartbeat/pgsql 2010-06-22 09:51:48.000000000 -0600
@@ -27,6 +27,7 @@
OCF_RESKEY_start_opt_default=""
OCF_RESKEY_pgdb_default=template1
OCF_RESKEY_logfile_default=/dev/null
+OCF_RESKEY_socketdir_default=""
OCF_RESKEY_stop_escalate_default=30
: ${OCF_RESKEY_pgctl=${OCF_RESKEY_pgctl_default}}
@@ -39,6 +40,7 @@
: ${OCF_RESKEY_start_opt=${OCF_RESKEY_start_opt_default}}
: ${OCF_RESKEY_pgdb=${OCF_RESKEY_pgdb_default}}
: ${OCF_RESKEY_logfile=${OCF_RESKEY_logfile_default}}
+: ${OCF_RESKEY_socketdir=${OCF_RESKEY_socketdir_default}}
: ${OCF_RESKEY_stop_escalate=${OCF_RESKEY_stop_escalate_default}}
usage() {
@@ -166,6 +168,14 @@
<content type="string" default="${OCF_RESKEY_logfile_default}" />
</parameter>
+<parameter name="socketdir" unique="0" required="0">
+<longdesc lang="en">
+Unix socket directory for PostgeSQL
+</longdesc>
+<shortdesc lang="en">socketdir</shortdesc>
+<content type="string" default="${OCF_RESKEY_socketdir_default}" />
+</parameter>
+
<parameter name="stop_escalate" unique="0" required="0">
<longdesc lang="en">
Number of shutdown retries (using -m fast) before resorting to -m immediate
@@ -238,6 +248,11 @@
ocf_log err "PostgreSQL can't write to the log file: $OCF_RESKEY_logfile"
return $OCF_ERR_GENERIC
fi
+ # Check if we need to create a socket directory
+ if [ -n "$OCF_RESKEY_socketdir" ]
+ then
+ check_socket_dir $OCF_RESKEY_socketdir
+ fi
# Set options passed to pg_ctl
pgctl_options="$OCF_RESKEY_ctl_opt -D $OCF_RESKEY_pgdata -l $OCF_RESKEY_logfile"
@@ -419,6 +434,30 @@
return 0
}
+# Check socket directory
+check_socket_dir() {
+ if [ ! -d "$1" ]
+ then
+ if ! mkdir "$1"
+ then
+ ocf_log err "Cannot create directory $1"
+ exit $OCF_ERR_GENERIC
+ fi
+ fi
+
+ if ! chown $OCF_RESKEY_pgdba:$(getent passwd $OCF_RESKEY_pgdba | cut -d ":" -f 4) "$1"
+ then
+ ocf_log err "Cannot change ownership for $1"
+ exit $OCF_ERR_GENERIC
+ fi
+
+ if ! chmod 2775 "$1"
+ then
+ ocf_log err "Cannot change permissions for $1"
+ exit $OCF_ERR_GENERIC
+ fi
+}
+
#
# 'main' starts here...
#
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/