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" とします。