Apacheをバージョンアップする 


続いてやりたいこと 

Apacheを使い出して、その安定性に驚きと関心を素直に認めざるを得ないという嬉しい状況ですが、Apacheもプログラムですから、バグというかセキュリティホールが時折見つかることがあります。私はずっとFreeBSDのPackageインストールでApache1.3.24を使ってきたのですが、そろそろセキュリティホール対策を施されたバージョンに移行したいと思うようになりました。聞いたところによるとApacheのセキュリティホールを狙う方法が広まっているとか。怖いです。

そうなるとApacheの最新バージョンをFreeBSDにインストールしたい。Packageからのインストールでそれが実現すれば、一番手間がかからないのですが、多分それは期待できないでしょう。FreeBSDのPackageには、少し古いバージョンのApacheが使われています。残念です。

とりあえず、まずはビギナー向けApacheのサイトを読んで、予備知識を頭に入れましょう。インストールを成功させるための秘訣だと思います。

注意事項

私の経験からすると、PackageインストールでApacheをインストールしていた環境を、そのままソースコードからコンパイルしてバージョンアップするのは無理のようです。なぜかというと、構成ファイルがインストールされる位置(ディレクトリ)が、Packageインストールと、ソースコードからのインストールでは全然違うからです。ですから、httpd.confは念のためバックアップを取って置いてください。そうでないと後から苦労することになります。バックアップしておくと後で元通りの環境に戻すことも可能だと思います。

次に、古いバージョンのApacheは、Packageインストーラから、アンインストールしてしまった方が良いと思われます。インストール時にスペースキーを押してXマークをつけたと思いますが、もう一度そこでスペースを押してXマークを削除してからOKすると、アンインストールが実行されます。出来るだけゴミを残さない為に、私はその方法をとりました。本当の手順はどうなのだかわかりません。解説した資料を探し出せませんでした。

そもそもなぜPackageインストールと、ソースコードからのインストールでは、ファイルの位置に違いが出るんでしょうね。簡単にバージョンアップする為にも、是非統一して欲しいです。

Apacheの最新バージョンを手に入れる

Packageからインストールできないとなると、ソースコードを手に入れてきて、それをコンパイルしてインストールするしかありません。この手順が良く分からなかったのと、今の環境が崩れてしまうんじゃないかとしり込みしていましたが、やるしかないと決意し、この方法でインストールすることにしました。

まずは、ソースコードをゲットして来なくてはなりません。こちらからゲットして来ましょう。http://www.apache.org/dist/httpd/
FreeBSD版のバイナリーが用意されていれば、それをゲットしてくれば確実です。でも私がダウンロードしに行った時は、1.3.26のバイナリしか有りませんでした。仕方が無いので、ソースコードのアーカイブ(apache_1.3.27.tar.gz)をダウンロードして来ました。

ApacheのソースコードをFreeBSDに転送する

次にやることは、手に入れてきたソースコードのアーカイブapache_1.3.27.tar.gz)を、FreeBSDに転送することです。FTPで転送する方法が手っ取り早くて良いでしょう。うちの環境では、rootはFTPを使えませんので、とりあえず一般ユーザーでFreeBSDにファイルを転送します。この辺りの設定が出来ていない方は、こちらを参照して、FTPを使用できるようにして下さい。

FTPで転送する手段は色々とありますが、私はWindows用のフリーウェアである、ffftpというFTPクライアントを使わせてもらっています。ffftpを使ってファイルを転送すれば、簡単にファイルをFreeBSDマシンに転送することが出来ます。私は一般ユーザー(sasapurin)でログインして、/usr/home/sasapurin/apache/にソースコードのアーカイブを転送しました。

Apacheのソースコードアーカイブを展開する

さて、ここからはFreeBSDでの作業です。WindowsパソコンからTelnetで接続して作業することも可能ですが、root権限でやった方が良いと思われますので、私は直接FreeBSD端末を操作しています。rootでTelnet出来るようにするという方法もありますが、セキュリティ面からお勧めできません。会社の中とか、自宅の中で閉鎖されている環境ならそうするのもアリかも知れませんが、基本的にはそうしない方が良いでしょう。

さて話を戻します。apache_1.3.27.tar.gzは、.gzという識別子がついているので、まずはgunzipでファイルを展開する必要があります。FTPでソースコードを転送したディレクトリに移動してから、下記のコマンドを投入してファイルを展開して下さい。

www# cd /usr/home/sasapurin/apache/
www# gunzip apache_1.3.27.tar.gz

そうすると、apache_1.3.27.tarというファイルが生まれます。要するに「.gz」という識別子が取れたファイルになるのです。

次にapache_1.3.27.tarを展開します。

www# tar xvf apache_1.3.27.tar

そうすると、apache_1.3.27というディレクトリが生まれて、その下にファイル群が展開されます。解凍されるといった方が分かりやすいかも知れませんね。

Apacheのソースコードを調査してコンパイルの準備する

正直言ってこのステップの意義は理解していません。決まりごとみたいなので素直に従います。気になる人は自分で調べてください。ソースコードが置いてある階層に移動してから、./configureというコマンドを投入すると、コンパイルの準備が始まります。しばらくFreeBSDが処理を行います。

www# cd apache_1.3.27
www# ./configure

Apacheのソースコードからコンパイルする

makeというコマンドを一発投入するだけでコンパイルが実行されます。エラーが出ないことを祈りながらコンパイルの終了を待ってください。エラーが出たら、今の私の知識ではどうしようもありません。こちらを参考にして下さい。

www# make

Apacheのコンパイル済みファイルをインストールする

make installというコマンドを一発投入するだけでインストール処理が実行されます。エラーが出ないことを祈りながらインストールの終了を待ってください。コンパイル同様、エラーが出たら、今の私の知識ではどうしようもありません。こちらを参考にして下さい。

下記のような結果が表示されたらインストールは成功です。

You now have successfully built and installed the
Apache 1.3 HTTP server. To verify that Apache actually
works correctly you now should first check the
(initially created or preserved) configuration files

/usr/local/apache/conf/httpd.conf

and then you should be able to immediately fire up
Apache the first time by running:

/usr/local/apache/bin/apachectl start

Thanks for using Apache. The Apache Group
              http://www.apache.org/

上のメッセージに書いてある通り、

www# /usr/local/apache/bin/apachectl start

とコマンドを投入するとApacheがスタートします。残念ながらPackageインストールで使えていた、apachectl startや、apachectl stop等という省略したコマンドでは受け付けてくれません。不便ですから何とかしたいです。

※なぜFull Path指定しないと apachectl が使えないのか。
これは環境変数に /usr/local/apache/bin/ という情報が登録されていないからです。頻繁に使う様であれば、ログインシェルに環境変数を読み込むようにする等して置くと省力化できます。おそらくソースからコンパイル&インストールしたので、その辺りの設定まで行ってくれなかったものと考えられます。PortsやPackageからインストールすると、丁寧に環境変数に登録してくれるので、この辺りの手間が省けます。

残った課題

一応、バージョン1.3.24から1.3.27へと、最新版Apacheへバージョンアップは終わりましたが、課題が残りました。

  1. FreeBSD起動時にApacheが自動的に起動しなくなっちゃった
    /usr/local/etc/rc.dというディレクトリに、Apacheを起動させる為のスクリプトを置いておけば、自動的に起動させられるようです。でもスクリプトを自分で書けません。
  2. apachectlコマンドが使えなくなっちゃった。
    いちいち”/usr/local/apache/bin/apachectl startなどと長いコマンドを入力しなくてはならないのは面倒で
    す。

今後の課題は、UNIXのしきたりを理解しないと解決しなさそうです。当分は面倒だけどこのコマンドを入れるしかなさそうです。

※ソースからコンパイル&インストールした場合は、PATHを手作業で環境変数に登録しときましょう!

課題の一つ自動起動方法を発見!

残った課題1である、FreeBSD起動時にApacheを自動起動する方法を見つけました。Apacheの起動スクリプトを、/usr/local/etc/rc.d/に置いておけば、FreeBSDが起動する時にその起動スクリプトを読み込んで、Apacheを自動的に起動させてくれます(ここにも起動スクリプトが紹介されています)。要するに/usr/local/etc/rc.d/は、Windowsで言うところの「スタートアップ」フォルダみたいな役割なんでしょうね。

一つ注意点はファイルの実行権を与えておくこと。chmodコマンドで実行権を与えておく必要があります。

残る課題はもう一つ。どういう仕組みなんだろうなぁ...とりあえずFreeBSDの起動プロセスについて解説されたサイトを発見したのでリンク張っておきます。