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のような画面が表示されるはずである。
図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が参考になるはずである。