CentOS 7では最新の7.9に上げてもOpenSSLは1.0.2k。
以前、OpenSSL LTS版の1.1.1を使うためにビルドしてみたけど、更新したり複数環境で使おうとすると使い勝手が悪いから、rpm作ってみた。
※ OpenSSL 1.1.1は2023/09/11にEoLを迎えたので、次のLTSである3.0.xのrpmを作るならこちら
用意したもの
vagrant up
して yum update
した CentOS 7.9
[vagrant@localhost ~]$ sudo yum update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
No packages marked for update
[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[vagrant@localhost ~]$ openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
rpm作成手順
必要なパッケージ追加
[vagrant@localhost ~]$ sudo yum install rpmdevtools rpm-build gcc -y
rpmビルド
- 以下のopenssl.spec を~/に配置
以前のビルド手順をベースにspecファイルを書いた。
既存のopensslパッケージを更新すると何かと面倒が起こりそうな気がして、Nameをopenssl-optにして別パッケージとしてある。Name: openssl-opt Version: 1.1.1m Release: 1%{?dist} Group: System Environment/Libraries Summary: Secure Sockets Layer and cryptography libraries and tools License: OpenSSL URL: http://www.openssl.org/ Source0: https://www.openssl.org/source/openssl-%{version}.tar.gz BuildRequires: make gcc perl BuildRoot: %{_tmppath}/%{name}-%{version}-root Prefix: /opt/openssl %description %prep rm -rf $RPM_BUILD_ROOT %setup -q -n openssl-%{version} %build ./config --prefix=%{buildroot}%{prefix} make %install make install_sw mkdir -p %{buildroot}/etc/ld.so.conf.d/ echo %{prefix}/lib > %{buildroot}/etc/ld.so.conf.d/openssl.conf %clean rm -rf $RPM_BUILD_ROOT %files %{prefix} /etc/ld.so.conf.d/openssl.conf %post ldconfig %postun ldconfig %changelog * Thu Dec 30 2021 nissy <hoge@example.com> 1.1.1m-1 - Initial RPM release
※opensslとopenssl-devel相当の2つに分けてrpmを作りたい場合の差分はこちら↓
--- openssl-without-dev.spec 2021-12-30 16:03:25.749054436 +0900 +++ openssl-with-dev.spec 2021-12-30 16:03:06.437456668 +0900 @@ -14,6 +14,12 @@ %description +%package devel +Summary: Secure Sockets Layer and cryptography static libraries and headers +Group: Development/Libraries +Requires: openssl-opt +%description devel + %prep rm -rf $RPM_BUILD_ROOT @@ -32,8 +38,12 @@ rm -rf $RPM_BUILD_ROOT %files -%{prefix} /etc/ld.so.conf.d/openssl.conf +%{prefix}/bin/* +%{prefix}/lib/* + +%files devel +%{prefix}/include/* %post ldconfig
- rpmbuildディレクトリ作成
[vagrant@localhost ~]$ rpmdev-setuptree
※rpmdevtoolsパッケージを入れずに
rpmbuild --nobuild --nodeps ~/openssl.spec
を実行しても構わない。
「ソースのtar.gzがない」と小言を言われるけどrpmbuildディレクトリは作ってくれる。 - ソースをダウンロードして配置
[vagrant@localhost ~]$ spectool -g -R ~/openssl.spec
※rpmdevtoolsパッケージを入れずに、手動でソースをダウンロードして配置しても構わない。
- rpm作成
[vagrant@localhost ~]$ QA_SKIP_BUILD_ROOT=1 rpmbuild -bb ~/openssl.spec
QA_SKIP_BUILD_ROOT=1
を付けるのは以下のエラー対策Found '/home/vagrant/rpmbuild/BUILDROOT/openssl-opt-1.1.1m-1.el7.x86_64' in installed files; aborting エラー: /var/tmp/rpm-tmp.LRRvJg の不正な終了ステータス (%install) RPM ビルドのエラー: /var/tmp/rpm-tmp.LRRvJg の不正な終了ステータス (%install)
情報元:rpmbuild found buildroot in installed files error · Issue #24 · kevinconway/rpmvenv · GitHub
確認
- rpmが作成されたか確認
[vagrant@localhost ~]$ ls ~/rpmbuild/RPMS/x86_64/ openssl-opt-1.1.1m-1.el7.x86_64.rpm openssl-opt-debuginfo-1.1.1m-1.el7.x86_64.rpm
- インストール
[vagrant@localhost ~]$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/openssl-opt-1.1.1m-1.el7.x86_64.rpm -y
- パッケージ名を変えたので元のopensslと共存している
[vagrant@localhost ~]$ rpm -q openssl openssl-opt openssl-1.0.2k-22.el7_9.x86_64 openssl-opt-1.1.1m-1.el7.x86_64
- バージョン確認
[vagrant@localhost ~]$ openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 [vagrant@localhost ~]$ /opt/openssl/bin/openssl version OpenSSL 1.1.1m 14 Dec 2021
OpenSSLをバージョンアップする時
openssl.specのVersion:を1.1.1mから1.1.1nとかに変えて同じようにrpmを作成、yum localupdateで更新できるはず。
[vagrant@localhost ~]$ sudo yum localupdate ~/rpmbuild/RPMS/x86_64/openssl-opt-1.1.1n-1.el7.x86_64.rpm
参考情報
第3章 ソフトウェアのパッケージ化 Red Hat Enterprise Linux 7 | Red Hat Customer Portal