September 28, 2023

CentOS 7でOpenSSL LTS 3.0.xのrpmを作る

概要

OpenSSL 3.0.xをビルドする記事と、OpenSSL 1.1.1のrpmを作る記事を元に、OpenSSL 3.0.xのrpmを作ってみた。

用意したもの

最小セットアップしたCentOS 7.9
amd64版(x86_64)でもarm64版(aarch64)でもどちらでも可

[nissy@cent7-openssl30x-rpm ~]$ uname -m
x86_64
[nissy@cent7-openssl30x-rpm ~]$ sudo yum update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
No packages marked for update
[nissy@cent7-openssl30x-rpm ~]$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[nissy@cent7-openssl30x-rpm ~]$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

※ Dockerコンテナのcentos:7でも可
その場合、以降の手順でsudoは不要

rpm作成手順

パッケージ追加

[nissy@cent7-openssl30x-rpm ~]$ sudo yum install rpmdevtools rpm-build gcc perl perl-IPC-Cmd -y

Dockerコンテナの場合はmakeも必要

nissy@debian12:~$ docker run --rm -it centos:7 /bin/bash
[root@f16c64308500 ~]# yum install make rpmdevtools rpm-build gcc perl perl-IPC-Cmd -y

rpmビルド

  1. 以下のopenssl-opt.spec を~/に配置
    OpenSSL 3.0.xのビルド手順をベースにspecファイルを修正
    既存のopensslパッケージと被らず共存できるよう、Nameをopenssl-optにして別パッケージとしてあるのも前と同じ
    %elifarch が使えるのはRPM 4.15以降、CentOS 7はまだ4.11.3なので、 %ifarch を2つ書いた
    Name: openssl-opt
    Version: 3.0.11
    Release: 1%{?dist}
    Group: System Environment/Libraries
    Summary: Secure Sockets Layer and cryptography libraries and tools
       
    License: Apache License 2.0
    URL: http://www.openssl.org/
    Source0: https://www.openssl.org/source/openssl-%{version}.tar.gz
       
    BuildRequires: make gcc perl perl-IPC-Cmd
    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 -j$(nproc)
       
    %install
    make install_sw
    mkdir -p %{buildroot}/etc/ld.so.conf.d/
    %ifarch x86_64
    echo %{prefix}/lib64 > %{buildroot}/etc/ld.so.conf.d/openssl.conf
    %endif
    %ifarch aarch64
    echo %{prefix}/lib > %{buildroot}/etc/ld.so.conf.d/openssl.conf
    %endif
       
    %clean
    rm -rf $RPM_BUILD_ROOT
       
    %files
    %{prefix}
    /etc/ld.so.conf.d/openssl.conf
       
    %post
    ldconfig
       
    %postun
    ldconfig
       
    %changelog
    * Thu Sep 28 2023 nissy <nissy@example.com> 3.0.11-1
    - Initial RPM release
    
  2. rpmbuildディレクトリ作成
    [nissy@cent7-openssl30x-rpm ~]$ rpmdev-setuptree
    
  3. ソースをダウンロードして配置
    [nissy@cent7-openssl30x-rpm ~]$ spectool -g -R ~/openssl-opt.spec
    
  4. rpm作成
    [nissy@cent7-openssl30x-rpm ~]$ QA_SKIP_BUILD_ROOT=1 rpmbuild -bb ~/openssl-opt.spec
    

    QA_SKIP_BUILD_ROOT=1を付けるのは以下のエラー対策

    Found '/home/nissy/rpmbuild/BUILDROOT/openssl-opt-3.0.11-1.el7.x86_64' in installed    files; aborting
    error: Bad exit status from /var/tmp/rpm-tmp.40FwmJ (%install)
       
       
    RPM build errors:
        Bad exit status from /var/tmp/rpm-tmp.40FwmJ (%install)
    

    情報元:rpmbuild found buildroot in installed files error · Issue #24 · kevinconway/rpmvenv · GitHub

確認

  1. rpmが作成されたか確認
    [nissy@cent7-openssl30x-rpm ~]$ ls ~/rpmbuild/RPMS/x86_64/
    openssl-opt-3.0.11-1.el7.x86_64.rpm  openssl-opt-debuginfo-3.0.11-1.el7.x86_64.rpm
    
  2. インストール
    [nissy@cent7-openssl30x-rpm ~]$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/openssl-opt-3.0.11-1.el7.x86_64.rpm -y
    
  3. パッケージ名を変えたので元のopensslと共存している
    [nissy@cent7-openssl30x-rpm ~]$ rpm -q openssl openssl-opt
    openssl-1.0.2k-26.el7_9.x86_64
    openssl-opt-3.0.11-1.el7.x86_64
    
  4. バージョン確認
    [nissy@cent7-openssl30x-rpm ~]$ /usr/bin/openssl version
    OpenSSL 1.0.2k-fips  26 Jan 2017
    [nissy@cent7-openssl30x-rpm ~]$ /opt/openssl/bin/openssl version
    OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.0.11 19 Sep 2023)
    

OpenSSLをバージョンアップする時

openssl.specのVersion:を3.0.11から3.0.12とかに変えて同じようにrpmを作成、yum localupdateで更新できるはず。

[nissy@cent7-openssl30x-rpm ~]$ sudo yum localupdate ~/rpmbuild/RPMS/x86_64/openssl-opt-3.0.12-1.el7.x86_64.rpm

参考情報

第3章 ソフトウェアのパッケージ化 Red Hat Enterprise Linux 7 | Red Hat Customer Portal

© 2020 nissy-lab.com