undefined symbol when installing pgcrypto on 16.1

Started by Michael Nolanover 2 years ago14 messagesgeneral
Jump to latest
#1Michael Nolan
htfoot@gmail.com

This is on AlmaLinux 9.3, installing postgresql from source code.

In PG 16.1 when I try to install pgcrypto, the modules compile but I
get this error when running checks:

CREATE EXTENSION pgcrypto;
+ERROR: could not load library
"/home/postgres/src/postgresql-16.1/tmp_install/usr/local/pgsql/lib/
pgcrypto.so": /home/postgres/src/postgresql-16.1/tmp_install/usr/local/pgsql/lib/pgcrypto.so:
undefi
ned symbol: EVP_cast5_cbc

Mike Nolan
htfoot@gmail.com

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Nolan (#1)
Re: undefined symbol when installing pgcrypto on 16.1

Michael Nolan <htfoot@gmail.com> writes:

This is on AlmaLinux 9.3, installing postgresql from source code.
In PG 16.1 when I try to install pgcrypto, the modules compile but I
get this error when running checks:

CREATE EXTENSION pgcrypto;
+ERROR: could not load library
"/home/postgres/src/postgresql-16.1/tmp_install/usr/local/pgsql/lib/
pgcrypto.so": /home/postgres/src/postgresql-16.1/tmp_install/usr/local/pgsql/lib/pgcrypto.so:
undefined symbol: EVP_cast5_cbc

That should be supplied by OpenSSL. Are you using some weird
version of openssl? Did you get any warnings during build?

regards, tom lane

#3Michael Nolan
htfoot@gmail.com
In reply to: Tom Lane (#2)
Re: undefined symbol when installing pgcrypto on 16.1

Sorry for the delay in responding, network issues kept me offline for
several days.

These are the openssl packages installed from the Almalinux 9 repositories:

apr-util-openssl.x86_64 1.6.1-23.el9 @appstream
openssl.x86_64 1:3.0.7-24.el9 @anaconda
openssl-devel.x86_64 1:3.0.7-24.el9 @appstream
openssl-libs.x86_64 1:3.0.7-24.el9 @anaconda

I reinstalled the devel package, still get the same unresolved symbol error.

Mike Nolan

#4Daniel Gustafsson
daniel@yesql.se
In reply to: Michael Nolan (#3)
Re: undefined symbol when installing pgcrypto on 16.1

On 18 Jan 2024, at 00:24, Michael Nolan <htfoot@gmail.com> wrote:

Sorry for the delay in responding, network issues kept me offline for
several days.

These are the openssl packages installed from the Almalinux 9 repositories:

apr-util-openssl.x86_64 1.6.1-23.el9 @appstream
openssl.x86_64 1:3.0.7-24.el9 @anaconda
openssl-devel.x86_64 1:3.0.7-24.el9 @appstream
openssl-libs.x86_64 1:3.0.7-24.el9 @anaconda

I reinstalled the devel package, still get the same unresolved symbol error.

My memory is failing me, but isn't CAST5 only available when loading the legacy
provider in OpenSSL 3? Which providers are loaded in your openssl config?

--
Daniel Gustafsson

#5Michael Nolan
htfoot@gmail.com
In reply to: Daniel Gustafsson (#4)
Re: undefined symbol when installing pgcrypto on 16.1

On Wed, Jan 17, 2024 at 5:32 PM Daniel Gustafsson <daniel@yesql.se> wrote:

On 18 Jan 2024, at 00:24, Michael Nolan <htfoot@gmail.com> wrote:

Sorry for the delay in responding, network issues kept me offline for
several days.

These are the openssl packages installed from the Almalinux 9 repositories:

apr-util-openssl.x86_64 1.6.1-23.el9 @appstream
openssl.x86_64 1:3.0.7-24.el9 @anaconda
openssl-devel.x86_64 1:3.0.7-24.el9 @appstream
openssl-libs.x86_64 1:3.0.7-24.el9 @anaconda

I reinstalled the devel package, still get the same unresolved symbol error.

My memory is failing me, but isn't CAST5 only available when loading the legacy
provider in OpenSSL 3? Which providers are loaded in your openssl config?

--
Daniel Gustafsson

The legacy providers were enabled, disabling them worked. (The build
took a lot longer, too, but there were no obvious messages about
problems with the legacy providers enabled untilI ran the check.)

Thanks, Daniel.

#6Daniel Gustafsson
daniel@yesql.se
In reply to: Michael Nolan (#5)
Re: undefined symbol when installing pgcrypto on 16.1

On 18 Jan 2024, at 00:59, Michael Nolan <htfoot@gmail.com> wrote:
On Wed, Jan 17, 2024 at 5:32 PM Daniel Gustafsson <daniel@yesql.se> wrote:

On 18 Jan 2024, at 00:24, Michael Nolan <htfoot@gmail.com> wrote:

I reinstalled the devel package, still get the same unresolved symbol error.

My memory is failing me, but isn't CAST5 only available when loading the legacy
provider in OpenSSL 3? Which providers are loaded in your openssl config?

The legacy providers were enabled, disabling them worked. (The build
took a lot longer, too, but there were no obvious messages about
problems with the legacy providers enabled untilI ran the check.)

That's surprising, I expected that it would require the legacy provider be
loaded, not the other way around. OpenSSL works in mysterious ways though.

--
Daniel Gustafsson

#7Michael Nolan
htfoot@gmail.com
In reply to: Daniel Gustafsson (#6)
Re: undefined symbol when installing pgcrypto on 16.1

On Thu, Jan 18, 2024 at 5:03 AM Daniel Gustafsson <daniel@yesql.se> wrote:

On 18 Jan 2024, at 00:59, Michael Nolan <htfoot@gmail.com> wrote:
On Wed, Jan 17, 2024 at 5:32 PM Daniel Gustafsson <daniel@yesql.se> wrote:

That's surprising, I expected that it would require the legacy provider be
loaded, not the other way around. OpenSSL works in mysterious ways though.

--
Daniel Gustafsson

Turns out that was premature, when I rebuilt postgres to add other
modules I needed, like plperl, the missing symbols issue came back.
So now I'm not sure why it (apparently briefly) worked. I'm assuming
it's an issue with the AlmaLinux 9 version of openssl. I don't know if
compiling it from source would fix the problem, but I may try that
after checking with the AlmaLinux folks.

Would I be correct to assume the postgresql build farm doesn't include
AlmaLinux 9 to test it.

Mike Nolan

#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Nolan (#7)
Re: undefined symbol when installing pgcrypto on 16.1

Michael Nolan <htfoot@gmail.com> writes:

Would I be correct to assume the postgresql build farm doesn't include
AlmaLinux 9 to test it.

No, you wouldn't:

https://buildfarm.postgresql.org/cgi-bin/show_status.pl

Looks like we have aarch64 and ppc64 machines running Alma 8 and 9.
No x86 though, which might matter for such a low-level failure
as this.

regards, tom lane

#9Michael Nolan
htfoot@gmail.com
In reply to: Tom Lane (#8)
Re: undefined symbol when installing pgcrypto on 16.1

On Thu, Jan 18, 2024 at 9:51 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Looks like we have aarch64 and ppc64 machines running Alma 8 and 9.
No x86 though, which might matter for such a low-level failure
as this.

So I guess that'll be on the list to add to the build farm at some
point? (My Xanthian 'talent' of finding bugs continues, lucky me!)

I get the impression AlmaLinux 9 isn't as widely used as Centos was
yet. (I tend to follow my son's recommendation for which Linux distro
to use, he's an SRE currently at YugaByte, which uses postgresql as a
front end to their custom storage back end.)

Mike Nolan

#10Michael Nolan
htfoot@gmail.com
In reply to: Michael Nolan (#9)
Re: undefined symbol when installing pgcrypto on 16.1

Writing or debugging makefiles is something I haven't done much of,
but as best I can figure out the problem is that the libcrypto.so file
isn't being linked in, though this line in the Makefile in pgcrypto
seems to say should be:

SHLIB_LINK += $(filter -lcrypto -lz, $(LIBS))

I'm guessing it is supposed to pick up the LIBS list from the top
Makefile, but isn't.

If I add this:

SHLIB_LINK += -lcrypto

'make clean' now passes all tests.
--
Mike Nolan

#11Michael Nolan
htfoot@gmail.com
In reply to: Michael Nolan (#10)
Re: undefined symbol when installing pgcrypto on 16.1

Sorry, I meant 'make check'. :sigh:

#12Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Nolan (#10)
Re: undefined symbol when installing pgcrypto on 16.1

Michael Nolan <htfoot@gmail.com> writes:

Writing or debugging makefiles is something I haven't done much of,
but as best I can figure out the problem is that the libcrypto.so file
isn't being linked in, though this line in the Makefile in pgcrypto
seems to say should be:

SHLIB_LINK += $(filter -lcrypto -lz, $(LIBS))

I'm guessing it is supposed to pick up the LIBS list from the top
Makefile, but isn't.

What that does is to select "-lcrypto" (and "-lz", but that's not
relevant now) out of the LIBS variable. The configure script
should have included that in LIBS if you specified
--with-openssl, but maybe it failed to. Can you check the
configured value of LIBS (in src/Makefile.global) to see?

If it's not there, it would be useful to see the contents of
the config.log log file.

regards, tom lane

#13Michael Nolan
htfoot@gmail.com
In reply to: Tom Lane (#12)
Re: undefined symbol when installing pgcrypto on 16.1

No, it wasn't there, because I hadn't included --with-openssl in the
configure. Looking at my history, I had done that once earlier but
dropped it for the reason noted below.

Including --with-openssl does include the crypto library, but if I
don't do a 'make clean' before doing a make, I get errors when
compiling postgresql. Apparently is it always a good idea to do make
clean when reconfiguring postgresql. (Could configure do a 'make
clean'?)

Anyway, everything's apparently working now.
--
Mike Nolan

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Nolan (#13)
Re: undefined symbol when installing pgcrypto on 16.1

Michael Nolan <htfoot@gmail.com> writes:

Including --with-openssl does include the crypto library, but if I
don't do a 'make clean' before doing a make, I get errors when
compiling postgresql. Apparently is it always a good idea to do make
clean when reconfiguring postgresql.

Indeed. In theory, if you use --enable-depend, you needn't do
"make clean". But I don't trust that a whole lot personally.
I find that using ccache gets most of the win with fewer assumptions.

regards, tom lane