MacOS X 10.4でApache2.2.8を動かす
うちのサーバはPowerMac G4 500MHzという非力なマシンなのですが、Xoopsという便利ではあるけれども非常に重いCMSを使っています。いろいろとモジュールが揃っていたり、インターネットを探せばたくさん情報もあるし本も多く出ているのでなかなか他に移行できないのです。
が、いよいよもってこの重さに耐え切れず、また先日Apacheの最新版, apache2.2.8がリリースされた というニュースを見て、ぼちぼち高速化を進めることにしました。
まずサーバの構成を確認します。俗に"MAMP"というものですが、Living-e AGが最近配布している超お手軽パッケージではなく、地道に各パッケージごとに手動で入れています。理由としては、MAMPパッケージに含まれるアプリケーション以外のものを入れたいときに、格納場所などが特殊なところになっていたりするとやっかいだからです。
- OS : MacOS X 10.4.11 (Tiger)
- Webサーバ : Apache 1.3.3 (Tigerに標準のもの)
- php : php 4.4.7 (Xoops2.0.6jaに合わせて)
- MySQL : mysql-standard-4.0.25-apple-darwin7.9.0-powerpc
- CMS : Xoops 2.0.6ja
phpやMySQLが非常に古いバージョンを使っている唯一の理由はXoops2.0.6を安定して走らせるためです。(ひょっとしたら最近だとphp5にMySQL5で動くのかな)
一気に全てをアップグレードするのはリスクが大きすぎるので、まずは最もXoopsから遠く、直接的な関係のないapacheから。
現在apacheは1.3系とスレッド処理などで負荷処理が賢くなった2.x系があります。
MacOS Xでは、10.4が1.3系、そして新しい10.5が2.x系(現時点で10.5.2には2.2.6が入っています)となっています。なので、「OSを10.5にすりゃいいじゃん!」という気がするのですが、10.5はG4 800MHz以上(たしか)にしかインストールができず、うちのマシンには10.5を入れることが出来ないのです。なので、OSは10.4のままで、必要なアプリのみ手動でアップデートするしかないというわけです。
さて、Linux等と違いMacOSの場合、おいそれと簡単には./configure, make, make installとはいかないという事情があります。apacheの場合はそれ自身がMacOSの重要な機能をつかさどっている一部になっているので、その部分を無視して入れてしまうとMacOS側の機能が使えなくなってしまいます。特に問題なのは「Webファイル共有」関係。詳しいところは分からないのですが、例えばLinux向けのapacheディストリビューションには含まれない"mod_bonjour"というモジュールが組み込まれています。
またapacheの起動に関しても、rcなどではなく、/etc/hostconfigにWebサーバの起動・停止フラグを記述し、それを見て/System/Library/StartupItems/Apache以下のスクリプトが走るようになっています。ちなみにこれらのMacOS Xとのからみを完全に無視していれることも可能ですし、ちゃんと動きます。ができるだけMacOS Xの作法に従ってエレガントに入れておいたほうがあとあとややこしくなくていいかと。
さて、とりあえず実行モジュールを準備する上で一番の問題は上のmod_bonjourをどうするか?という点。Apacheサイトの説明によると、1.3系から2.x系への移行でモジュールとのAPIが大幅に書き換えられ、1.3系のモジュールをそのまま持ってきても動きません とのこと。
なので、その他の多くのモジュールは2.xに含まれるソースからビルドしても問題ないわけですが、mod_bonjourがない。ところでMacOS Xの最新版である、10.5 (Leopard)に標準でバンドルされるapacheは2.2.6なのです。2.2.6と2.2.8の差異はわずかなので、PPC版のMacでMacOS X 10.5が入ったやつがあれば、これから少なくともmod_bonjourだけひっぱってきてインストールしてやれば動きそうな気配です。
幸いにもPowerBook G4 15inch (late2006)に10.5を入れたものがあったので、こいつからひっぱってくることにしました。
- /etc/apache2 (設定関係の入っているフォルダ。1.3では/etc/httpdでした)
- /usr/libexec/apache2 (mod_*の入っているフォルダ。1.3では/usr/libexec/httpdでした)
- /usr/include/apache2 (ヘッダファイル関係。実行時には直接は必要ありませんが)
- /usr/sbin/apachectl, httpd (apache2.2.6の制御アプリと本体)
ためしに、そのままごっそりコピーしてきて、ただし/usr/sbin以下の2つのファイルだけは現行の1.3と重なっていますので、上書きしてしまっては大変ですから、オリジナルをapachectl1.3, httpd1.3にリネームして、2.2.6のものをapacheclt2.2.6, httpd2.2.6として同様にコピーし、MacOS Xが起動時に期待する名前となるようシンボリックリンクを張ってから起動してみます。
% ln -s ./apachectl2.2.6 ./apachectl
% ln -s ./httpd2.2.6 ./httpd
これで、だめもとでapachectl startをかけてみます。
が、見事撃沈。予想はしていましたが、ダイナミックリンクライブラリ関係も大幅に新しくなっているようで、エラーが出るライブラリをひとつひとつ10.5からコピーしてきましたがきりがありません。早々にLeopardの2.2.6を動かすという甘い考えは捨てて、apache本家のソースアーカイブからビルドすることにしました。(これにより必要なダイナミックライブラリも作られます)幸いにも本家ソースはそのままMacOS Xでビルドできるようになっているので、./configure, makeでおしまいです。
さて、ここで普通ならばmake installとやりたいところですが、標準のapacheがインストールされる場所とMacOS Xでは場所が違います。さて困った、どうするか。
しかし幸いにもapache2のインストール先は、ダイナミックライブラリを除き、/usr/local/apache2以下に設定ファイルなども含め全て集約されるので、とりあえずmake installでインストールしておき、あらためて必要なファイルをコピーして移動するか、シンボリックリンクを張ることで対応することを考えます。ちなみに対応関係は以下のとおりです。
| MacOS X | apacheオリジナル | |
| 実行イメージ | /usr/sbin | /usr/local/apache2/bin |
| 設定ファイル | /etc/apache2 | /usr/local/apache2/conf |
| モジュール | /usr/libexec/apache2 | /usr/local/apache2/ |
| コンテンツ | /Library/WebServer/Documents | /usr/local/apache2/htdocs |
MacOSが期待する場所へあとでシンボリックリンクを張っておけば大丈夫でしょう。またいっぽうで上記でビルドしたapachectl, httpdはapacheデフォルトのパスにhttpd.confなどがあることを期待するので、そちらにリンクを張ります。モジュール関係、ログファイル、コンテンツファイルの場所に関しては、httpd.confと、あと2.xから増えた./conf/extra, ./conf/otherディレクトリ以下にある追加設定ファイルに記述されているのでこれらを書き直せば問題ありません。
こういう付け焼刃的なやり方をせず、きちんと見るべき場所、インストールされるべき場所を指定してビルドするときは、apacheのconfigureのマニュアルをご覧下さい。
1.3のhttpd.confと、MacOS X 10.5に標準で入っていた2.2.6のhttpd.confの中身を良く見比べて、1.3の方で手動で設定している部分を転記します。
終わったらapache -vとか、httpd -vとかやってちゃんと2.2.8の実行イメージが見えているかを確認したうえで、apachectl startをします。
これで無事入れ替え完了!
となればよかったのですが、xoopsが使っている肝心のphp4.4.7のモジュール、php4_mod.soが動きません。php4のサイトを見ると、どうやら2.x系向けに作り直してやらねばならない様子。しょうがないのでphpのサイトから、4.4.7、ではなく、つい最近リリースされた最新版の4.4.8を持ってきて、
./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr
とかやったように思います(汗)
追記:
その後いじってると、mb-string関係の機能がごっそり落ちていたので、ブログで記事がアップされない、などの不具合が出ました。以下のスクリプトをconfigure.shという名前で保存し、chmod 555 configure.shとしてビルドしたらうまく動くようになりました。手抜きはいけません、手抜きは(汗)
#!/bin/sh
./configure \
–with-apxs2=/usr/local/apache2/bin/apxs \
–enable-mbstring \
–enable-mbregex \
–enable-zend-multibyte \
–with-xml \
–with-mysql
これで/usr/local/apache2/modules/libphp4.soが出来るので、これを/etc/apache2/httpd.confのモジュールがロードしてあるところの下のほうに下記を追記し、
#LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so
LoadModule php4_module /usr/local/apache2/modules/libphp4.so ←これを追加<IfModule !mpm_netware_module>
さらに、/etc/apache2/other/php4.confというファイルを以下の内容で作り(同じ場所にあるphp5_mod.confからコピーして作ります)
<IfModule php4_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</IfModule>
あらためて、apachectl startを実行すると。。。お!無事動いています。
とりあえずいくつかあるバーチャルホストでxoops、Drupalなどの動きを確認してますが、いまのところ問題なく動いているようです。
次はphpの高速化か、MySQLだなぁ。。。
追伸:
新しいApache2.2.8の本体をMacOS Xが期待する場所に直接おかず、シンボリックリンクにしたのにはわけがあります。apacheはMacOS Xの機能の一部になっているので、ソフトウェアアップデートで上書きされてしまう可能性があるからです。ソフトウェアアップデートを実行したがために上書きされてしまっては元も子もないので、シンボリックリンクにしておき、ソフトウェアアップデートが上書きするのはリンクのみにしようとしたわけです。これならアップデート後、おかしくなったらリンクを確認し、実態に置き換わっていたらあらたえてリンクを張りなおせばオッケーです。
追伸2:
apache1.3をapache2.2.8に入れ替えた結果ですが、残念ながら劇的に応答が速くなった感じはありません。ただまぁ、アクセスが集中することがあれば、威力をきっと発揮してくれることでしょう(汗)
コメント
TrackBack URL : http://www.sailweb.net/modules/wordpress/2008/01/23/168/trackback/
この投稿には、まだコメントが付いていません
コメントの投稿
改行や段落は自動です
URLとメールアドレスは自動的にリンクされますので、<a>タグは不要です。
以下のHTMLタグが使用可能です。
<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <br> <code> <em> <i> <strike> <strong>
改行や段落は自動です
URLとメールアドレスは自動的にリンクされますので、<a>タグは不要です。
以下のHTMLタグが使用可能です。<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <br> <code> <em> <i> <strike> <strong>



