注: 安全のため、古いバージョンの openssl 関連ファイルをバックアップしてください。
#迭代直接替换原有文件 – 如有需要建议备份以下文件
mkdir ~/ssl_bak
cp /usr/bin/openssl ~/ssl_bak
cp /usr/lib64/libcrypto.so.1.0.2k ~/ssl_bak
cp /usr/lib64/libssl.so.1.0.2k ~/ssl_bak
1.opensslをダウンロード
[root@localhost ~]# wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1s.tar.gz
2. 関連する依存関係をインストールする
[root@localhost ~]# yum -y install curl which make gcc perl perl-WWW-Curl rpm-build
注: centos/radhat6 バージョンの perl-WWW-Curl は手動でダウンロードする必要があります
[root@localhost ~]# wget http://mirrors.aliyun.com/centos-vault/6.10/os/x86_64/Packages/perl-WWW-Curl-4.09-4.el6.x86_64.rpm
[root@localhost ~]# rpm -ivh perl-WWW-Curl-4.09-4.el6.x86_64.rpm
3. コンパイルに必要なディレクトリを作成します
[root@localhost ~]# mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
4. openssl.spec ファイルを手動で書き込む
cat << 'EOF' > /root/rpmbuild/SPECS/openssl.spec
Summary: OpenSSL 1.1.1s for redhat
Name: openssl
Version: %{?version}%{!?version:1.1.1s}
Release: 1%{?dist}
Obsoletes: %{name} <= %{version}
Provides: %{name} = %{version}
URL: https://www.openssl.org/
License: GPLv2+
Source: https://www.openssl.org/source/%{name}-%{version}.tar.gz
BuildRequires: make gcc perl perl-WWW-Curl
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%global openssldir /usr/local/newopenssl/openssl111i
%description
OpenSSL RPM for version 1.1.1s on redhat
%package devel
Summary: Development files for programs which will use the openssl library
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
%description devel
OpenSSL RPM for version 1.1.1s on redhat (development package)
%prep
%setup -q
%build
./config --prefix=%{openssldir} --openssldir=%{openssldir}
make -j4
%install
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%make_install
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_libdir}
ln -sf %{openssldir}/lib/libssl.so.1.1 %{buildroot}%{_libdir}
ln -sf %{openssldir}/lib/libcrypto.so.1.1 %{buildroot}%{_libdir}
ln -sf %{openssldir}/bin/openssl %{buildroot}%{_bindir}
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%files
%{openssldir}
%defattr(-,root,root)
/usr/bin/openssl
/usr/lib64/libcrypto.so.1.1
/usr/lib64/libssl.so.1.1
%files devel
%{openssldir}/include/*
%defattr(-,root,root)
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
EOF
5. 対応するパッケージを準備し、rpm パッケージをコンパイルします。
[root@localhost ~]# cp openssl-1.1.1s.tar.gz /root/rpmbuild/SOURCES
cd /root/rpmbuild/SPECS && \
rpmbuild \
-D "version 1.1.1s" \
-ba openssl.spec
6.opensslのrpmパッケージが生成されているか確認
[root@localhost SPECS]# cd /root/rpmbuild/RPMS/x86_64/
[root@localhost x86_64]# ls
openssl-1.1.1s-1.el6.x86_64.rpm openssl-devel-1.1.1s-1.el6.x86_64.rpm
7. openssl を 1.1.1s にアップグレードする
[root@localhost x86_64]# rpm -ivh openssl-1.1.1s-1.el6.x86_64.rpm --force --nodeps
知らせ:
openssl の上位バージョンへのアップグレード にはリスクがあります。
- 事前に元の openssl をアンインストールしないでください。例: rpm -e openssl-1.0.2k-21.el7_9.x86_64
- openssl 1.1.1s を直接アップグレードすることはできません。例: rpm -Uvh openssl-1.1.1s-1.el6.x86_64.rpm
ソフトリンクを直接削除することはできません.
開発のために新しいバージョンを使用する必要がある場合は、元のソフトリンクポイントを置き換える、つまり元の動的ライブラリを置き換えてバージョンをアップグレードする必要があります.
/lib(lib64) と /usr/lib(lib64) と /usr/local/lib(lib64) に存在する対応する動的ライブラリを置き換えます。
ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so
ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so