Обсуждение: FreeBSD 12 and Postgres build failures

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

FreeBSD 12 and Postgres build failures

От
Karl Denninger
Дата:

Both 10.7 and 11.2 fail on FreeBSD 12-STABLE if --with-openssl is part of the configure string.

The issue appears to be that FreeBSD updated OpenSSL to OpenSSL 1.1.1a-freebsd  20 Nov 2018 where the 11.x release of FreeBSD (and previous was on 1.0.x -- e.g. OpenSSL 1.0.2o-freebsd  27 Mar 2018)

The errors start here:

gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -O2 -I../../../src/include    -c -o be-secure-openssl.o be-secure-openssl.c
be-secure-openssl.c: In function 'be_tls_init':
be-secure-openssl.c:85:3: warning: implicit declaration of function 'OPENSSL_init_ssl'; did you mean 'OPENSSL_init'? [-Wimplicit-function-declaration]
   OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL);
   ^~~~~~~~~~~~~~~~
   OPENSSL_init
be-secure-openssl.c:85:20: error: 'OPENSSL_INIT_LOAD_CONFIG' undeclared (first use in this function); did you mean 'OPENSSL_NO_PADLOCK'?
   OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL);
                    ^~~~~~~~~~~~~~~~~~~~~~~~
                    OPENSSL_NO_PADLOCK
be-secure-openssl.c:85:20: note: each undeclared identifier is reported only once for each function it appears in
be-secure-openssl.c: In function 'my_sock_read':
be-secure-openssl.c:665:35: warning: implicit declaration of function 'BIO_get_data'; did you mean 'BIO_get_ex_data'? [-Wimplicit-function-declaration]
   res = secure_raw_read(((Port *) BIO_get_data(h)), buf, size);
                                   ^~~~~~~~~~~~
                                   BIO_get_ex_data
be-secure-openssl.c:665:26: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
   res = secure_raw_read(((Port *) BIO_get_data(h)), buf, size);
                          ^

Has anyone looked into and dealt with this yet or have suggestions?

--
Karl Denninger
karl@denninger.net
The Market Ticker
[S/MIME encrypted email preferred]
Вложения

Re: FreeBSD 12 and Postgres build failures

От
Tom Lane
Дата:
Karl Denninger <karl@denninger.net> writes:
> Both 10.7 and 11.2 fail on FreeBSD 12-STABLE if --with-openssl is part
> of the configure string.

Hmmm ... I don't have that exact configuration handy to try, but
we know that PG works against OpenSSL 1.1.1a in principle, and
it does work for me with FreeBSD 12.0-RC1 from mid-November,
which contains
# openssl version
OpenSSL 1.1.1-freebsd  11 Sep 2018

The error you quote looks a bit like bad decisions in PG's configure
script --- maybe you need to re-run configure?  Be sure to blow
away any autoconf cache file if you're using one.

            regards, tom lane


Re: FreeBSD 12 and Postgres build failures

От
Thomas Munro
Дата:
On Wed, Mar 20, 2019 at 11:13 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Karl Denninger <karl@denninger.net> writes:
> > Both 10.7 and 11.2 fail on FreeBSD 12-STABLE if --with-openssl is part
> > of the configure string.
>
> Hmmm ... I don't have that exact configuration handy to try, but
> we know that PG works against OpenSSL 1.1.1a in principle, and
> it does work for me with FreeBSD 12.0-RC1 from mid-November,
> which contains
> # openssl version
> OpenSSL 1.1.1-freebsd  11 Sep 2018
>
> The error you quote looks a bit like bad decisions in PG's configure
> script --- maybe you need to re-run configure?  Be sure to blow
> away any autoconf cache file if you're using one.

Builds OK for me on FreeBSD 12.0-RELEASE (using OpenSSL 1.1.1a-freebsd
from base system), tested with PostgreSQL REL_11_STABLE.  +1 for the
autoconf cache theory.

-- 
Thomas Munro
https://enterprisedb.com


Re: FreeBSD 12 and Postgres build failures

От
Andrew Gierth
Дата:
>>>>> "Karl" == Karl Denninger <karl@denninger.net> writes:

 Karl> Both 10.7 and 11.2 fail on FreeBSD 12-STABLE if --with-openssl is
 Karl> part of the configure string.

Nope, they work fine for me, running under 12-stable as of a couple of
weeks ago.

-- 
Andrew (irc:RhodiumToad)


Re: FreeBSD 12 and Postgres build failures

От
Karl Denninger
Дата:


On 3/19/2019 17:12, Tom Lane wrote:
Karl Denninger <karl@denninger.net> writes:
Both 10.7 and 11.2 fail on FreeBSD 12-STABLE if --with-openssl is part
of the configure string.
Hmmm ... I don't have that exact configuration handy to try, but
we know that PG works against OpenSSL 1.1.1a in principle, and
it does work for me with FreeBSD 12.0-RC1 from mid-November,
which contains
# openssl version
OpenSSL 1.1.1-freebsd  11 Sep 2018

The error you quote looks a bit like bad decisions in PG's configure
script --- maybe you need to re-run configure?  Be sure to blow
away any autoconf cache file if you're using one.
		regards, tom lane

That was on a bare, new grab of the source from your repository and a straight-up run of "./configure --with-openssl --with-perl", then "gmake".

It's a new directory tree - there's no autoconf or other cache files laying around.

Same grab on FreeBSD 11.x builds fine.

Digging around I had the openssl-1.0.2r port on the system, which used to be necessary for some other stuff back before 12.x.  I've removed it and it looks like that took care of it; for whatever reason configure was getting confused (in theory this shouldn't get you, but theory and practice sometimes don't play nice. :-)

Thanks for the confirm that others do have it working; gave me a place to start looking for the issue.

--
Karl Denninger
karl@denninger.net
The Market Ticker
[S/MIME encrypted email preferred]
Вложения

Re: FreeBSD 12 and Postgres build failures

От
Thomas Munro
Дата:
On Wed, Mar 20, 2019 at 11:33 AM Karl Denninger <karl@denninger.net> wrote:
> Digging around I had the openssl-1.0.2r port on the system, which used to be necessary for some other stuff back
before12.x.  I've removed it and it looks like that took care of it; for whatever reason configure was getting confused
(intheory this shouldn't get you, but theory and practice sometimes don't play nice. :-) 

Hmm.  I guess it'd be good not to get confused between ports and base
OpenSSL installations...  is there something we're doing wrong that
makes that happen?

--
Thomas Munro
https://enterprisedb.com


Re: FreeBSD 12 and Postgres build failures

От
Andrew Gierth
Дата:
>>>>> "Karl" == Karl Denninger <karl@denninger.net> writes:

 Karl> That was on a bare, new grab of the source from your repository and a
 Karl> straight-up run of "./configure --with-openssl --with-perl", then "gmake".

That's a configure line that has never worked on FreeBSD:

% ./configure --with-openssl --with-perl
[...]
configure: error: readline header not found
If you have libedit already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable libedit support.
%

(If you don't use --without-readline then you must add
--with-includes=/usr/local/include and --with-libs=/usr/local/lib to
pick up either ports readline or ports libedit. Or you might be able to
use --with-includes=/usr/include/edit to get base system libedit, but
that's not really the recommended method. Besides libedit sucks for
actual use so you want readline anyway.)

If you didn't explicitly specify any of those, but configure found a
readline to use anyway, then it means you have defined some non-standard
compiler options or have messed with the include paths in some other
way, which could be relevant to your problem.

-- 
Andrew (irc:RhodiumToad)


Re: FreeBSD 12 and Postgres build failures

От
Karl Denninger
Дата:


On 3/19/2019 18:15, Andrew Gierth wrote:
"Karl" == Karl Denninger <karl@denninger.net> writes:
Karl> That was on a bare, new grab of the source from your repository and aKarl> straight-up run of "./configure --with-openssl --with-perl", then "gmake".

That's a configure line that has never worked on FreeBSD:

% ./configure --with-openssl --with-perl
[...]
configure: error: readline header not found
If you have libedit already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable libedit support.
%

Uh, it has worked on all my FreeBSD systems for a very long time; I've been running Postgres as the backend for a web forum/blogging system for the last many years.  Then again:

[karl@NewFS ~]$ pkg info|grep readline
readline-7.0.5                 Library for editing command lines as they are typed

--
Karl Denninger
karl@denninger.net
The Market Ticker
[S/MIME encrypted email preferred]
Вложения

Re: FreeBSD 12 and Postgres build failures

От
Andrew Gierth
Дата:
>>>>> "Karl" == Karl Denninger <karl@denninger.net> writes:

 >> That's a configure line that has never worked on FreeBSD:
 >> 
 >> % ./configure --with-openssl --with-perl
 >> [...]
 >> configure: error: readline header not found
 >> If you have libedit already installed, see config.log for details on the
 >> failure.  It is possible the compiler isn't looking in the proper directory.
 >> Use --without-readline to disable libedit support.
 >> %

 Karl> Uh, it has worked on all my FreeBSD systems for a very long time;

Then you have done something non-standard, because "cc" on FreeBSD does
not look in /usr/local/include or /usr/local/lib without being told to
do so, and the configure checks for readline will fail without that.
Possible explanations include having a "gcc" (without a specific version
suffix) on the $PATH (gcc will be chosen over cc in that case), or
having configured CFLAGS or CPPFLAGS in the environment to ./configure.

You might post your full output of ./configure rather than leaving us to
guess at it.

-- 
Andrew (irc:RhodiumToad)


Re: FreeBSD 12 and Postgres build failures

От
Karl Denninger
Дата:
On 3/19/2019 21:12, Andrew Gierth wrote:
"Karl" == Karl Denninger <karl@denninger.net> writes:
>> That's a configure line that has never worked on FreeBSD:>> >> % ./configure --with-openssl --with-perl>> [...]>> configure: error: readline header not found>> If you have libedit already installed, see config.log for details on the>> failure.  It is possible the compiler isn't looking in the proper directory.>> Use --without-readline to disable libedit support.>> %
Karl> Uh, it has worked on all my FreeBSD systems for a very long time;

Then you have done something non-standard, because "cc" on FreeBSD does
not look in /usr/local/include or /usr/local/lib without being told to
do so, and the configure checks for readline will fail without that.
Possible explanations include having a "gcc" (without a specific version
suffix) on the $PATH (gcc will be chosen over cc in that case), or
having configured CFLAGS or CPPFLAGS in the environment to ./configure.

You might post your full output of ./configure rather than leaving us to
guess at it.

"cc" on FreeBSD is now (and has been for quite some time) clang: root@NewFS:/home/karl # cc -v

FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1)
Target: x86_64-unknown-freebsd12.0
Thread model: posix
InstalledDir: /usr/bin

If it will compile Postgres now it definitely would not when it was first shifted to; gcc, on the other hand (and gmake) does just fine and yes, they are ports (packages in this case as they're binary installs on this box) and not part of the base system:

root@NewFS:/home/karl # which gcc
/usr/local/bin/gcc
root@NewFS:/home/karl # gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc8/gcc/x86_64-portbld-freebsd12.0/8.3.0/lto-wrapper
Target: x86_64-portbld-freebsd12.0
Configured with: /wrkdirs/usr/ports/lang/gcc8/work/gcc-8.3.0/configure --with-build-config=bootstrap-debug --disable-nls --enable-gnu-indirect-function --libdir=/usr/local/lib/gcc8 --libexecdir=/usr/local/libexec/gcc8 --program-suffix=8 --with-as=/usr/local/bin/as --with-gmp=/usr/local --with-gxx-include-dir=/usr/local/lib/gcc8/include/c++/ --with-ld=/usr/local/bin/ld --with-pkgversion='FreeBSD Ports Collection' --with-system-zlib --enable-languages=c,c++,objc,fortran --prefix=/usr/local --localstatedir=/var --mandir=/usr/local/man --infodir=/usr/local/share/info/gcc8 --build=x86_64-portbld-freebsd12.0
Thread model: posix
gcc version 8.3.0 (FreeBSD Ports Collection)

I'll spin up a test machine on a "virgin" install when I get one free from other things and see exactly what I have to put on there in terms of ports.

In any event with the removal of the openssl port it now configures, compiles, links and runs.

config.log makes clear it is using gcc (as did the blowup)

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by PostgreSQL configure 11.2, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ./configure --with-openssl --with-perl

## --------- ##
## Platform. ##
## --------- ##

hostname = NewFS.denninger.net
uname -m = amd64
uname -r = 12.0-STABLE
uname -s = FreeBSD
uname -v = FreeBSD 12.0-STABLE r343809 KSD-SMP

/usr/bin/uname -p = amd64
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /sbin
PATH: /bin
PATH: /usr/sbin
PATH: /usr/bin
PATH: /usr/local/sbin
PATH: /usr/local/bin
PATH: /root/bin


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2840: checking build system type
configure:2854: result: x86_64-unknown-freebsd12.0
configure:2874: checking host system type
configure:2887: result: x86_64-unknown-freebsd12.0
configure:2909: checking which template to use
configure:2977: result: freebsd
configure:3102: checking whether NLS is wanted
configure:3134: result: no
configure:3142: checking for default port number
configure:3167: result: 5432
configure:3672: checking for block size
configure:3706: result: 8kB
configure:3718: checking for segment size
configure:3747: result: 1GB
configure:3759: checking for WAL block size
configure:3794: result: 8kB
configure:3891: checking for gcc
configure:3907: found /usr/local/bin/gcc
configure:3918: result: gcc
configure:3949: checking for C compiler version
configure:3958: gcc --version >&5
gcc (FreeBSD Ports Collection) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:3969: $? = 0
configure:3958: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc8/gcc/x86_64-portbld-freebsd12.0/8.3.0/lto-wrapper
Target: x86_64-portbld-freebsd12.0
Configured with: /wrkdirs/usr/ports/lang/gcc8/work/gcc-8.3.0/configure --with-build-config=bootstrap-debug --disable-nls --enable-gnu-indirect-function --libdir=/usr/local/lib/gcc8 --libexecdir=/usr/local/libexec/gcc8 --program-suffix=8 --with-as=/usr/local/bin/as --with-gmp=/usr/local --with-gxx-include-dir=/usr/local/lib/gcc8/include/c++/ --with-ld=/usr/local/bin/ld --with-pkgversion='FreeBSD Ports Collection' --with-system-zlib --enable-languages=c,c++,objc,fortran --prefix=/usr/local --localstatedir=/var --mandir=/usr/local/man --infodir=/usr/local/share/info/gcc8 --build=x86_64-portbld-freebsd12.0
Thread model: posix
gcc version 8.3.0 (FreeBSD Ports Collection)
configure:3969: $? = 0
configure:3958: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:3969: $? = 1
configure:3958: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'; did you mean '--version'?
gcc: fatal error: no input files
compilation terminated.

..... (the whole file is over 10k lines....)

--
Karl Denninger
karl@denninger.net
The Market Ticker
[S/MIME encrypted email preferred]
Вложения

Re: FreeBSD 12 and Postgres build failures

От
Andrew Gierth
Дата:
>>>>> "Karl" == Karl Denninger <karl@denninger.net> writes:

 Karl> "cc" on FreeBSD is now (and has been for quite some time) clang:

 Karl> If it will compile Postgres now it definitely would not when it
 Karl> was first shifted to;

People have been building PG with clang since at least as far back as
clang 3.1, and the FreeBSD 10.0 (which I believe was the first FreeBSD
release where clang was the default) package builds of PG were built
with clang 3.3. (Now, of course, clang is _required_ if you want to try
out the new JIT features.)

Building with gcc on FreeBSD is not the default on a clean system, and
as we've recently seen with another report, there are issues with mixing
the gcc and llvm toolchains on some architectures that are not in any
way PG's problem to solve. (Though the fact that we prefer gcc to cc in
configure if both are found is a decision that should probably be
revisited, given that the reasons for that preference are mostly
consigned to the graveyard of commercial Unix variants.)

You might also have considered that the fact that package builds exist
for pg 10 and 11 on FreeBSD 12 is a demonstration that building them is,
in fact, possible on a clean system...

 Karl> root@NewFS:/home/karl # which gcc
 Karl> /usr/local/bin/gcc

I had not previously noticed that the lang/gcc metaport (which I have
never installed, though I have lang/gcc8 installed at the moment)
installs a symlink to the selected gcc version as just "gcc". That
explains a lot.

-- 
Andrew (irc:RhodiumToad)


Re: FreeBSD 12 and Postgres build failures

От
Thomas Munro
Дата:
On Wed, Mar 20, 2019 at 6:41 PM Andrew Gierth
<andrew@tao11.riddles.org.uk> wrote:
> ... (Though the fact that we prefer gcc to cc in
> configure if both are found is a decision that should probably be
> revisited, given that the reasons for that preference are mostly
> consigned to the graveyard of commercial Unix variants.)

+1

I'm not against looking for gcc and g++ if cc and c++ can't be found,
but preferring them (ie implying that some random GCC found on the
path that you didn't explicitly ask for must surely be better than
whatever crap the vendor ships) makes no sense in this day and age.
The silliest case is macOS, where gcc and g++ are found and used but
are in fact... wrappers for clang, for maximum confusion.

-- 
Thomas Munro
https://enterprisedb.com