Apache: Warning require (…./mo.php): failed to open stream: permission denied

管理している複数の FreeBSD パッケージ ports を pkgng に移行させつつあります。

パッケージを管理する仕組みが大きく変わるので、何年も運用を続けたマシンの場合、トラブル続出です。
新規にサーバーを作る場合は、面倒ではありますが、「動いていたものが動かなくなる」というトラブルは発生しません。

この「動いていたものが動かなくなる」というトラブルが、今回は Apache 2.2 から Apache 2.4 への移行で発生しました。

WordPress を動かしているホストなので、PHP の Apache サポートが必要になります。FreeBSD の場合、Apacheサポートは以前はPHPのオプションだったのですが、2014/03/末から mod_php5 として別パッケージになってしまいました。正直なところ、この mod_php5 は高負荷時の性能が以前の半分以下と非常に悪いので私は嫌いなのですが、ports による運営を利用するなら、性能が悪くても mod_php を使わざるを得ません。

先日1台目のサーバーを Apache 2.2→2.4 へ更新したので、2台目のサーバーも更新する事にしました。バイナリーパッケージインストールと、1台目の httpd.conf を参考にして、10分もあれば終了する予定だったのですが、またハマりました。

Apache を止めて、pkg delete で mod_php5 を削除し、pkg install で再度 mod_php5 を入れれば、自動的に Apache22 が削除され、apache24 がインストールされるので、httpd.conf と extra ディレクトリの何個かのファイルを編集巣して再起動すれば終わりのはずだったのです。確かにスタティックページは、この作業で表示されるようになりました。
WordPress は、次の2行が表示され失敗。

Warning: require(/path/to/wordpress/wp-includes/pomo/mo.php): failed to open stream: Permission denied in /path/to/wordpress/wp-settings.php on line 76
 
Fatal error: require(): Failed opening required '/path/to/wordpress/wp-includes/pomo/mo.php' (include_path='.:/usr/local/share/pear') in/path/to/wordpress/wp-settings.php on line 76

原因は、Apache を動作させるユーザーパーミッションが異なっていたためというのが原因でした。

現在の httpd.conf では user:groupが www:www で httpd を動かします。先日更新を終えた1台目のサーバーも Apache 2.2 から使い始めたのでデフォルトでwww権限での動作になっていました。

しかし、今回更新したサーバーは、Apache 1.3 の頃から使い続けているサーバーで、10年以上前からハードウェアを変更しながら動き続けているサーバー。 Apache は、本日まで過去の設定を引きずって、nobody:nogroup の権限で動いていました。

これに気づくのに、またまた、2時間くらい掛かりました。
どちらに合わせるかということで、ちょっと考えましたが、今後の事を考えてデフォルトの www を使う事に決定。WordPress ファイル群のグループを chgrp -R で一括変更して問題解決。

しかし、pkgng 後遺症は続くでしょう。

コメントを残す