Lists: | pgsql-bugspgsql-pkg-debian |
---|
From: | stronny(at)celestia(dot)ru |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #8177: initscript should create /var/run/postgresql |
Date: | 2013-05-27 09:27:01 |
Message-ID: | E1Ugthl-0001QE-Pg@wrigleys.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
The following bug has been logged on the website:
Bug reference: 8177
Logged by: stronny
Email address: stronny(at)celestia(dot)ru
PostgreSQL version: 9.2.4
Operating system: wheezy
Description:
When installed from apt.postgresql.org Postgres fails to start on system
boot.
Wheezy changed /var/run to become memory-based so initscript should create
/var/run/postgresql if necessary.
From: | Peter Eisentraut <peter_e(at)gmx(dot)net> |
---|---|
To: | stronny(at)celestia(dot)ru |
Cc: | pgsql-pkg-debian(at)postgresql(dot)org |
Subject: | Re: [BUGS] BUG #8177: initscript should create /var/run/postgresql |
Date: | 2013-05-30 02:22:47 |
Message-ID: | 1369880567.2517.2.camel@vanquo.pezone.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
On Mon, 2013-05-27 at 09:27 +0000, stronny(at)celestia(dot)ru wrote:
> The following bug has been logged on the website:
>
> Bug reference: 8177
> Logged by: stronny
> Email address: stronny(at)celestia(dot)ru
> PostgreSQL version: 9.2.4
> Operating system: wheezy
> Description:
>
> When installed from apt.postgresql.org Postgres fails to start on system
> boot.
>
> Wheezy changed /var/run to become memory-based so initscript should create
> /var/run/postgresql if necessary.
pgsql-pkg-debian(at)postgresql(dot)org is where the people who know about this
hang out.
From: | Christoph Berg <myon(at)debian(dot)org> |
---|---|
To: | Peter Eisentraut <peter_e(at)gmx(dot)net> |
Cc: | stronny(at)celestia(dot)ru, pgsql-pkg-debian(at)postgresql(dot)org |
Subject: | Re: [BUGS] BUG #8177: initscript should create /var/run/postgresql |
Date: | 2013-05-30 02:58:35 |
Message-ID: | 20130530025835.GB974@msgid.df7cb.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
On Mon, 2013-05-27 at 09:27 +0000, stronny(at)celestia(dot)ru wrote:
> The following bug has been logged on the website:
>
> Bug reference: 8177
> Logged by: stronny
> Email address: stronny(at)celestia(dot)ru
> PostgreSQL version: 9.2.4
> Operating system: wheezy
> Description:
>
> When installed from apt.postgresql.org Postgres fails to start on system
> boot.
>
> Wheezy changed /var/run to become memory-based so initscript should create
> /var/run/postgresql if necessary.
start() {
# create socket directory
if [ -d /var/run/postgresql ]; then
chmod 2775 /var/run/postgresql
else
install -d -m 2775 -o postgres -g postgres /var/run/postgresql
fi
do_ctl_all start "$1" "Starting PostgreSQL $1 database server"
}
We create the directory, what specifically doesn't work for you?
Christoph
--
cb(at)df7cb(dot)de | http://www.df7cb.de/
From: | stronny red <stronny(at)celestia(dot)ru> |
---|---|
To: | Christoph Berg <myon(at)debian(dot)org>, Peter Eisentraut <peter_e(at)gmx(dot)net>, pgsql-pkg-debian(at)postgresql(dot)org |
Subject: | Re: [BUGS] BUG #8177: initscript should create /var/run/postgresql |
Date: | 2013-05-30 07:29:13 |
Message-ID: | CALOvDf7fpScGUJBai69S3=Mr5wC-Xj5BZEqnV4qQBjOHXcj+Zg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
I was able to reproduce the problem.
Package versions
-----------------
ii postgresql-9.2 9.2.4-1.pgdg60+1
object-relational SQL database, version 9.2 server
ii postgresql-common 142.pgdg60+1
PostgreSQL database-cluster manager
The failure
-----------------
# /etc/init.d/postgresql stop
# rm -rf /var/run/postgresql
# /etc/init.d/postgresql start
Error: Cannot stat /var/run/postgresql
No PostgreSQL clusters exist; see "man pg_createcluster" ... (warning).
The config file
-----------------
# ls -lA /etc/postgresql/9.2
total 0
lrwxrwxrwx 1 root root 23 May 22 20:36 main -> /var/lib/postgresql/etc
# cat /etc/postgresql/9.2/main/postgresql.conf
data_directory = '/var/lib/postgresql/9.2/main'
hba_file = '/var/lib/postgresql/etc/pg_hba.conf'
external_pid_file = '/var/run/postgresql/9.2-main.pid'
ssl = true
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'
log_line_prefix = '%t '
log_timezone = 'Europe/Moscow'
listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 3
wal_keep_segments = 8
On Thu, May 30, 2013 at 6:58 AM, Christoph Berg <myon(at)debian(dot)org> wrote:
> On Mon, 2013-05-27 at 09:27 +0000, stronny(at)celestia(dot)ru wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference: 8177
> > Logged by: stronny
> > Email address: stronny(at)celestia(dot)ru
> > PostgreSQL version: 9.2.4
> > Operating system: wheezy
> > Description:
> >
> > When installed from apt.postgresql.org Postgres fails to start on system
> > boot.
> >
> > Wheezy changed /var/run to become memory-based so initscript should
> create
> > /var/run/postgresql if necessary.
>
> start() {
> # create socket directory
> if [ -d /var/run/postgresql ]; then
> chmod 2775 /var/run/postgresql
> else
> install -d -m 2775 -o postgres -g postgres /var/run/postgresql
> fi
>
> do_ctl_all start "$1" "Starting PostgreSQL $1 database server"
> }
>
> We create the directory, what specifically doesn't work for you?
>
> Christoph
> --
> cb(at)df7cb(dot)de | http://www.df7cb.de/
>
From: | Christoph Berg <myon(at)debian(dot)org> |
---|---|
To: | stronny red <stronny(at)celestia(dot)ru> |
Cc: | Peter Eisentraut <peter_e(at)gmx(dot)net>, pgsql-pkg-debian(at)postgresql(dot)org |
Subject: | Re: [BUGS] BUG #8177: initscript should create /var/run/postgresql |
Date: | 2013-06-01 04:33:08 |
Message-ID: | 20130601043307.GB20800@msgid.df7cb.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
Re: stronny red 2013-05-30 <CALOvDf7fpScGUJBai69S3=Mr5wC-Xj5BZEqnV4qQBjOHXcj+Zg(at)mail(dot)gmail(dot)com>
> I was able to reproduce the problem.
>
> Package versions
> -----------------
> ii postgresql-9.2 9.2.4-1.pgdg60+1
> object-relational SQL database, version 9.2 server
> ii postgresql-common 142.pgdg60+1
> PostgreSQL database-cluster manager
>
> The failure
> -----------------
> # /etc/init.d/postgresql stop
> # rm -rf /var/run/postgresql
> # /etc/init.d/postgresql start
> Error: Cannot stat /var/run/postgresql
Can you try "sh -x /etc/init.d/postgresql start" there and send us the
output?
Here it does:
+ [ -d /var/run/postgresql ]
+ install -d -m 2775 -o postgres -g postgres /var/run/postgresql
> No PostgreSQL clusters exist; see "man pg_createcluster" ... (warning).
Btw, this seems to be the actual problem here.
> The config file
> -----------------
> # ls -lA /etc/postgresql/9.2
> total 0
> lrwxrwxrwx 1 root root 23 May 22 20:36 main -> /var/lib/postgresql/etc
That's a non-standard setup. Could it be the case that this partition
wasn't mounted during your tests, or something like that?
Christoph
--
cb(at)df7cb(dot)de | http://www.df7cb.de/
From: | Chris Nehren <cnehren+pgsql-pkg-debian(at)pobox(dot)com> |
---|---|
To: | pgsql-pkg-debian(at)postgresql(dot)org |
Subject: | Re: [BUGS] BUG #8177: initscript should create /var/run/postgresql |
Date: | 2014-05-30 17:03:16 |
Message-ID: | 20140530170316.GC13595@behemoth |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
> On Mon, 2013-05-27 at 09:27 +0000, stronny(at)celestia(dot)ru wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference: 8177
> > Logged by: stronny
> > Email address: stronny(at)celestia(dot)ru
> > PostgreSQL version: 9.2.4
> > Operating system: wheezy
> > Description:
> >
> > When installed from apt.postgresql.org Postgres fails to start on system
> > boot.
> >
> > Wheezy changed /var/run to become memory-based so initscript should create
> > /var/run/postgresql if necessary.
>
> start() {
> # create socket directory
> if [ -d /var/run/postgresql ]; then
> chmod 2775 /var/run/postgresql
> else
> install -d -m 2775 -o postgres -g postgres /var/run/postgresql
> fi
>
> do_ctl_all start "$1" "Starting PostgreSQL $1 database server"
> }
>
> We create the directory, what specifically doesn't work for you?
I've been able to reproduce this as well, and have found the root
cause. Presently, the init script itself
(/etc/init.d/postgresql) does this:
start|stop|restart|reload)
if [ -z "`pg_lsclusters -h`" ]; then
log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
exit 0
fi
pg_lsclusters is a Perl application that gets most of its logic
from PgCommon.pm. Its entry point into PgCommon.pm (the one we
care about, anyway) is the subroutine &cluster_info.
&cluster_info, at line 575, calls &get_cluster_socketdir. This
subroutine, at line 360, gets the 'unix_socket_directories' value
from the configuration file. If the value is defined in the
configuration file (the default), it immediately returns that
value to &cluster_info. This is important. If the value is
*not* defined, then &get_cluster_socketdir defaults it to
'/var/run/postgresql' and attempts to stat() this directory. As
'/var/run' is now a tmpfs in Debian, this fails, because no
attempt has been made to create that directory before the stat()
runs.
There are actually two bugs here. The first is attempting to
stat() a directory that the code has not ensured exists, which is
what this bug is about. The second, more general, is that the
code makes no attempts at creating or even verifying the
existence of any unix_socket_{directory,directories} before
returning. I've attached a patch to the init script that ensures
/var/run/postgresql actually exists before the code tries to
stat() it.
The reproduction steps for this bug are as follows:
1. install fresh Debian wheezy machine
2. Add official Postgres mirror to apt, installing the keyring
for same
3. Install the Postgres server
4. Remove any unix_socket_{directory,directories} directive from
/etc/postgresql/9.?/main/postgresql.conf
5. Reboot, observe Postgres startup failure
I've been able to reproduce this 100% of the time with the above
steps.
--
Chris Nehren
From: | Chris Nehren <cnehren+pgsql-pkg-debian(at)pobox(dot)com> |
---|---|
To: | pgsql-pkg-debian(at)postgresql(dot)org |
Subject: | Re: [BUGS] BUG #8177: initscript should create /var/run/postgresql |
Date: | 2014-05-30 17:05:58 |
Message-ID: | 20140530170558.GA5510@behemoth |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs pgsql-pkg-debian |
It would help if I actually attached the patch. My apologies.
On Fri, May 30, 2014 at 13:03:16 -0400, Chris Nehren wrote:
> > On Mon, 2013-05-27 at 09:27 +0000, stronny(at)celestia(dot)ru wrote:
> > > The following bug has been logged on the website:
> > >
> > > Bug reference: 8177
> > > Logged by: stronny
> > > Email address: stronny(at)celestia(dot)ru
> > > PostgreSQL version: 9.2.4
> > > Operating system: wheezy
> > > Description:
> > >
> > > When installed from apt.postgresql.org Postgres fails to start on system
> > > boot.
> > >
> > > Wheezy changed /var/run to become memory-based so initscript should create
> > > /var/run/postgresql if necessary.
> >
> > start() {
> > # create socket directory
> > if [ -d /var/run/postgresql ]; then
> > chmod 2775 /var/run/postgresql
> > else
> > install -d -m 2775 -o postgres -g postgres /var/run/postgresql
> > fi
> >
> > do_ctl_all start "$1" "Starting PostgreSQL $1 database server"
> > }
> >
> > We create the directory, what specifically doesn't work for you?
>
> I've been able to reproduce this as well, and have found the root
> cause. Presently, the init script itself
> (/etc/init.d/postgresql) does this:
>
> start|stop|restart|reload)
> if [ -z "`pg_lsclusters -h`" ]; then
> log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
> exit 0
> fi
>
> pg_lsclusters is a Perl application that gets most of its logic
> from PgCommon.pm. Its entry point into PgCommon.pm (the one we
> care about, anyway) is the subroutine &cluster_info.
> &cluster_info, at line 575, calls &get_cluster_socketdir. This
> subroutine, at line 360, gets the 'unix_socket_directories' value
> from the configuration file. If the value is defined in the
> configuration file (the default), it immediately returns that
> value to &cluster_info. This is important. If the value is
> *not* defined, then &get_cluster_socketdir defaults it to
> '/var/run/postgresql' and attempts to stat() this directory. As
> '/var/run' is now a tmpfs in Debian, this fails, because no
> attempt has been made to create that directory before the stat()
> runs.
>
> There are actually two bugs here. The first is attempting to
> stat() a directory that the code has not ensured exists, which is
> what this bug is about. The second, more general, is that the
> code makes no attempts at creating or even verifying the
> existence of any unix_socket_{directory,directories} before
> returning. I've attached a patch to the init script that ensures
> /var/run/postgresql actually exists before the code tries to
> stat() it.
>
> The reproduction steps for this bug are as follows:
>
> 1. install fresh Debian wheezy machine
> 2. Add official Postgres mirror to apt, installing the keyring
> for same
> 3. Install the Postgres server
> 4. Remove any unix_socket_{directory,directories} directive from
> /etc/postgresql/9.?/main/postgresql.conf
> 5. Reboot, observe Postgres startup failure
>
> I've been able to reproduce this 100% of the time with the above
> steps.
>
> --
> Chris Nehren
--
Chris Nehren
Attachment | Content-Type | Size |
---|---|---|
postgresql.mkdir.patch | text/x-diff | 873 bytes |