December 30, 2021

CentOS 7でOpenSSL LTS 1.1.1のrpmを作る

CentOS 7では最新の7.9に上げてもOpenSSLは1.0.2k。
以前、OpenSSL LTS版の1.1.1を使うためにビルドしてみたけど、更新したり複数環境で使おうとすると使い勝手が悪いから、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ビルド

  1. 以下の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
    
  2. rpmbuildディレクトリ作成
    [vagrant@localhost ~]$ rpmdev-setuptree
    

    ※rpmdevtoolsパッケージを入れずにrpmbuild --nobuild --nodeps ~/openssl.specを実行しても構わない。
    「ソースのtar.gzがない」と小言を言われるけどrpmbuildディレクトリは作ってくれる。

  3. ソースをダウンロードして配置
    [vagrant@localhost ~]$ spectool -g -R ~/openssl.spec
    

    ※rpmdevtoolsパッケージを入れずに、手動でソースをダウンロードして配置しても構わない。

  4. 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

確認

  1. 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
    
  2. インストール
    [vagrant@localhost ~]$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/openssl-opt-1.1.1m-1.el7.x86_64.rpm -y
    
  3. パッケージ名を変えたので元の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
    
  4. バージョン確認
    [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

© 2020 nissy-lab.com