webmin 1.900 を CentOS 5に入れる

先日(11/30)、webmin 1.900 が公開されていました。CentOS5 で動いている既存のwebminをバージョンアップしようとしたところrpmの依存関係で怒られたので、少し考えて src.rpmを使って自分でパッケージ化して入れてみることにしました。その時のメモ。webmin サーバの構築のお話ではなく、rpmを再パッケージ化するLinuxの操作メモです。

http://www.webmin.com/

CentOS5はサポートが終わっているので、早めに6や7にアップデートしましょう。以下のSOURCEFORGEの議論でも、CentOS5を利用することは、おすすめされていません。いくつかの機能で必要なperlのバージョンが違うという話も出ています(未検証)。
https://sourceforge.net/p/webadmin/bugs/5219/
スポンサーリンク

src.rpmを利用して再パッケージ化

src.rpmを用いた再パッケージ化には2つ方法があります。

  1. src.rpmから直接rpmをリビルドする。
  2. src.rpmからSPECファイルを修正してからリビルドする。

今回は、rpmの依存関係で怒られているので、1で良さそうなのですが、MD5チェックサムの検証をスキップする必要があったので、2の方法で進めます。

rpmbulidのパッケージがインストールされていれば、以下のようなディレクトリが存在していると思います。

# ls /usr/src/redhat/
BUILD RPMS SOURCES SPECS SRPMS

SRPMSにsrc.rpmをダウンロードします。

今回は有名なソフトを検証環境でビルドするだけだったため、rootユーザーで rpmbulid していますが、本来一般ユーザでビルドすべきです。(rpmbulid は任意のコードが実行できるため、悪意のあるコードが実行される可能性があります。)

src.rpmから直接rpmをリビルドする

specファイルの修正をしない場合、以下のコマンドで直接リビルドできます。

# rpmbuild --rebuild /usr/src/redhat/SRPMS/webmin-1.900-1.src.rpm

が、今回は以下のようなエラーが出ます。この場合、MD5チェックサムの検証をスキップする必要があるため、次で紹介する方法が必要です。

webmin-1.900-1.src.rpm をインストール中です。
エラー: アーカイブの伸長に失敗: ファイル /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ファイルがそれぞれ、展開されます。

# rpm -ivh --nomd5 /usr/src/redhat/SRPMS/webmin-1.900-1.src.rpm

必要に応じて、specファイルを修正(おまけ参照)し、完了したらビルドを開始します。–bb オプションはバイナリパッケージのみをビルドします。修正を加えた specファイルを含むsrc.rpm も同時に作成したい場合は、-ba オプションで指定します。–clean オプションはパッケージが作成された後にビルドツリーを削除します。

# rpmbuild -bb --clean /usr/src/redhat/SPECS/webmin-1.900-1.spec

だらだらと、文字が出力されますが、最後のほうで以下の文言が現れます。そこに、作成された 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)を最小インストール(追加タスクは何もチェックしない)で試しました。

# rpm -ihv webmin-1.900-1.noarch.rpm
警告: 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は以下で、インストールします。

yum --disablerepo=\* --enablerepo=c5-media install rpm-build

perl(Net::SSLeay) は、依存関係がなさそうだったので、CentOS 5のDVDの中に入っていたので、yumで入れてもよいし、/media/CentOS に移動して rpm で直で入れてもよでしょう。

rpm -ihv perl-Net-SSLeay-1.30-4.fc6.i386.rpm

perl(Encode::Detect) は、perl-Encode-Detect になるようですが、CentOS 5 の DVD の中に見つけられませんでした。ただ、webmin のソースコードを確認したところ、Encode::Detect を利用してそうなところは、以下になります。

/webmin-1.900/authentic-theme/extensions/mail/mail-lib.pm
/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ポートを開けておく必要があるので動作確認の際はお忘れなく。