Hi Christoph,

Thanks for looking into this. I've managed to bash the original container
into installing the cluster, so it can't be used to properly debug this.
I've just setup a new one, as described in the original bug report, so I
can show you my findings.

In the clean install, "apt-get install postgresql" exhibits the error
described in the bug.

>From here:
root@debian-db:~# su - postgres
postgres@debian-db:~$ /bin/sh
$ exit
postgres@debian-db:~$ cat /etc/postgresql/9.4/main/postgresql.conf
cat: /etc/postgresql/9.4/main/postgresql.conf: Permission denied
postgres@debian-db:~$ ls -lah /etc/ | grep postgresql
drwxr-x---+  3 root root   4.0K Aug 17 08:49 postgresql
drwxr-xr-x+  3 root root   4.0K Aug 17 08:47 postgresql-common
postgres@debian-db:~$ exit

So, postgres seems able to execute /bin/sh just fine, but can't read the
postgresql.conf file, in line with the file permissions.

root@debian-db:~# pg_dropcluster 9.4 main
root@debian-db:~# chown postgres /etc/postgresql
root@debian-db:~# cd /tmp && pg_createcluster 9.4 main
Creating new cluster 9.4/main ...
  config /etc/postgresql/9.4/main
  data   /var/lib/postgresql/9.4/main
  locale en_US.UTF-8
Flags of /var/lib/postgresql/9.4/main set as -------------e-C
Warning: The socket directory for owners other than 'postgres'
defaults to /tmp. You might want to change the unix_socket_directories
parameter
in postgresql.conf to a more secure directory.
Error: could not open /etc/postgresql/9.4/main/postgresql.conf for reading
at /usr/share/perl5/PgCommon.pm line 194.
Can't exec "/bin/sh": Permission denied at /usr/bin/pg_createcluster line
590.

Same error. Strangely, now:

root@debian-db:/tmp# su - postgres
postgres@debian-db:~$ cat /etc/postgresql/9.4/main/postgresql.conf
[postgresql.conf content here]

So, the only option is a wrong error message.

If I edit the relevant section in /usr/bin/pg_createcluster, I can get it
to work. On line 417, there's this content:

set_cluster_socketdir $version, $cluster, $socketdir if $socketdir;
$> = $orig_euid;
$) = $orig_egid;

Change it to:

$> = $orig_euid;
$) = $orig_egid;
set_cluster_socketdir $version, $cluster, $socketdir if $socketdir;

(i.e. Run the config change as root, not as postgres, which is consistent
with the rest of the script). I think the error reported by PgCommon.pm is
wrong. It can't *write* the conf file, not *read*.

After the change, "pg_createcluster 9.4 main" runs just fine.

Now, for the cherry on top. The cluster won't start:

root@debian-db:/tmp# systemctl start postgresql@9.4-main.service
Job for postgresql@9.4-main.service failed because the control process
exited with error code. See "systemctl status postgresql@9.4-main.service"
and "journalctl -xe" for details.

systemctl status doesn't give any interesting info:
root@debian-db:/tmp# systemctl status postgresql@9.4-main.service
● postgresql@9.4-main.service - PostgreSQL Cluster 9.4-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled;
vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2015-08-17 09:09:28 UTC;
35s ago
  Process: 3198 ExecStart=postgresql@%i %i start (code=exited,
status=1/FAILURE)

Aug 17 09:08:57 debian-db systemd[1]: Starting PostgreSQL Cluster
9.4-main...
Aug 17 09:09:28 debian-db postgresql@9.4-main[3198]: The PostgreSQL server
failed to start. Please check the log output.
Aug 17 09:09:28 debian-db systemd[1]: postgresql@9.4-main.service: Control
process exited, code=exited status=1
Aug 17 09:09:28 debian-db systemd[1]: Failed to start PostgreSQL Cluster
9.4-main.
Aug 17 09:09:28 debian-db systemd[1]: postgresql@9.4-main.service: Unit
entered failed state.
Aug 17 09:09:28 debian-db systemd[1]: postgresql@9.4-main.service: Failed
with result 'exit-code'.

But it is again a question of permissions. /var/log/postgresql is owned by
root:postgres with permissions rwxrwxr-t. Within, postgresql-9.4-main.log
is owned by postgres:adm with permissions rw-r-----. It should work, but
postgresql complains it can't write to its log. I suppose the temporary
flag in the log directory may cause strange behaviour when the log file is
accessed by a different user/group pair (postgres:postgres vs
postgres:adm).

root@debian-db:/tmp# rm -Rf /var/log/postgresql/; mkdir
/var/log/postgresql/; chown postgres:postgres /var/log/postgresql/
root@debian-db:/tmp# systemctl start postgresql@9.4-main.service
root@debian-db:/tmp# echo $?
0

Sorry for the long mail. It was inevitable. It seems pg_createcluster is
actually wrong, the configuration change should be done as root (from what
I infer from the rest of the script). However, something in debian
triggered this, as it didn't use to happen (I last did this operation over
a year ago, so my the bisection is not much use, really).

If you need to play around with this install, I can try and get this
container online and accessible to you. Tell me if you need me to.

Cheers,
--
Sérgio Carvalho

On Fri, Aug 14, 2015 at 6:34 PM, Christoph Berg <m...@debian.org> wrote:

> Control: tags -1 moreinfo
>
> Re: Sergio Carvalho 2015-08-13
> <20150813184358.3021.68521.reportbug@profissional-db>
> > The installer produces this output:
> >
> > Setting up postgresql-9.4 (9.4.4-1) ...
> > Creating new cluster 9.4/main ...
> >   config /etc/postgresql/9.4/main
> >   data   /var/lib/postgresql/9.4/main
> >   locale en_US.UTF-8
> > Flags of /var/lib/postgresql/9.4/main set as -------------e-C
> > Warning: The socket directory for owners other than 'postgres'
> > defaults to /tmp. You might want to change the unix_socket_directories
> parameter
> > in postgresql.conf to a more secure directory.
> > Error: could not open /etc/postgresql/9.4/main/postgresql.conf for
> reading at /usr/share/perl5/PgCommon.pm line 194.
> > Can't exec "/bin/sh": Permission denied at /usr/bin/pg_createcluster
> line 590.
>
> Hi Sergio,
>
> to me it seems the /bin/sh error is the root of the problem. Could you
> check what's up with that? If that's broken it's no wonder the
> utilities fail in some way.
>
> Christoph
> --
> c...@df7cb.de | http://www.df7cb.de/
>



-- 
Sérgio Carvalho
_______________________________________________
Pkg-postgresql-public mailing list
Pkg-postgresql-public@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-postgresql-public

Reply via email to