freebsd sample startup script doesn't work

Started by Vivek Kheraalmost 25 years ago12 messagesbugs
Jump to latest
#1Vivek Khera
khera@kcilink.com

I installed the sample startup script for postgres for FreeBSD, but it
reports the following error upon running:

# /usr/local/etc/rc.d/postgres.sh start
pg_ctl: no database directory or environment variable $PGDATA is specified
Try 'pg_ctl --help' for more information.

I see clearly that PGDATA is set and exported. I'm suspecting that
the "su -l" causes the environment to disappear. My guess is that
whomever wrote this script has PGDATA set in the ~/.profile (or
equivalent) in the postgres user's home directory.

Thus, it is pointless to set PGDATA in the script. Setting and
exporting PGDATA in the ~/.profile file lets postgres start as
expected.

The commentary says to copy the file to /usr/local/etc/rc.d/postgresql
but this is not useful; the file must in '.sh' and be executable or
FreeBSD will ignore it on boot.

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-240-453-8497
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Vivek Khera (#1)
Re: freebsd sample startup script doesn't work

Vivek Khera writes:

I see clearly that PGDATA is set and exported. I'm suspecting that
the "su -l" causes the environment to disappear. My guess is that
whomever wrote this script has PGDATA set in the ~/.profile (or
equivalent) in the postgres user's home directory.

This is fixed in the soon to be released 7.1.1.

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

You ought to run this once, not every time the system starts.

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#3Bruce Momjian
bruce@momjian.us
In reply to: Vivek Khera (#1)
Re: freebsd sample startup script doesn't work

Got it. I recommend changing 'su -l' to 'su -m' to preserve the
environment. How does that sound?

I installed the sample startup script for postgres for FreeBSD, but it
reports the following error upon running:

# /usr/local/etc/rc.d/postgres.sh start
pg_ctl: no database directory or environment variable $PGDATA is specified
Try 'pg_ctl --help' for more information.

I see clearly that PGDATA is set and exported. I'm suspecting that
the "su -l" causes the environment to disappear. My guess is that
whomever wrote this script has PGDATA set in the ~/.profile (or
equivalent) in the postgres user's home directory.

Thus, it is pointless to set PGDATA in the script. Setting and
exporting PGDATA in the ~/.profile file lets postgres start as
expected.

The commentary says to copy the file to /usr/local/etc/rc.d/postgresql
but this is not useful; the file must in '.sh' and be executable or
FreeBSD will ignore it on boot.

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-240-453-8497
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://www.postgresql.org/search.mpl

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#4Vivek Khera
khera@kcilink.com
In reply to: Peter Eisentraut (#2)
Re: freebsd sample startup script doesn't work

"PE" == Peter Eisentraut <peter_e@gmx.net> writes:

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

PE> You ought to run this once, not every time the system starts.

No, FreeBSD does *not* cache this info. You need to run it on every
system startup, unless you're libs are in /usr/lib or /usr/local/lib
or you've altered FreeBSD's setting of ldconfig_paths in the system
startup scripts.

Here's what I'm using, as file /usr/local/etc/rc.d/00postgres-client.sh,
as opposed to running it in the server startup script.

--cut here--
#!/bin/sh

case "$1" in
start)
/sbin/ldconfig -m /usr/local/pgsql/lib
;;
stop)
;;
*)
echo ""
echo "Usage: `basename $0` { start | stop }"
echo ""
exit 64
;;
esac

--cut here--

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-240-453-8497
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

#5Vivek Khera
khera@kcilink.com
In reply to: Bruce Momjian (#3)
Re: freebsd sample startup script doesn't work

"BM" == Bruce Momjian <pgman@candle.pha.pa.us> writes:

BM> Got it. I recommend changing 'su -l' to 'su -m' to preserve the
BM> environment. How does that sound?

Just tried it and it works ok. The only issue I can think of is if
root has some secret info in the environment, that it will now be
accessible to postgres... but then who puts secret info in their
environment? ;-)

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-240-453-8497
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

#6Peter Eisentraut
peter_e@gmx.net
In reply to: Vivek Khera (#4)
Re: freebsd sample startup script doesn't work

Vivek Khera writes:

"PE" == Peter Eisentraut <peter_e@gmx.net> writes:

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

PE> You ought to run this once, not every time the system starts.

No, FreeBSD does *not* cache this info.

Sure it does. See 'var/run/ld[-elf].so.hints'.

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#7Vivek Khera
khera@kcilink.com
In reply to: Peter Eisentraut (#6)
Re: freebsd sample startup script doesn't work

"PE" == Peter Eisentraut <peter_e@gmx.net> writes:

PE> Sure it does. See 'var/run/ld[-elf].so.hints'.

But /var/run is not guaranteed to survive reboot. "man hier" has this
to say about it:

run/ system information files describing various info
about system since it was booted

Says nothing about prior to booting.

#8Bruce Momjian
bruce@momjian.us
In reply to: Vivek Khera (#7)
Re: freebsd sample startup script doesn't work

OK, I think this is already fixed in 7.1.1. The fix was to add -D to
pg_ctl. Would you try 7.1.1 or the snapshot and let me know. Thanks.

New line shows:

su -l $PGUSER -c "$DAEMON start -D '$PGDATA' -s -l $PGLOG"

You will need an updated pg_ctl that understands -D.

Got it. I recommend changing 'su -l' to 'su -m' to preserve the
environment. How does that sound?

I installed the sample startup script for postgres for FreeBSD, but it
reports the following error upon running:

# /usr/local/etc/rc.d/postgres.sh start
pg_ctl: no database directory or environment variable $PGDATA is specified
Try 'pg_ctl --help' for more information.

I see clearly that PGDATA is set and exported. I'm suspecting that
the "su -l" causes the environment to disappear. My guess is that
whomever wrote this script has PGDATA set in the ~/.profile (or
equivalent) in the postgres user's home directory.

Thus, it is pointless to set PGDATA in the script. Setting and
exporting PGDATA in the ~/.profile file lets postgres start as
expected.

The commentary says to copy the file to /usr/local/etc/rc.d/postgresql
but this is not useful; the file must in '.sh' and be executable or
FreeBSD will ignore it on boot.

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-240-453-8497
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://www.postgresql.org/search.mpl

-- 
Bruce Momjian                        |  http://candle.pha.pa.us
pgman@candle.pha.pa.us               |  (610) 853-3000
+  If your life is a hard drive,     |  830 Blythe Avenue
+  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#9Vivek Khera
khera@kcilink.com
In reply to: Vivek Khera (#7)
Re: freebsd sample startup script doesn't work

"VK" == Vivek Khera <khera@kcilink.com> writes:

"PE" == Peter Eisentraut <peter_e@gmx.net> writes:

PE> Sure it does. See 'var/run/ld[-elf].so.hints'.

VK> But /var/run is not guaranteed to survive reboot. "man hier" has this
VK> to say about it:

One more thing... /etc/rc _explicitly_ sets the ldconfig path,
overriding anything that may have been sitting in
/var/run/ld-elf.so.hints anyhow. So you *must* do the ldconfig -m
/usr/local/pgsql/lib every boot or you don't get those libs.

#10Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#8)
Re: freebsd sample startup script doesn't work

Bruce Momjian writes:

You will need an updated pg_ctl that understands -D.

All versions of pg_ctl understand -D.

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#11Palle Girgensohn
girgen@partitur.se
In reply to: Vivek Khera (#1)
Re: freebsd sample startup script doesn't work

You should really use the port. it has a working startup
script, and it creates a pgsql/.profile for you. Using su -m is
more error prone IMHO. It will export locales and such, that
you really don't want to export to postmaster.

/Palle

Vivek Khera wrote:

I installed the sample startup script for postgres for FreeBSD, but it
reports the following error upon running:

# /usr/local/etc/rc.d/postgres.sh start
pg_ctl: no database directory or environment variable $PGDATA is specified
Try 'pg_ctl --help' for more information.

I see clearly that PGDATA is set and exported. I'm suspecting that
the "su -l" causes the environment to disappear. My guess is that
whomever wrote this script has PGDATA set in the ~/.profile (or
equivalent) in the postgres user's home directory.

Thus, it is pointless to set PGDATA in the script. Setting and
exporting PGDATA in the ~/.profile file lets postgres start as
expected.

The commentary says to copy the file to /usr/local/etc/rc.d/postgresql
but this is not useful; the file must in '.sh' and be executable or
FreeBSD will ignore it on boot.

Also, the following line in the start action of the sript is useful:

/sbin/ldconfig -m $prefix/lib

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-240-453-8497
AIM: vivekkhera Y!: vivek_khera http://www.khera.org/~vivek/

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://www.postgresql.org/search.mpl

--
Partitur Informationsteknik AB
Wenner-Gren Center +46 8 566 280 02
113 46 Stockholm +46 70 785 86 02
Sweden girgen@partitur.se

#12Vivek Khera
khera@kcilink.com
In reply to: Palle Girgensohn (#11)
Re: freebsd sample startup script doesn't work

"PG" == Palle Girgensohn <girgen@partitur.se> writes:

PG> You should really use the port. it has a working startup
PG> script, and it creates a pgsql/.profile for you. Using su -m is
PG> more error prone IMHO. It will export locales and such, that
PG> you really don't want to export to postmaster.

I started with the FreeBSD port, bit I dislike it. It is not really
well put together. If I specify an alternate location of the data
directory, it still creates the default one. It is just easier to do
it myself directly. Also, the port uses the user "pgsql" which just
feels funny to me.