前面有提到過這個openssl的版本沖突問題,也是在這次恢復服務器時遇到的問題,我整理如下,供大家參考。小小一個軟件的安裝,挺坑的。
一、問題
項目運行環境需要,指定PHP7.0.9這個版本,但是?系統版本與軟件包沖突?
當前系統安裝的?epel-release?版本為?epel-release-8-21.el8,表明系統可能是 ?CentOS 8/RHEL 8?,而?openssl-1.0.2k-26.el7.x86_64?是 ?CentOS 7 的軟件包?,導致 yum 倉庫無法匹配?。
?OpenSSL 版本不可用:?
版本?1.0.2k?屬于較舊版本,CentOS 8 默認倉庫已不包含此包,需通過特殊方式安裝?。
二、解決
方案 1:強制啟用 CentOS 7 倉庫(僅限兼容環境)
?手動下載并安裝 RPM 包?
# 下載 CentOS 7 的 OpenSSL 包
wget https://vault.centos.org/7.9.2009/os/x86_64/Packages/openssl-1.0.2k-26.el7.x86_64.rpm
wget https://vault.centos.org/7.9.2009/os/x86_64/Packages/openssl-devel-1.0.2k-26.el7.x86_64.rpm
# 強制安裝(可能引發依賴沖突)
sudo rpm -ivh --nodeps openssl-1.0.2k-26.el7.x86_64.rpm openssl-devel-1.0.2k-26.el7.x86_64.rpm
如果網上找不到免費的,就到CentOS-7-x86_64-Everything-2207-02.iso(實際就是你的安裝光盤或者ios文件解壓后) 的Packages目錄下,一般都能找到!囧!!!
可能導致系統組件(如?yum、dnf)異常,需謹慎操作(原因是雖然你按照你的版本需要安裝你需要的某個軟件,但是這個軟件會安裝其他依賴庫,而這些依賴庫可能和你目前運行的一些軟件所依賴的相同庫產生版本依賴或者沖突)?。
方案 2:通過源碼編譯安裝 OpenSSL 1.0.2k(我通暢選擇編譯安裝,因為預編譯就會告訴你需要哪些依賴,具體的版本,能不能搞得定,在沒有真正安裝前不會對你的系統產生致命影響,大不了清理不裝了,重新想其他辦法,不會對你目前的環境造成不良影響。)
?安裝編譯依賴?
sudo yum install -y gcc make perl zlib-devel
?下載并編譯源碼?
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz
tar -zxvf openssl-1.0.2k.tar.gzcd openssl-1.0.2k
預編譯:
./config --prefix=/usr/local/openssl-1.0.2k
make && sudo make install
?配置環境變量(一鍵三連順手干)?
echo 'export PATH=/usr/local/openssl-1.0.2k/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
echo '/usr/local/openssl-1.0.2k/lib'
sudo tee /etc/ld.so.conf.d/openssl-1.0.2k.conf
sudo ldconfig
?驗證?:openssl version?應輸出?1.0.2k?。
三、PHP 7.0.9 的依賴處理
?安裝 Remi 倉庫(一般個人會切到阿里那邊)?
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo yum-config-manager --enable remi-php70
?安裝 PHP 7.0 及相關擴展?
sudo yum install -y php70 php70-php-devel php70-php-openssl
?說明?:通過 Remi 倉庫可自動解決 OpenSSL 依賴?。
PS:
?系統版本確認?:通過?cat /etc/redhat-release?確認系統版本,避免跨版本安裝包?。
?依賴沖突處理?:手動安裝舊版 OpenSSL 可能導致系統工具鏈異常,建議優先使用 Remi 倉庫安裝 PHP 7.0?。
OpenSSL 1.0.2k 已停止維護,盡快升級。