Обсуждение: BUG #17647: 12.12 package has difference on ubuntu 18.04

Поиск
Список
Период
Сортировка

BUG #17647: 12.12 package has difference on ubuntu 18.04

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      17647
Logged by:          Mike Fröhner
Email address:      mikefroehner@gmx.de
PostgreSQL version: 12.12
Operating system:   Ubuntu 18.04
Description:

Hello,

today our CI noticed the upgrade of PostgreSQL to 12.12. We have a CI/CD
which tests our Puppet Module against Ubuntu 16./18./20./22.04. We run
different tests (kitchen-ci) including the following:
```
describe command('/usr/bin/sudo -u postgres psql -U myuser1 -h 127.0.0.1
mydb1 -c "CREATE TABLE foo (foo char);"') do
  its('exit_status') { should eq 0 }
  its('stdout') { should eq "CREATE TABLE\n" }
  its('stderr') { should eq '' }
end
```
Therefore we rollout a DB and a user via:
```
postgresql::databases:
  'mydb1':
    user: myuser1
    password: mypassword1
    host: 127.0.0.1/32
```
We also rollout a file:
```
  '/var/lib/postgresql/.pgpass':
    owner: postgres
    group: postgres
    mode: '0600'
    content: '*:*:*:myuser1:mypassword1'
    require_class: postgresql
```
This test only fails/times out on Ubuntu 18.04 because it is waiting for a
password input. With all other Ubuntu (16./20./22.04) this test succedds. Is
there anything wrong with my test or is the package for Ubuntu 18.04 broken?


Re: Aw: BUG #17647: 12.12 package has difference on ubuntu 18.04

От
Julien Rouhaud
Дата:
Hi,

On Tue, Oct 18, 2022 at 10:19:20AM +0200, Mike Fröhner wrote:
>
> <html>
>  <head>
>   <meta name="viewport" content="width=device-width">
>   <meta http-equiv="Content-Type" content="text/vnd.ui.insecure+html;charset=utf-8">
>  </head>
>  <body style="overflow-wrap:break-word; word-break: break-word;"><div class="mail_android_message"
style="line-height:1; padding: 0.5em">Hello<br/><br/>I have made some deeper investigation:<br/><br/>Steps to
reproduce:<br/><br/>```<br/>dockerpull ubuntu:18.04 && docker run -it --rm ubuntu:18.04 bash<br/>##
or<br/>dockerpull ubuntu:20.04 && docker run -it --rm ubuntu:20.04 bash<br/>## or<br/>docker pull ubuntu:22.04
&&docker run -it --rm ubuntu:22.04 bash<br/><br/><br/>apt-get update<br/>apt-get install -y vim strace less
curlca-certificates gnupg sudo lsb-release<br/><br/>curl <a
href="https://www.postgresql.org/media/keys/ACCC4CF8.asc">https://www.postgresql.org/media/keys/ACCC4CF8.asc</a>| gpg
--dearmor| sudo tee /etc/apt/<a href="http://trusted.gpg">trusted.gpg</a>.d/<a
href="http://apt.postgresql.org.gpg">apt.postgresql.org.gpg</a>>/dev/null<br/><br/>sh -c 'echo "deb <a
href="http://apt.postgresql.org/pub/repos/apt">http://apt.postgresql.org/pub/repos/apt</a>$(lsb_release -cs)-pgdg
main"> /etc/apt/<a href="http://sources.list">sources.list</a>.d/<a
href="http://pgdg.list">pgdg.list</a>'<br/>apt-getupdate<br/>apt-get install -y
postgresql-12<br/><br/>pg_ctlcluster12 main start<br/><br/>sudo -u postgres -i<br/>psql<br/>CREATE DATABASE
database_name;<br/>CREATEUSER my_username WITH PASSWORD 'my_password';<br/>GRANT ALL PRIVILEGES ON DATABASE
"database_name"to my_username;<br/>exit<br/><br/>echo '*:*:*:my_username:my_password' >
.pgpass<br/>chmod0600 .pgpass<br/>exit<br/><br/>##<br/>## this does not work for ubuntu 18.04 but for ubuntu
20.04/22.04<br/>##<br/>/usr/bin/sudo-u postgres psql -U my_username -h <a href="http://127.0.0.1">127.0.0.1</a>
database_name-c "CREATE TABLE foo (foo char);"<br/><br/>##<br/>## this works for all<br/>##<br/>sudo -u
postgres-i<br/>psql -U my_username -h <a href="http://127.0.0.1">127.0.0.1</a> database_name -c "CREATE TABLE foo
(foochar);"<br/>```<br/><br/>We have narrowed it down to three packages which have been upgraded on ubuntu 18.04
betweenworking and broken state:<br/>- `libpq5` upgraded from `14.5-1.pgdg18.04+1` to `15.0-1.pgdg18.04+1`<br/>-
`postgresql-client-common`and `postgresql-common` from `243.pgdg18.04+1` to `244.pgdg18.04+1`<br/><br/>None other
packageshave been upgraded (incl. ubuntu repo packages)!<br/><br/>For me it does look like a bug with in psql client
package.<br/><br/>regards<br/>Mike<br/><br/>--<br/>DieseNachricht wurde von meinem Android Mobiltelefon mit GMX Mail
gesendet.</div><divclass="mail_android_quote" style="line-height: 1; padding: 0.3em"><html><body>Am 17.10.22, 16:19
schriebPG Bug reporting form <noreply@postgresql.org>:</body></html><blockquote class="gmail_quote"
style="margin:0.8ex 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> 

You should configure your MUA to send plaintext too and not only html, as some
people can't (and don't want to) read html-only emails.  After reading it on
the html archives, I'm surprised to see that this would work at all on other
ubuntu versions, and it doesn't look like a bug in our code.  sudo without -i
will look for the .pgpass in the wrong place:

# sudo -u postgres bash -c "echo \$HOME"
/root

# sudo -iu postgres bash -c "echo \$HOME"
/var/lib/postgresql

Do you get a different behavior for those commands on other ubuntu versions?



Re:  BUG #17647: 12.12 package has difference on ubuntu 18.04

От
Julien Rouhaud
Дата:
On Tue, Oct 18, 2022 at 08:44:15PM +0800, Julien Rouhaud wrote:
> Hi,
>
> On Tue, Oct 18, 2022 at 10:19:20AM +0200, Mike Fröhner wrote:
> >
> > <html>
> >  <head>
> >   <meta name="viewport" content="width=device-width">
> >   <meta http-equiv="Content-Type" content="text/vnd.ui.insecure+html;charset=utf-8">
> >  </head>
> >  <body style="overflow-wrap:break-word; word-break: break-word;"><div class="mail_android_message"
style="line-height:1; padding: 0.5em">Hello<br/><br/>I have made some deeper investigation:<br/><br/>Steps to
reproduce:<br/><br/>```<br/>dockerpull ubuntu:18.04 && docker run -it --rm ubuntu:18.04 bash<br/>##
or<br/>dockerpull ubuntu:20.04 && docker run -it --rm ubuntu:20.04 bash<br/>## or<br/>docker pull ubuntu:22.04
&&docker run -it --rm ubuntu:22.04 bash<br/><br/><br/>apt-get update<br/>apt-get install -y vim strace less
curlca-certificates gnupg sudo lsb-release<br/><br/>curl <a
href="https://www.postgresql.org/media/keys/ACCC4CF8.asc">https://www.postgresql.org/media/keys/ACCC4CF8.asc</a>| gpg
--dearmor| sudo tee /etc/apt/<a href="http://trusted.gpg">trusted.gpg</a>.d/<a
href="http://apt.postgresql.org.gpg">apt.postgresql.org.gpg</a>>/dev/null<br/><br/>sh -c 'echo "deb <a
href="http://apt.postgresql.org/pub/repos/apt">http://apt.postgresql.org/pub/repos/apt</a>$(lsb_release -cs)-pgdg
main"> /etc/apt/<a href="http://sources.list">sources.list</a>.d/<a
href="http://pgdg.list">pgdg.list</a>'<br/>apt-getupdate<br/>apt-get install -y
postgresql-12<br/><br/>pg_ctlcluster12 main start<br/><br/>sudo -u postgres -i<br/>psql<br/>CREATE DATABASE
database_name;<br/>CREATEUSER my_username WITH PASSWORD 'my_password';<br/>GRANT ALL PRIVILEGES ON DATABASE
"database_name"to my_username;<br/>exit<br/><br/>echo '*:*:*:my_username:my_password' >
.pgpass<br/>chmod0600 .pgpass<br/>exit<br/><br/>##<br/>## this does not work for ubuntu 18.04 but for ubuntu
20.04/22.04<br/>##<br/>/usr/bin/sudo-u postgres psql -U my_username -h <a href="http://127.0.0.1">127.0.0.1</a>
database_name-c "CREATE TABLE foo (foo char);"<br/><br/>##<br/>## this works for all<br/>##<br/>sudo -u
postgres-i<br/>psql -U my_username -h <a href="http://127.0.0.1">127.0.0.1</a> database_name -c "CREATE TABLE foo
(foochar);"<br/>```<br/><br/>We have narrowed it down to three packages which have been upgraded on ubuntu 18.04
betweenworking and broken state:<br/>- `libpq5` upgraded from `14.5-1.pgdg18.04+1` to `15.0-1.pgdg18.04+1`<br/>-
`postgresql-client-common`and `postgresql-common` from `243.pgdg18.04+1` to `244.pgdg18.04+1`<br/><br/>None other
packageshave been upgraded (incl. ubuntu repo packages)!<br/><br/>For me it does look like a bug with in psql client
package.<br/><br/>regards<br/>Mike<br/><br/>--<br/>DieseNachricht wurde von meinem Android Mobiltelefon mit GMX Mail
gesendet.</div><divclass="mail_android_quote" style="line-height: 1; padding: 0.3em"><html><body>Am 17.10.22, 16:19
schriebPG Bug reporting form <noreply@postgresql.org>:</body></html><blockquote class="gmail_quote"
style="margin:0.8ex 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> 
>
> You should configure your MUA to send plaintext too and not only html, as some
> people can't (and don't want to) read html-only emails.  After reading it on
> the html archives, I'm surprised to see that this would work at all on other
> ubuntu versions, and it doesn't look like a bug in our code.  sudo without -i
> will look for the .pgpass in the wrong place:
>
> # sudo -u postgres bash -c "echo \$HOME"
> /root
>
> # sudo -iu postgres bash -c "echo \$HOME"
> /var/lib/postgresql
>
> Do you get a different behavior for those commands on other ubuntu versions?

Scratch that, after checking the code I can see that up to version 14 we were
only relying on getpwuid or getpwuid_r (which would work with or without -i),
but starting with pg15 we first look at the $HOME variable which indeed is
problematic.

This was introduced in 376ce3e404b, per request at
https://www.postgresql.org/message-id/1634252654444.90107@mit.edu:

> According to getpwnam(3):
>
>   An application that wants to determine its user's home directory
>   should inspect the value of HOME (rather than the value
>   getpwuid(getuid())->pw_dir) since this allows the user to modify
>   their notion of "the home directory" during a login session.

So there is indeed a behavior change, but it's wanted and documented in the
release notes.



Aw: Re:  BUG #17647: 12.12 package has difference on ubuntu 18.04

От
Mike Fröhner
Дата:
Gesendet: Dienstag, 18. Oktober 2022 um 15:25 Uhr
Von: "Julien Rouhaud" <rjuju123@gmail.com>
An: "Mike Fröhner" <mikefroehner@gmx.de>
Cc: pgsql-bugs@lists.postgresql.org
Betreff: Re:  BUG #17647: 12.12 package has difference on ubuntu 18.04
On Tue, Oct 18, 2022 at 08:44:15PM +0800, Julien Rouhaud wrote:

>> You should configure your MUA to send plaintext too and not only html, as some
>> people can't (and don't want to) read html-only emails. After reading it on
>> the html archives, I'm surprised to see that this would work at all on other
>> ubuntu versions, and it doesn't look like a bug in our code. sudo without -i
>> will look for the .pgpass in the wrong place:
>>
>> # sudo -u postgres bash -c "echo \$HOME"
>> /root
>>
>> # sudo -iu postgres bash -c "echo \$HOME"
>> /var/lib/postgresql
>>
>> Do you get a different behavior for those commands on other ubuntu versions?

> Scratch that, after checking the code I can see that up to version 14 we were
> only relying on getpwuid or getpwuid_r (which would work with or without -i),
> but starting with pg15 we first look at the $HOME variable which indeed is
> problematic.

> This was introduced in 376ce3e404b, per request at
>
https://www.postgresql.org/message-id/1634252654444.90107@mit.edu[https://www.postgresql.org/message-id/1634252654444.90107@mit.edu]:

>> According to getpwnam(3):
>>
>> An application that wants to determine its user's home directory
>> should inspect the value of HOME (rather than the value
>> getpwuid(getuid())->pw_dir) since this allows the user to modify
>> their notion of "the home directory" during a login session.

> So there is indeed a behavior change, but it's wanted and documented in the
> release notes.

Sorry about HTML, I am not used to mailing-lists anymore. :(

I have verified that your suggestion works (with added -i flag for sudo):
# /usr/bin/sudo -iu postgres psql -U my_username -h 127.0.0.1 database_name -c "CREATE TABLE foo1 (foo1 char);"
CREATE TABLE

I have also tested the following command successfully (using su instead of sudo):
# su postgres -c 'psql -U my_username -h 127.0.0.1 database_name -c "CREATE TABLE foo2 (foo2 char);"'
CREATE TABLE

But to ensure we understand correctly - I am not talking about pg14 or pg15. We have noticed the changed behavior ONLY
whileusing postgresql-12 package on Ubuntu 18.04 with libpq5 upgraded from 14.5-1.pgdg18.04+1 to 15.0-1.pgdg18.04+1 and
postgresql-client-common+ postgresql-common upgraded from 243.pgdg18.04+1 to 244.pgdg18.04+1. With the previous
versionsof the packages, the mentioned command (without -i flag) works on all tested Ubuntu (16-22.04). With the
upgradedpackages we have to add the -i flag to make it work. The used version of postgresql-12 is always the same:
12.12-1.pgdg18.04+1for Ubuntu 18.04 and 12.12-1.pgdg20.04+1 for Ubuntu 20.04. 

We also made a diff of `dpkg -l`-output (We have daily snapshots of the mirrored repository, so we can switch between
differentstates). The diff only showed the 3 mentioned upgraded packages, even packages from Ubuntu repository haven't
beenupgraded.  

For now I am fine with adjusted command in our testing suite. But it is still strange the same command works on all
versionsof Ubuntu LTS but not on Ubuntu 18.04. I am not sure if there are differences between the compiled packages of
18.04and 2[02].04 (different flags for compiling, ...) or if they just have different dependencies (which would be
reasonablefor me). Their versions indicate they should be compiled from the same code. 

If you don't want to investigate this strange behavior anymore I am fine.

regards
Mike




Re: Aw: Re:  BUG #17647: 12.12 package has difference on ubuntu 18.04

От
Tom Lane
Дата:
=?UTF-8?Q?Mike_Fr=C3=B6hner?= <mikefroehner@gmx.de> writes:
> But to ensure we understand correctly - I am not talking about pg14 or
> pg15. We have noticed the changed behavior ONLY while using
> postgresql-12 package on Ubuntu 18.04 with libpq5 upgraded from
> 14.5-1.pgdg18.04+1 to 15.0-1.pgdg18.04+1 and postgresql-client-common +
> postgresql-common upgraded from 243.pgdg18.04+1 to 244.pgdg18.04+1.

It's libpq that determines this behavior, not the server, so I find
nothing whatever surprising in your statement.

> For now I am fine with adjusted command in our testing suite. But it is
> still strange the same command works on all versions of Ubuntu LTS but
> not on Ubuntu 18.04.

Probably they've not updated libpq so quickly in the LTS distros.

            regards, tom lane