分类目录归档:OpenSSL

Zabbix: libssl.so.10: error adding symbols: DSO missing from command line

configure前置任务成功

 [root@renwole.com zabbix-5.0.1]# ./configure --prefix=/apps/server/zabbix \
 --sysconfdir=/apps/server/zabbix/etc --enable-server --enable-agent \
 --with-mysql=/apps/server/mysql/bin/mysql_config --with-openssl \
 --with-net-snmp --with-libcurl --with-libxml2 --enable-proxy --enable-ipv6 \
 --enable-java --with-ssh2 --with-iconv --with-openipmi --with-ldap

***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*              <http://www.zabbix.com>                    *
***********************************************************

安装Zabbix时失败

make install
...
ssh2  -lOpenIPMI -lOpenIPMIposix -lz -lpthread -levent -lssl -lcrypto -lldap -llber   -lcurl -lm -ldl  -lresolv -lpcre -liconv
/usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libnetsnmp.so, may conflict with libssl.so.1.1
/usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libnetsnmp.so, may conflict with libssl.so.1.1
/usr/bin/ld: ../../src/libs/zbxcrypto/libzbxcrypto.a(libzbxcrypto_a-tls.o): undefined reference to symbol 'SSL_library_init@@libssl.so.10'
//usr/lib64/libssl.so.10: error adding symbols: DSO missing from command line
collect2: 错误:ld 返回 1
make[3]: *** [zabbix_server] 错误 1
make[3]: 离开目录“/opt/zabbix-5.0.1/src/zabbix_server”
make[2]: *** [install-recursive] 错误 1
make[2]: 离开目录“/opt/zabbix-5.0.1/src/zabbix_server”
make[1]: *** [install-recursive] 错误 1
make[1]: 离开目录“/opt/zabbix-5.0.1/src”
make: *** [install-recursive] 错误 1

分析原因

[root@renwole.com zabbix-5.0.1]# find / -name libssl.so.*
/usr/lib64/libssl.so.1.0.2k
/usr/lib64/libssl.so.10
/apps/server/mysql/lib/private/libssl.so.1.1

MySQL 8 是依赖Openssl 1.1,而CentOS 7 默认安装的是Openssl 1.0,所以需要升级openssl 1.1.1,请参阅《如何升级OpenSSL》,之后再安装Zabbix即可成功。

如何安装升级OpenSSL

OpenSSL介绍

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包广泛被应用在互联网的网页服务器上。 其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议,稳定版本: 1.1.1g 发布于2020年4月21日。

OS环境信息

[root@renwole.com ~]# hostnamectl
   Static hostname: renwole.renwole.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 95d03f7f0b6c48f08dfc5a8ca715cc23
           Boot ID: e2b668b974ca4e00a3004f08c1d8efee
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1127.el7.x86_64
      Architecture: x86-64

1.升级前查看OpenSSL版本

openssl version -a
OpenSSL 1.0.2k-fips  26 Jan 2017

2.开始下载并安装官方最新OpenSSL

wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar zxf openssl-1.1.1g.tar.gz && cd openssl-1.1.1g
./config -Wl,-rpath=/usr/local/openssl/lib -fPIC --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
make depend && make -j 2 && make install

3.开始升级,先备份老OpenSSL,万一升级失败可快速回滚

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
mv /usr/lib64/openssl /usr/lib64/openssl.bak
rm -f /usr/lib64/libssl.so.10
rm -f /usr/lib64/libcrypto.so.10

4.创建对应新的OpenSSL软连接

ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl
ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so
ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so
ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

5.添加OpenSSL动态链接库并使其生效

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf.d/openssl-renwole.com.conf
ldconfig

6.查看OpenSSL是否升级成功

openssl version -a
OpenSSL 1.1.1g  21 Apr 2020

升级成功。