kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

CentOS7.1 64bit rpmbuildコマンドによるRPMの作成

CentOS7にパッケージのインストールを行う際に、yumコマンドを利用すると手軽に行えますが、最新のバージョンはインストールできないものもあります。

最新のバージョンのパッケージのインストールを行いたい場合、rpmbuildコマンドを使用することで、ソースやSRPMから最新のバージョンのRPMを作成し、インストールを行うことができます。

ここではCentOS7.1の64bit版で、rpmbuildコマンドを使用してRPMを作成する方法について、以下に示します。

※CentOS6 64bitをご使用の場合は、当サイトのCentOS6 64bit rpmbuildコマンドによるRPMの作成のページをご覧ください。

以下の各コマンドで、プロンプトが「#」で開始しているものはrootユーザーでの実行、「$」で開始しているものは一般ユーザーでの実行となります。

rpmbuildコマンドの実行用のユーザーの作成

rpmbuildコマンドは、rootユーザーでは実行しないほうがよいようです。(思わぬ問題を避けるためらしいです。)

rpmbuildコマンドの実行に使用するユーザーを、以下のコマンドで作成します。

※通常のユーザー作成と同様です。ここではユーザー名を「user01」としています。

# useradd user01

以下のコマンドを実行して、作成したユーザーにパスワードを設定します。

# passwd user01

RPMの作成に必要なコマンドのインストール

このサイトで紹介しているrpmbuildコマンドでRPMを作成する方法を行う際に、CentOS7.1 64bitのインストールを「CentOS-7-x86_64-Minimal-1503-01.iso」からインストールした直後には不足しているコマンドのインストール手順を、以下に示します。

RPMの作成に使用するソース等のダウンロード時には、wgetコマンドを使用します。

以下のコマンドを実行して、wgetのインストールを行います。

# yum install wget

尚、初めてyumコマンドでパッケージのインストールを行う際には、以下のような警告メッセージが表示されます。

警告: /var/cache/yum/x86_64/7/base/packages/wget-1.14-10.el7_0.1.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID xxxxxxxx: NOKEY- ETA
wget-1.14-10.el7_0.1.x86_64.rpm の公開鍵がインストールされていません
wget-1.14-10.el7_0.1.x86_64.rpm                                                                                    | 545 kB  00:00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 から鍵を取得中です。
Importing GPG key 0xXXXXXXXX:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
 Package    : centos-release-7-1.1503.el7.centos.2.8.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
上記の処理を行います。よろしいでしょうか? [y/N]

これはyumコマンドでパッケージのインストールを行う際には、GPG署名というものを使用して、パッケージの検証を行うようになっているのですが、その際に必要なキーが存在しないため、インポートしてよいか確認するメッセージになります。

キーのインポートを行うので、「y」を入力します。

尚、インポートされているキーは、以下のコマンドで確認できます。

# rpm -qa gpg-pubkey*
gpg-pubkey-xxxxxxxx-xxxxxxxx

RPMの作成には、rpmbuildコマンドを使用します。

rpmbuildコマンドは、パッケージrpm-buildに含まれています。

これは以下のコマンドで確認できます。

# yum provides */rpmbuild
:(略)
rpm-build-4.11.1-25.el7.x86_64 : Scripts and executable programs used to build packages
リポジトリー        : base
一致          :
ファイル名    : /usr/bin/rpmbuild

以下のコマンドを実行して、rpm-buildのインストールを行います。

# yum install rpm-build

rpmbuildコマンドの実行について

rpmbuildコマンドの実行時に作成されるディレクトリについて

rpmbuildコマンドの実行時には、ここで作成したユーザー「user01」で実行した場合を例にしますと、「/home/user01/」配下に以下のようなディレクトリが作成されます。

  • rpmbuild/BUILD/
  • rpmbuild/BUILDROOT/
  • rpmbuild/RPMS/
  • rpmbuild/SOURCES/
  • rpmbuild/SPECS/
  • rpmbuild/SRPMS/

ソースからRPMを作成する場合

ソースからRPMを作成する場合は、以下のようにrpmbuildコマンドを実行します。

$ rpmbuild -tb --clean httpd-2.4.16.tar.bz2
  • rpmbuildコマンドのオプションに「-tb」、「--clean」を指定して、RPMの作成元には「.tar.bz2」ファイルを指定しています。
  • rpmbuildコマンドの実行に成功すると、ディレクトリ「rpmbuild/RPMS/x86_64/」または「rpmbuild/RPMS/noarch/」にRPMが作成されます。

※この方法では、ソースファイルにSPECファイルが含まれている必要があります。SPECファイルが含まれていない場合は、以下のSRPMからRPMの作成を行います。

SRPMからRPMを作成する場合

SRPMからRPMを作成する場合は、以下のようにrpmbuildコマンドを実行します。

$ rpmbuild --rebuild --clean distcache-1.4.5-23.src.rpm
  • rpmbuildコマンドのオプションに「--rebuild」、「--clean」を指定して、RPMの作成元には「.src.rpm」ファイルを指定しています。
  • rpmbuildコマンドの実行に成功すると、ディレクトリ「rpmbuild/RPMS/x86_64/」または「rpmbuild/RPMS/noarch/」にRPMが作成されます。

※この方法でrpmbuildコマンドの実行に失敗してしまう場合は、以下のSPECファイルからRPMの作成を行います。

SPECファイルからRPMを作成する場合

SRPMからRPMの作成に失敗してしまう場合、失敗したrpmbuildコマンドの実行時に、ディレクトリ「rpmbuild/SPECS/」にSPECファイルが作成されていますので、そのSPECファイルを修正することで、SPECファイルからRPMの作成を行うことができます。

※SPECファイルの修正内容は、エラーの内容によります。

SPECファイルSRPMからRPMを作成する場合は、以下のようにrpmbuildコマンドを実行します。

$ rpmbuild -bb --clean rpmbuild/SPECS/php56u.spec
  • rpmbuildコマンドのオプションに「-bb」、「--clean」を指定して、RPMの作成元には「.spec」ファイルを指定しています。
  • rpmbuildコマンドの実行に成功すると、ディレクトリ「rpmbuild/RPMS/x86_64/」または「rpmbuild/RPMS/noarch/」にRPMが作成されます。

rpmbuildコマンドによるRPMの作成については、以上です。