0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS6.8(64bit)でOpenSSLのソースファイルからrpmを作成して失敗した話

Posted at

概説

  • ここではrpmbuildコマンドを使ってOpenSSLのrpmパッケージを作成する方法を示します。

環境の確認

  • 64bit環境のCentOS6.8です。
$ uname -a
Linux localhost.localdomain 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release 
CentOS release 6.8 (Final)

OpenSSLのソースファイルのダウンロード

  • 1.0.xの最新版を利用します。
$ wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz

rpmbuildコマンドでrpm作成

  • オプションを「-ta(*.rpm*.src.rpmを作成)」にするか「-tb(*.rpmのみ作成)」にするかといったところはお好みで。
  • しかし、rpmbuildコマンドを実行すると失敗します。
$ rpmbuild -tb openssl-1.0.2h.tar.gz 

RPM ビルドエラー:
    ファイルが見つかりません (by glob): /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib/*.so*

なぜ失敗したのか

  • 64bit環境の場合は「〜/lib」ではなく、「〜/lib64」配下に関連するファイルが存在するからです。

  • /lib配下にはファイルがない

$ ls -l /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib/*.so*
ls: cannot access /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib/*.so*: そのようなファイルやディレクトリはありません
  • /lib64配下にはファイルがある
$ ls -l /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib64/*.so*
lrwxrwxrwx. 1 vagrant vagrant      18  8月 14 04:21 2016 /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib64/libcrypto.so -> libcrypto.so.1.0.0
-r-xr-xr-x. 1 vagrant vagrant 2304624  8月 14 04:21 2016 /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib64/libcrypto.so.1.0.0
lrwxrwxrwx. 1 vagrant vagrant      15  8月 14 04:21 2016 /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib64/libssl.so -> libssl.so.1.0.0
-r-xr-xr-x. 1 vagrant vagrant  455912  8月 14 04:21 2016 /PATH_TO/rpmbuild/BUILDROOT/openssl-1.0.2h-1.x86_64/usr/lib64/libssl.so.1.0.0

specファイルを修正する

  • ソースファイルを展開し、「/lib」と記述されている箇所を「/lib64」に修正します。
展開
$ tar zxvf openssl-1.0.2h.tar.gz
spec書き換え
$ vi openssl-1.0.2h/openssl.spec 
:%s/\/lib\//\/lib64\//g

以下の3箇所が書き換わっていればOKです。
%attr(0755,root,root) /usr/lib64/*.so*
%attr(0644,root,root) /usr/lib64/*.a
%attr(0644,root,root) /usr/lib64/pkgconfig/openssl.pc

:wq
圧縮
$ tar zcvf openssl-1.0.2h_spec_edited.tar.gz openssl-1.0.2h

rpmbuildコマンドでrpm作成(再チャレンジ)

  • specファイルを修正して作りなおしたソースファイルを元にrpmbuildコマンドを実行します。
$ rpmbuild -tb openssl-1.0.2h_spec_edited.tar.gz 
  • 無事に作成されました。
$ ls -l /PATH_TO/rpmbuild/RPMS/x86_64/openssl-*
-rw-rw-r--. 1 vagrant vagrant 1667540  8月 14 04:50 2016 /PATH_TO/rpmbuild/RPMS/x86_64/openssl-1.0.2h-1.x86_64.rpm
-rw-rw-r--. 1 vagrant vagrant  122516  8月 14 04:50 2016 /PATH_TO/rpmbuild/RPMS/x86_64/openssl-debuginfo-1.0.2h-1.x86_64.rpm
-rw-rw-r--. 1 vagrant vagrant 2716460  8月 14 04:50 2016 /PATH_TO/rpmbuild/RPMS/x86_64/openssl-devel-1.0.2h-1.x86_64.rpm
-rw-rw-r--. 1 vagrant vagrant  678352  8月 14 04:50 2016 /PATH_TO/rpmbuild/RPMS/x86_64/openssl-doc-1.0.2h-1.x86_64.rpm

インストール

  • インストールしようとすると、大量の「依存性の欠如」でインストールに失敗します。
$ sudo rpm -Uvh /PATH_TO/rpmbuild/RPMS/x86_64/openssl-*
エラー: 依存性の欠如:
   ・
   ・
   ・
   ・
  • なので強制的にインストールします。
$ sudo rpm -Uvh --force --nodeps /PATH_TO/rpmbuild/RPMS/x86_64/openssl-*
準備中...                ########################################### [100%]
   1:openssl                ########################################### [ 25%]
   2:openssl-devel          ########################################### [ 50%]
   3:openssl-doc            ########################################### [ 75%]
   4:openssl-debuginfo      ########################################### [100%]

ssh接続しようとすると。。。

  • 強制的にOpenSSLを上書きインストールしたサーバーにssh接続を試みると、以下のエラーが発生しログインできなくなってしまいました。
ssh_exchange_identification: read: Connection reset by peer
  • ssh_exchange_identificationについては設定変更などでログインできるようになるようですが、大量の依存性欠如を無視するのは正直こわいです。なので、手動でビルドして普通通りにインストールした方が無難っぽいです。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?