rpmrebuildを用いたカスタムRPMの作成法

 独自のパッケージを作成するのは手間のかかる作業であり、一般ユーザからするとその種の仕事は、暇と忍耐力と技量をもてあましたディストリビューション開発者に任せておくものだと相場が決まっていた。しかしながら一般の管理者やユーザであっても、既存パッケージをリビルドする必要に迫られることがないとも限らない。そんな場合はrpmrebuildを使うことで、インストール済みパッケージをベースとした独自RPMの構築が比較的容易に行える。

 ここではrpmrebuildというユーティリティで実際に何ができるのかを説明するのだが、その前に具体的なシナリオをいくつか提示しておこう。まず考えられるのは、何らかの理由によってオリジナルソースからのRPM入手が不可能という場合である。これは例えば、現在ではオンライン公開が停止されたサードパーティ製ないしは自分で作成したカスタムRPMが手元にあり、それを他のシステムで使えるようにしたいといったケースを想定すればいいだろう。

 その他に考えられるケースは、カスタム化したパッケージを配布したいという場合だ。例えば、OpenSSHデーモンを独自に構成した設定ファイルをバンドルして配布したいとしよう。そんな時は、openssh-serverパッケージをrpmrebuildを用いて再パッケージ化し、ストックパッケージの代わりに使うようにすればいい。

rpmrebuildのインストール手順

 rpmrebuildユーティリティの動作環境であるが、rpmbuildがインストールされた最近のRPMベースディストリビューションであれば基本的に問題ないはずだ。rpmbuildがインストールされていない場合は、自分で取得する必要がある。実際、私が使用したCentOS 5環境でも以下のようにyumを用いてrpm-buildパッケージを入手しなければならなかった。

yum install rpm-build

 その次に行ったのは、SourceForge.netのダウンロードページからのrpmrebuild RPMの取得および、「rpm -ivh rpmrebuild-2.1.0-1rpm4.noarch.rpm」によるインストールの実行である。なお、このコマンド構文中のRPMのバージョン番号については、各自の使用するrpmrebuildに合わせて適時変更する必要がある。

リビルド作業の実際

 ユーティリティのインストールが完了したら、後は実際にパッケージのリビルドを行えばいい。rpmrebuildを実行するためのコマンド構文に特に難しい点はなく、「rpmrebuild オプション パッケージ名 」ないしは「rpm --rebuild オプション パッケージ名 」と指定するだけである。

 以下、具体的な事例として、openssh-serverパッケージにカスタムファイルをバンドルしてリビルドする場合について説明しよう。その際に指定すべきコマンドは下記のようになる。

rpmrebuild openssh-server

 必要なすべてのファイルがroot以外のユーザでもアクセス可能となっていない限り、このコマンドはroot権限で実行する必要がある。そして実際にこのコマンドを送信すると、図1のような画面が表示されるはずである。

Figure 1
図1:rpmrebuildによる新規パッケージ作成時の画面(クリックで拡大)

 この画面では、作業を続行するかの確認およびバージョン番号を変更するかの確認が行われた後、ユーティリティの作成したカスタムRPMがどこに保存されたかが表示される。私が使用したCentOS 5環境の場合、カスタムRPMパッケージは/usr/src/redhat/RPMS/i386/パッケージ名.rpmに書き出されている。カスタムRPMの保存先とするディレクトリをユーザ側から指定したければ、「-d」オプションを付けてrpmrebuildを実行すればいい。

 パッケージ作成時に独自ファイルの追加をさせたい場合、作業手順は若干複雑化するが、それほど大げさなものではない。具体的には編集(-e)オプションを指定して、specfileの編集ステップを追加させるだけである。

rpmrebuild -e パッケージ名

 これにより各自のデフォルトエディタが起動され、当該パッケージのspecfileが表示される。この場合に変更が必要なのは%filesで始まるセクションである。

%files
%config(noreplace) %attr(0644 root root) "/etc/pam.d/ssh"
%attr(0755 root root) "/etc/rc.d/init.d/sshd"
%dir %attr(0755 root root) "/etc/ssh"
%config(noreplace) %attr(0600 root root) "/etc/ssh/sshd_config"
%attr(0755 root root) "/usr/libexec/openssh/sftp-server"
%attr(0755 root root) "/usr/sbin/sshd"
%doc %attr(0644 root root) "/usr/share/man/man5/sshd_config.5.gz"

 このセクションの各行は、%dirがディレクトリ、%docがmanページという具合に、必要なファイルの情報を指定している。通常のファイルについてはディレクティブを必要としない。またこれらの各行は、ファイルの実行許可と所有権および、パッケージ化するファイルのパスに関する情報も指定している。ファイルディレクティブの詳細についてはRPM docsを参照して頂きたい。

 例えば、サイト特有の情報を収めたREADMEを追加するには、下記のような行を指定しておけばいいはずである。

%doc %attr(0644 root root) "/usr/local/パッケージ名/README.local

 この「-e」オプションによる操作では、カスタムパッケージの要件変更など、specfileに関するその他の変更を施すこともできる。

 パッケージのリビルドを簡単に実行するツールを求めているのであれば、まずはrpmrebuildを試してみるべきだろう。どのような追加オプションが利用可能かはmanpageが参考になるはずである。

NewsForge.com 原文