RPMパッケージとソースコードインストールどちらがよいのか


Apacheのバイナリファイル(httpd)に拡張機能を組み込ませた方が反応が良くなりパフォーマンスが向上する。ただし消費メモリ容量が増加する。

 ソースコードをtar.gz形式でダウンロードした形態でインストールする方法を解説しよう。RPMパッケージとしてインストールしたい人は、この項目ではなく「RPMパッケージからインストールする」に進むのがよい。

 Apacheがインストールされていない環境でソースコードからインストールするのであれば、話は簡単だ。しかしRed Hat Linuxなどのディストリビューションの場合、カスタムインストールで意識的にApacheをインストールしないようにしなければRPMパッケージとしてインストールされることがほとんどである。その場合には、既存のApacheとどのように共存するのかを考える必要があるのだ。

 まず最初に、既存の環境にApacheがRPMパッケージとしてインストールされているかどうかを確認することから始めよう。ApacheがRPMパッケージとしてインストールされているかどうかを調べるには、次のようにrpmコマンドを実行すればよい。

$ rpm -q apache
apache-1.3.xx-yy
※「xx」「yy」にはリビジョン番号、およびRPMリリース番号が入る

 上記の際に次のように表示された場合、ApacheがRPMパッケージとしてインストールされていると判断ができる。もし、何も表示されないのであれば、「Apacheのソースコードのダウンロード」に進んでほしい。 ApacheがRPMパッケージとしてインストールされていた場合には、次の3つの選択肢がある。

1. RPMパッケージをアンインストールする

 1つ目の方法は、既存のApacheのRPMパッケージを削除する方法だ。rootユーザーとしてログインし、次のように指定すればRPMパッケージのApacheがアンインストールできるはずだ。

# rpm -e apache-1.3.xx.yy

※「xx」「yy」には、「rpm -q apache」で表示されるリビジョン番号、およびRPMリリース番号が入る

 上記で「はずだ」と表現したのは、実際にはApacheのRPMパッケージがほかの多数のパッケージと依存関係にあるからだ。次のようなエラーが表示されてうまく削除できない可能性が高い。

エラー: これらのパッケージを削除すると依存性を破壊します:
    apacheは apacheconf-0.8.2-2 に必要とされています
    webserver は mod_dav-1.0.3-5 に必要とされています
    webserverは mod_perl-1.26-5 に必要とされています
    webserverは mod_ssl-2.8.7-4 に必要とされています
    webserverは namazu-cgi-2.0.10-4 に必要とされています
    webserverは webalizer-2.01_10-1 に必要とされています
    webserverは auth_ldap-1.6.0-4 に必要とされています
    webserverは mailman-2.0.9-1 に必要とされています
    webserverは mod_auth_any-1.0.2-1 に必要とされています
    webserverは mod_auth_pgsql-0.9.12-2 に必要とされています
    webserverは mod_bandwidth-2.0.3-3 に必要とされています
    webserverは mod_put-1.3-4 に必要とされています
    webserverは mod_python-2.7.6-5 に必要とされています
    webserverは mod_roaming-1.0.2-4 に必要とされています
    webserverは mod_throttle-3.1.2-5 に必要とされています
    webserverは mod_auth_mysql-1.11-1 に必要とされています
    webserverは nut-cgi-0.45.4-1 に必要とされています
※どのような依存関係があるのかは、他にインストールされているRPMパッケージに依存する

 上記のエラーを解消するためには、依存されているRPMパッケージを1つずつ削除する、もしくは「rpm -e -nodeps」と指定して依存関係を無視して削除することになる。しかし、後者の「rpm -e -nodeps」の方法はRPMのデータベースを壊すことになり以後の運用に影響し兼ねない。よって面倒でも1つ1つの依存を解消して削除することが望ましい。


依存関係に表示されるパッケージの中でも、「apacheconf」はRed Hat Linuxに付属のApache設定ツールであり、それ以外は標準に含まれないモジュール群である。よって、これらを削除してしまったとしても、Apache以外の動作に影響は及ぼすことはない。

2. RPMパッケージでインストールされているディレクトリに上書き

 ソースコードからApacheをインストールする際には、標準設定のディレクトリ先に各種のファイルが配置される。しかし、オプションを設定することでRPMパッケージでインストールされているApacheと同じディレクトリに上書きインストールすることが可能だ。  この方法には概ね問題は無いが、RPMパッケージでインストールされたApacheと、ソースコードでインストールするApacheとでは、コンパイル時の設定が異なることを忘れてはならない。十分に注意しなければ、RPMパッケージでは動作していたモジュールやRed Hat Linux付属の設定ツールなどが正しく動作しなくなる可能性がある。  また、この手段はRPMパッケージでインストールされたファイルを無理矢理書き換えることになるため、RPMパッケージの依存関係を壊すことにもなる。つまり、いちど上書きしてインストールしてしまうと、次回以降はrpmコマンドでのApacheをアップグレードすることができないことを意味する。

3. 2つのバイナリを同居させる

 これはRPMパッケージでインストールされたApacheを無視する方法だ。RPMパッケージからインストールされたApacheと、ソースコードからインストールするApacheを同居させる。要は必要な方だけを動作させ、使わない方はディレクトリごと残しておくという意味だ。

 ソースコードからApacheを標準設定のままインストールすると、RPMパッケージでインストールされた保存先とは異なるディレクトリになる。このため、後述するconfigure指定で標準設定のままインストールすれば問題は起きない。

 ただし、共存をさせるとプロセスを確認しただけではどちらが動いているのかが分かりにくくなる可能性もある。実行スクリプト(/etc/rc.d/init.d/httpd、/usr/local/apache/bin/ apachectlなど)内容を厳重に管理するか、RPMパッケージApache(httpdバイナリ)の実行パーミッションを解除させておくなどの工夫が必要だろう。

 Red Hat Linuxには、起動時にApacheを起動するための制御スクリプト(/etc/rc.d/init.d/httpdファイル)が付属しており、当然、RPMパッケージからインストールされたApacheを制御するよう記述されている。よって起動スクリプトを変更しない限り、ソースコードからインストールしたApacheは起動されないはずだ。

 上記3つのいずれの方法も一長一短であり、どれが望ましいとハッキリとは言えない。しかし、最も間違いが無くシンプルなのは(1)の方法だ。この方法であれば、Apacheをまったく新規にインストールした状態と同じため、面倒な問題は起きない。このため筆者としては、(1)の方法を推奨する。

 そうとはいえ、場合によっては(2)の方法も悪くない。Red Hat Linuxに含まれているApacheの起動スクリプトをそのまま流用することができるからだ。以下の説明では、(1)〜(3)のすべての方法で使える説明をするので、用途によってどの方法が好ましいかを判断してほしい。

PREV 4/14 NEXT