先日(11/30)、webmin 1.900 が公開されていました。CentOS5 で動いている既存のwebminをバージョンアップしようとしたところrpmの依存関係で怒られたので、少し考えて src.rpmを使って自分でパッケージ化して入れてみることにしました。その時のメモ。webmin サーバの構築のお話ではなく、rpmを再パッケージ化するLinuxの操作メモです。
https://sourceforge.net/p/webadmin/bugs/5219/
src.rpmを利用して再パッケージ化
src.rpmを用いた再パッケージ化には2つ方法があります。
- src.rpmから直接rpmをリビルドする。
- src.rpmからSPECファイルを修正してからリビルドする。
今回は、rpmの依存関係で怒られているので、1で良さそうなのですが、MD5チェックサムの検証をスキップする必要があったので、2の方法で進めます。
rpmbulidのパッケージがインストールされていれば、以下のようなディレクトリが存在していると思います。
BUILD RPMS SOURCES SPECS SRPMS
SRPMSにsrc.rpmをダウンロードします。
src.rpmから直接rpmをリビルドする
specファイルの修正をしない場合、以下のコマンドで直接リビルドできます。
が、今回は以下のようなエラーが出ます。この場合、MD5チェックサムの検証をスキップする必要があるため、次で紹介する方法が必要です。
エラー: アーカイブの伸長に失敗: ファイル /usr/src/redhat/SPECS/webmin-1.900-1.src.rpm;11f63c51: cpio: MD5 チェックサムが適合しません。
エラー: webmin-1.900-1.src.rpm をインストールできません。
src.rpmからSPECファイルを修正してからリビルドする
src.rpm をインストールします。今回は、md5チェックサム検証を実施しないようにするために、–nomd5オプションをつけています。実行後、SOURCES/とSPECS/に、ソースコードとSPECファイルがそれぞれ、展開されます。
必要に応じて、specファイルを修正(おまけ参照)し、完了したらビルドを開始します。–bb オプションはバイナリパッケージのみをビルドします。修正を加えた specファイルを含むsrc.rpm も同時に作成したい場合は、-ba オプションで指定します。–clean オプションはパッケージが作成された後にビルドツリーを削除します。
だらだらと、文字が出力されますが、最後のほうで以下の文言が現れます。そこに、作成された rpm があります。あとは、出来上がった rpm をインストールしましょう。これで、src.rpmからのビルドは完了です。
書き込み完了: /usr/src/redhat/RPMS/noarch/webmin-1.900-1.rpm
・・
おまけ
今更、CentOS5を新たに入れて動かしてみる人はいないと思いますが、記事にするにあたり、検証したので、おまけ。
動作確認のためCentOS5を最小インストールして、webminの1.900をインストールしてみたところ、他にも以下のような依存関係で怒られました。
手元の環境(CentOS-5.8-i386-bin-DVD-1of2)を最小インストール(追加タスクは何もチェックしない)で試しました。
警告: webmin-1.900-1.noarch.rpm: ヘッダ V4 DSA signature: NOKEY, key ID 11f63c51
エラー: 依存性の欠如:
perl(Net::SSLeay) は webmin-1.900-1.noarch に必要とされています
perl(Encode::Detect) は webmin-1.900-1.noarch に必要とされています
rpmlib(FileDigests) <= 4.6.0-1 は webmin-1.900-1.noarch に必要とされています
rpmlib(PayloadIsXz) <= 5.2-1 は webmin-1.900-1.noarch に必要とされています
最小インストールなので、rpmbuildは以下で、インストールします。
perl(Net::SSLeay) は、依存関係がなさそうだったので、CentOS 5のDVDの中に入っていたので、yumで入れてもよいし、/media/CentOS に移動して rpm で直で入れてもよでしょう。
perl(Encode::Detect) は、perl-Encode-Detect になるようですが、CentOS 5 の DVD の中に見つけられませんでした。ただ、webmin のソースコードを確認したところ、Encode::Detect を利用してそうなところは、以下になります。
/webmin-1.900/filemin/edit_file.cgi
perl-Encode-Detect がいれられない場合で、この機能を使わないと割り切れるのであれば、Encode::Detect の依存は不要ということで、漢前にspecファイルをいじって依存関係を断ち切り rpm 化してもよいでしょう。依存関係を断ち切りには、以下の3行目の Requires の perl(Encode::Detect) を削除します。
1 2 3 4 5 | ・・ PreReq: /bin/sh /usr/bin/perl /bin/rm Requires: /bin/sh /usr/bin/perl /bin/rm perl(Net::SSLeay) perl(Time::Local) perl(Encode::Detect) openssl AutoReq: 0 ・・ |
このspecファイルを利用してビルドを行い、「rpm インストール」・「webmin にログイン」・「webmin からシャットダウン」ができるところまで確認はできました。
当然動作保証はないので自己責任でお願いします。
ちなみに、インストール後、10000ポートにつながらなくて、一瞬やっぱりダメ?と思ったが、OSインストール直後なので、デフォルトのファイアウォールに引っかかっていた。検証環境を作る場合は、10000ポートを開けておく必要があるので動作確認の際はお忘れなく。