Невозможно установить связь с криптографической библиотекой OpenSSL при компиляции OpenS SH (PKIXS SH) в AIX - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь скомпилировать pkixs sh (форк OpenS SH) в AIX, используя скомпилированную версию также OpenSSL, но безуспешно.

Ошибка, показанная в Этап настройки следующий:

checking how to link programs using OpenSSL functions... fail
configure: error: cannot link with OpenSSL crypto library

OpenS SH 1.1.1d успешно скомпилирован в /soft/openssh-8.1, поэтому библиотеки находятся в / soft / opens sh - 8.1 / lib

$ ls /soft/openssh-8.1/lib
engines-1.1         libcrypto.so        libcrypto64.so.1.1  libssl.a            libssl.so.1         libssl_a.a
libcrypto.a         libcrypto.so.1      libcrypto_a.a       libssl.so           libssl64.so.1.1     pkgconfig

и правильно найдены для двоичного файла openssl, например:

$ ldd /soft/openssh-8.1/bin/openssl
/soft/openssh-8.1/bin/openssl needs:
         /soft/openssh-8.1/lib/libssl.a(libssl64.so.1.1)
         /soft/openssh-8.1/lib/libcrypto.a(libcrypto64.so.1.1)
         /opt/freeware/lib/libz.so
         /usr/ccs/lib/libpthreads.a(shr_xpg5_64.o)
         /usr/ccs/lib/libc.a(shr_64.o)
         /unix
         /soft/openssh-8.1/lib/libcrypt.a(shr_64.o)

Я тестировал с различными комбинациями LDFLAGS, но безуспешно.

AIX версия 7.1 на powerpc G CC версия 4.6.1

Команда конфигурации, запускаемая для настройки компиляции OpenS SH, следующая:

./configure --prefix=/soft/openssh-8.1/                                 \
        --sbindir=/soft/openssh-8.1/bin                                 \
        --sysconfdir=/soft/openssh-8.1/data                             \
        --datadir=/soft/openssh-8.1/data                                \
        --with-pid-dir=/soft/openssh-8.1/data                           \
        --without-stackprotect                                          \
        --with-pam                                                      \
        --with-md5-passwords                                            \
        --with-ssl-dir=/soft/openssh-8.1                                \
        --with-privsep-path=/var/empty/sshd

Any идея?

1 Ответ

0 голосов
/ 31 января 2020

Ключ для компиляции в AIX использует переменную LIBPATH , эквивалентную LD_LIBRARY_PATH для Linux.

В этом случае, в частности, переменная blibpath была установите также, как это используется в сценариях конфигурации, чтобы передать настраиваемые пути к библиотекам в качестве параметров компилятору и задать эти пути как пути поиска библиотек в двоичных файлах.

Чтобы быть уверенным, что двоичные двоичные файлы используются в компиляция следующих переменных, которые установлены перед командой configure:

OPENSSH_PATH="/soft/openssh-8.1"
export PATH="/soft/perl-5.16.3/bin:$OPENSSH_PATH/bin:$PATH"
# Library path in linking time
export blibpath="$OPENSSH_PATH/lib:/opt/freeware/lib64:/usr/lib:/lib"
# Library path in run time
export LIBPATH="$OPENSSH_PATH/lib:/opt/freeware/lib64:/opt/freeware/lib:/opt/lib64:/opt/64/lib:/opt/lib:/usr/lib64:/usr/lib:/lib:/usr/ccs/lib/"
export CFLAGS="-g -O2"
export CC="gcc -maix64"
export OBJECT_MODE=64
export NM="nm -X64"
export AR="ar -X64"

Как уже говорилось, две основные переменные для установки: blibpath , используемые на этапе компиляции, и LIBPATH используется при запуске двоичных файлов.

В двоичных файлах результатов правильно установлены библиотеки: -)

$ ldd /soft/openssh-8.1/bin/sshd
/soft/openssh-8.1/bin/sshd needs:
     /usr/lib/libc.a(shr_64.o)
     /soft/openssh-8.1/lib/libcrypto.a(libcrypto64.so.1.1)
     /soft/openssh-8.1/lib/libssl.a(libssl64.so.1.1)
     /usr/lib/libz.a(libz.so.1)
     /usr/lib/libpam.a(shr_64.o)
     /unix
     /usr/lib/libcrypt.a(shr_64.o)
     /opt/freeware/lib64/libz.so
     /usr/lib/libpthreads.a(shr_xpg5_64.o)
     /usr/lib/libmls.a(shr_64.o)
     /usr/lib/libmlsenc.a(shr_64.o)
     /usr/lib/libodm.a(shr_64.o)

$ dump -X64 -Hv /soft/openssh-8.1/bin/sshd

/soft/openssh-8.1/bin/sshd:

                        ***Loader Section***
                      Loader Header Information
VERSION#         #SYMtableENT     #RELOCent        LENidSTR
0x00000001       0x00000247       0x00000734       0x000000aa

#IMPfilID        OFFidSTR         LENstrTBL        OFFstrTBL
0x00000006       0x0000aa20       0x0000238a       0x0000aaca


                        ***Import File Strings***
INDEX  PATH                          BASE                MEMBER
0      /soft/openssh-8.1/lib:/opt/freeware/lib64:/usr/lib:/lib
1                                    libc.a              shr_64.o
2                                    libcrypto.a         libcrypto64.so.1.1
3                                    libssl.a            libssl64.so.1.1
4                                    libz.a              libz.so.1
5                                    libpam.a            shr_64.o
$ ldd /soft/openssh-8.1/libexec/sftp-server
/soft/openssh-8.1/libexec/sftp-server needs:
     /usr/lib/libc.a(shr_64.o)
     /soft/openssh-8.1/lib/libcrypto.a(libcrypto64.so.1.1)
     /unix
     /usr/lib/libcrypt.a(shr_64.o)
     /opt/freeware/lib64/libz.so
     /usr/lib/libpthreads.a(shr_xpg5_64.o)

$ dump -X64 -Hv /soft/openssh-8.1/libexec/sftp-server

/soft/openssh-8.1/libexec/sftp-server:

                        ***Loader Section***
                      Loader Header Information
VERSION#         #SYMtableENT     #RELOCent        LENidSTR
0x00000001       0x00000081       0x0000016b       0x0000006b

#IMPfilID        OFFidSTR         LENstrTBL        OFFstrTBL
0x00000003       0x00002300       0x00000552       0x0000236b


                        ***Import File Strings***
INDEX  PATH                          BASE                MEMBER
0      /soft/openssh-8.1/lib:/opt/freeware/lib64:/usr/lib:/lib
1                                    libc.a              shr_64.o
2                                    libcrypto.a         libcrypto64.so.1.1

Команда ldd сообщает, какие библиотеки используются, а dump -X64 -Hv говорит, по каким путям будут использоваться эти библиотеки.

...