RPMパッケージにパッチを当てる方法
ソースRPMを取得し、バッチを追加後、RPMパッケージを作成する方法について デモを交えて説明していきます。
ソースRPMの取得
まず、元となるソースRPMを取得します。 今回は、opensslで実施したいと思います。
$ cd $ wget http://vault.centos.org/6.6/os/Source/SPackages/openssl-1.0.1e-30.el6.src.rpm
ソースRPMのインストール
ダウンロードしたソースRPMをインストールします。
$ rpm -vih openssl-1.0.1e-30.el6.src.rpm
正常終了すると、以下のフォルダが作成されます。
- SOURCES(ソースコード・パッチ格納ディレクトリ)
- SPECS(SPECファイル格納ディレクトリ)
パッチの取得
githubからパッチを取得し、SOURCESディレクトリにコピーします。
$ git install yum $ cd /tmp/ $ git clone https://github.com/ptudor/centos6-openssl $ cp -p /tmp/centos6-openssl/SOURCES/openssl-1.0.1e-cve-2015-0293.patch ~/rpmbuild/SOURCES/
SPECファイルの修正
以下の通り、パッチ定義を追加します。
vi ~/rpmbuild/SPECS/openssl.spec @@ -105,6 +105,7 @@ Patch104: openssl-1.0.1e-cve-2014-3509.patch Patch105: openssl-1.0.1e-cve-2014-3510.patch Patch106: openssl-1.0.1e-cve-2014-3511.patch +Patch107: openssl-1.0.1e-cve-2015-0293.patch License: OpenSSL Group: System Environment/Libraries @@ -231,6 +232,7 @@ %patch104 -p1 -b .tlsext-race %patch105 -p1 -b .adh-dos %patch106 -p1 -b .frag-downgrade +%patch107 -p1 -b .hoge sed -i 's/SHLIB_VERSION_NUMBER "1.0.0"/SHLIB_VERSION_NUMBER "%{version}"/' crypto/opensslv.h
RPMの作成
RPMをビルドするために必要となるパッケージをインストールします。
$ yum install rpm-build $ yum install gcc
ビルドの実行
SPECファイルを指定してビルドしてみます。
$ rpmbuild -ba SPECS/openssl.spec ... エラー: ビルド依存性の失敗: krb5-devel は openssl-1.0.1e-30.el6.x86_64 に必要とされています zlib-devel は openssl-1.0.1e-30.el6.x86_64 に必要とされています
openssl をビルドするのに必要なパッケージが足りないようなので追加します。
yum install krb5-devel zlib-devel
再びビルドを実行します。
$ rpmbuild -ba SPECS/openssl.spec ... 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.4121ir + umask 022 + cd /root/rpmbuild/BUILD + cd openssl-1.0.1e + '[' /root/rpmbuild/BUILDROOT/openssl-1.0.1e-30.el6.x86_64 '!=' / ']' + rm -rf /root/rpmbuild/BUILDROOT/openssl-1.0.1e-30.el6.x86_64 + exit 0
無事に成功しました。
rpmbuild ディレクトリ配下を確認すると以下のディレクトリが確認できます。
- BUILD(ビルドする際に使用される作業用ディレクトリ)
- BUILDROOT()
- RPMS(ビルド後に生成されるRPM格納ディレクトリ)
- SOURCES(ソースコード・パッチ格納ディレクトリ)
- SPECS(SPECファイル格納ディレクトリ)
- SRPMS(ビルドにて生成されるソースRPM格納ディレクトリ)
RPMS ディレクトリ配下を確認すると、rpmが生成されていることが確認できます。
$ tree ~/rpmbuild/RPMS/ /root/rpmbuild/RPMS/ └── x86_64 ├── openssl-1.0.1e-30.el6.x86_64.rpm ├── openssl-devel-1.0.1e-30.el6.x86_64.rpm ├── openssl-perl-1.0.1e-30.el6.x86_64.rpm └── openssl-static-1.0.1e-30.el6.x86_64.rpm