CentOS で RPM パッケージを作成できるようにする

SOFTWARE REPORT


RPM パッケージを作成できるようにする

Linux のパッケージ管理機構としてよく利用されているものに RPM というものがあります。RPM は RPM 形式で提供されているパッケージのインストールやアップデートといった管理を行います。

tar で提供されたソースコードも、spec ファイルが付属していれば RPM に変換して管理することが出来るのですが、RPM パッケージを作成するためには rpmbuild というコマンドが必要になります。

 

CentOS では、通常は yum を用いてパッケージ管理を行いますが、yum で提供されていないパッケージをインストールしたい場面もあります。

そういった際には RPM を用いると良いかと思いますけど、CentOS 5.3 は、標準では rpmbuild がインストールされていないので、RPM を構築できるようにするためには、次のようにして rpmbuild をインストールする必要がありました。

yum install rpm-build

これで rpmbuild が利用できるようになります。

 

RPM パッケージを作成するに当たって

たとえば "****.tar.gz" という tar でまとめられたソースコードがある場合で、その中に "****.spec" という spec ファイルが含まれている場合には、次のようにして RPM パッケージを構築することが可能とのことです。

rpmbuild -ta ****.tar.gz

なお、CentOS 5.3 の場合、"****.tar.gz" ファイルは "/usr/src/redhat/SOURCES/" ディレクトリへ保存する必要があるようでした。

 

CentOS 6.0 では、ソースコードはどこにあっても大丈夫な感じでしたけど、基本的には "/root/rpmbuild/SOURCES/" ディレクトリへ保存するのがいいようです。

このディレクトリは最初は用意されていないので、"mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}" などとして作成しておくといいかもしれません。

RPM パッケージを作成する際には root 以外の権限を用いて RPM パッケージを作成するのが良いそうですが、CentOS 5.3 で試してみた感じでは、root 権限でないと RPM パッケージ構築時に権限が無いとのことでエラーになってしまう感じです。

 

RPM パッケージが正しく作成されると、CentOS 5.3 (x64) では RPM パッケージは "/usr/src/redhat/RPMS/x86_64" ディレクトリにそれが保存されていました。

CentOS 6.0 (x64) では "/root/rpmbuild/RPMS/x86_64" ディレクトリになります。

 

PRM パッケージが出来上がったら、"rpm -ivh ****.rpm" というようにして、RPM パッケージのインストールを行うことが可能です。

RPM パッケージをインストールすると "yum list installed" にも、インストール済みのパッケージとしてリストアップされる感じでしたので、ソースコードからのインストールが必要な場合には、RPM に変換できるものはしておいた方が、ソフトウェアの管理がしやすくて良いと思います。

 

RPM 作成中にエラーになる場合

RPM 作成中に、例えば次のようなエラーが表示されることがありました。

エラー: ビルド依存性の失敗:

tcp_wrappers は pptpd-1.3.4-1.el6.x86_64 に必要とされています

このような場合には、RPM を作成中のソースコード(上記の例では "pptpd-1.3.4-1.el6.x86_64")で使用するパッケージ(ここでは "tcp_wrappers")が不足しています。

なので、"yum install tcp_wrappers" などとして、不足しているパッケージをインストールしてから、RPM の再作成を行います。

 

configure: error: no acceptable C compiler found in $PATH

このような場合は、CentOS 上に "gcc" などの C 言語のコンパイラーが存在していないことを意味します。

そのため、CentOS であれば "yum install gcc" として、C 言語のコンパイラーをインストールしてから、RPM の再作成を行います。

 

/var/tmp/rpm-tmp.93ak53: line 58: /usr/bin/make: No such file or directory

このような場合は、/usr/bin/make コマンドが見つからないことを意味しています。

そのため、このコマンドが含まれるパッケージをインストールしてから、RPM の再作成を行う感じになります。ちなみに上記の例では make パッケージが不足しているので、CentOS であれば "yum install make" とします。