概説
- ここでは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
については設定変更などでログインできるようになるようですが、大量の依存性欠如を無視するのは正直こわいです。なので、手動でビルドして普通通りにインストールした方が無難っぽいです。