Under Construction

Dependent module /opt/freeware/lib/libcrypto.a(libcrypto.so) could not be loaded

Nach der Installation von YUM funktioniert curl nicht (curl ist eines der RPM-Pakete aus yum_bundle.tar). Der Versuch curl zu starten führt zu der folgenden Fehlermeldung:

aix01 # curl -V
Could not load program curl:
Could not load module /usr/lib/libcurl.a(libcurl.so.4).
Dependent module /opt/freeware/lib/libcrypto.a(libcrypto.so) could not be loaded.
Member libcrypto.so is not found in archive
Could not load module curl.
Dependent module /usr/lib/libcurl.a(libcurl.so.4) could not be loaded.
Could not load module .
aix01 #

Die Fehlermeldung „Member libcrypto.so is not found in archive“ zeigt eindeutig das die Shared Library libcrypto.so benötigt wird, aber im Archiv /opt/freeware/lib/librypto.a nicht gefunden wird. Das Archiv gehört zum installierten RPM-Paket openssl:

aix01 # rpm -qf /opt/freeware/lib/libcrypto.a
openssl-1.0.2l-1.ppc
aix01 #

Das RPM-Paket openssl stammt nicht aus der AIX-Toolbox. Alle RPMs in der AIX-Toolbox verwenden das von AIX stammende OpenSSL, welches über ein BFF-Fileset installiert wird. Das bedeutet letztlich das bei verwenden der AIX-Toolbox das RPM-Paket openssl nicht installiert sein darf.

Die Ursache, warum das installierte curl auf die Freeware-Version von OpenSSL und nicht die AIX-Version unter /usr/lib zugreift, ist der Library-Path in dem Binary:

aix01 # dump -H /opt/freeware/bin/curl

/opt/freeware/bin/curl:

***Loader Section***
Loader Header Information
VERSION# #SYMtableENT #RELOCent LENidSTR
0x00000001 0x00000067 0x00000572 0x00000067

#IMPfilID OFFidSTR LENstrTBL OFFstrTBL
0x00000004 0x00004b20 0x000002ce 0x00004b87


***Import File Strings***
INDEX PATH BASE MEMBER
0 /opt/freeware/lib:/usr/vac/lib:/usr/lib:/lib
1 libc.a shr.o
2 libcurl.a libcurl.so.4
3 libz.a libz.so.1
aix01 #

Beim Kompilieren und Linken des Binaries curl wurde im Library-Path /opt/freeware/lib als erstes angegeben, daher wird die Freeware Version verwendet, wenn sie vorhanden ist.

Wir deinstallieren daher das RPM-Paket openssl:

aix01 # yum remove openssl
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package openssl.ppc 0:1.0.2l-1 will be erased
--> Processing Dependency: openssl >= 0.9.8 for package: wget-1.14-2.ppc
--> Running transaction check
---> Package wget.ppc 0:1.14-2 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Removing:
openssl ppc 1.0.2l-1 installed 72 M
Removing for dependencies:
wget ppc 1.14-2 installed 2.1 M

Transaction Summary
========================================================================================================
Remove 2 Packages

Installed size: 74 M
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Check
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : wget-1.14-2.ppc 1/2
install-info: warning: no entries found for `/opt/freeware/info/wget.info.gz'; nothing deleted
Erasing : openssl-1.0.2l-1.ppc 2/2

Removed:
openssl.ppc 0:1.0.2l-1

Dependency Removed:
wget.ppc 0:1.14-2

Complete!
aix01 #

Das ebenfalls installierte wget besitzt eine Abhängigkeit zu openssl und wird daher ebenfalls deinstalliert. Anstelle von „yum remove“ kann auch „rpm –e“ verwendet werden, allerdings müssen dann abhängige RPM-Pakete manuell angegeben werden.

Ein erneuter Aufruf von curl zeigt das das Problem jetzt behoben ist:

aix01 # curl -V
curl 7.52.1 (powerpc-ibm-aix6.1.8.0) libcurl/7.52.1 OpenSSL/1.0.2u zlib/1.2.11
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy
aix01 #

Das RPM-Paket wget kann mittels YUM bei Bedarf wieder installiert werden.