1. 程式人生 > >啟動MongoDB報version `OPENSSL_1.0.2‘ not found的兩種解決辦法

啟動MongoDB報version `OPENSSL_1.0.2‘ not found的兩種解決辦法

x86_64 crypt 原來 版本問題 原因分析 ubun 生效 grep openssl命令

問題描述:

在部署MongoDB的時候,啟動過程中有遇到“version `OPENSSL_1.0.2‘ not found ”這樣的報錯,導致MongoDB服務起不來:

[root@slave-4 lib]# /usr/local/mongodb/bin/mongod -f /etc/mongodb/mongo.conf
/usr/local/mongodb/bin/mongo: /lib64/libcrypto.so.10: version `OPENSSL_1.0.2‘ not found (required by /usr/local/mongodb/bin/mongo)
[root@slave-4 lib]#

原因分析:

報這樣的錯誤,就是因為openssl的版本問題導致的。因此需要更新openssl。查看當前的版本號:

[root@slave-4~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[root@slave-4 ~]#
[root@slave-4 ~]# rpm -qa openssl
openssl-1.0.1e-60.el7.x86_64
[root@slave-4 ~]#

解決辦法:

解決辦法有兩種,一種是yum自動更新,這種方法很簡單。還有一種情況就是當這臺機器完全阻斷了外網,不能用yum的時候,就只有手動解決了。

解決辦法1——yum自動更新

重新安裝openssl: yum -y install openssl,安裝完成之後,檢查版本已經OK。重啟mongodb就好了:

 [root@slave-4 ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017
[root@slave-4 ~]# 
[root@slave-4 ~]# rpm -qa openssl
openssl-1.0.2k-8.el7.x86_64
[root@slave-4 ~]# 

解決辦法2——手動更新

因為這次遇到這個報錯的機器,因為限制不能使用外網,於是嘗試這手動解決了一把。做了下面幾個步驟:
1、手動編譯安裝 openssl-1.0.2k.tar.gz這個包
2、從其他的openssl版本OK的機器上拷貝一個 libcrypto.so.1.0.2k到這臺報錯的服務器的/lib64下面,然後將原來的libcrypto.so.10-> libcrypto.so.1.0.1e改成 libcrypto.so.10 -> libcrypto.so.1.0.2k

[root@mongodb tmp]# ll /lib64/|grep libcrypto
lrwxrwxrwx   1 root root       19 Jun 20 11:22 libcrypto.so.10 -> libcrypto.so.1.0.2k  #新做的軟連接
-rwxr-xr-x.  1 root root  2025472 Nov  6  2016 libcrypto.so.1.0.1e
-rwxr-xr-x   1 root root  2512448 Jun 20 11:19 libcrypto.so.1.0.2k    #從其他機器拷貝過來的文件
lrwxrwxrwx.  1 root root       19 Aug  2  2017 libcrypto.so.10.bak -> libcrypto.so.1.0.1e #將原來的軟連接更名備份
[root@mongodb tmp]#

3、然後再啟動mongodb,就成功了

======================安裝 openssl-1.0.2k.tar.gz步驟======================
1)看/usr/local/openssl是否已經存在,若存在,就將openssl目錄改個名字,做個備份

2) 解壓文件
[root@mongodb tmp]# tar -xzf openssl-1.0.2k.tar.gz

3) 配置?

[root@mongodb tmp]# cd openssl-1.0.2k/
[root@mongodb openssl-1.0.2k]#  ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl
  shared 表示生成動態庫
  prefix?表示安裝目錄
  openssldir?表示配置文件目錄,ubuntu默認是/usr/lib/openssl,若設置其他目錄,執行openssl命令時會有警告.

4)編譯?& 安裝

[root@mongodb openssl-1.0.2k]#  make & make install

5)設置環境變量
vim /etc/profile,在最後一行添加export PATH=$PATH:/usr/local/openssl/bin?保存退出;
使用source /etc/profile使其生效

6)創建符號鏈接

[root@mongodb openssl-1.0.2k]#  ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl  #執行這一步的時候有可能會失敗,提示/usr/bin/openssl已經存在,那就將/usr/bin/openssl改個名字,重新做軟連接
[root@mongodb openssl-1.0.2k]#  ln -s /usr/local/ssl/openinclude/openssl /usr/include/openssl

7)刷新動態庫配置(有些安裝文檔有這一步,不過我沒做)
vim /etc/ld.so.conf 在文件末尾加入/usr/local/ssl/lib

8)測試查看版本就已經更新了

[root@mongodb ~]# openssl version   #版本就已經更新了
OpenSSL 1.0.2k  26 Jan 2017
[root@mongodb ~]#

======================替換/lib64下面的軟連接======================
只是安裝了openssl-1.0.2k.tar.gz,雖然openssl version看到版本更新了,但是啟動MongoDB的時候還是會報同樣的錯。發現在這臺機器的/lib64下面的軟連接libcrypto.so.10還是指向的libcrypto.so.1.0.1e,而不是libcrypto.so.1.0.2k。於是從另外一臺服務器拷貝了libcrypto.so.1.0.2k文件上傳到這臺不能聯網的報錯機器/lib64下面,重新做軟連接,將libcrypto.so.10-> libcrypto.so.1.0.1e改成 libcrypto.so.10 -> libcrypto.so.1.0.2k:

[root@mongodb tmp]# ll /lib64/|grep libcrypto
lrwxrwxrwx   1 root root       19 Jun 20 11:22 libcrypto.so.10 -> libcrypto.so.1.0.2k  #新做的軟連接
-rwxr-xr-x.  1 root root  2025472 Nov  6  2016 libcrypto.so.1.0.1e
-rwxr-xr-x   1 root root  2512448 Jun 20 11:19 libcrypto.so.1.0.2k    #從其他機器拷貝過來的文件
lrwxrwxrwx.  1 root root       19 Aug  2  2017 libcrypto.so.10.bak -> libcrypto.so.1.0.1e #將原來的軟連接更名備份
[root@mongodb tmp]#

然後再重啟MongoDB就可以啟動了。

啟動MongoDB報version `OPENSSL_1.0.2‘ not found的兩種解決辦法