FreeBSDのPHPインストールにハマル

自分自身の覚え書きとしても書いておくことにする。

サーバー設定に関しては全くの素人である。
  閉じたエリアでWEBサーバーを立ち上げて、
  本サーバーにUpする前の確認用として使う
程度のことしかできない。
(いや、コレが割と重要で、確認は必要ですよぉ~)
要するにテスト用サーバーをイロイロと弄っていたワケですな。
※もちろん仕事で、社内での作業中

以前はFreeBSD4系で、ApacheもPHPもPostgreSQLも全てソースから
  configre → make
の「定石」をやっていたワケです。
が、イロイロ事情があり現在はFreeBSD6.1(1.280)。

最初に環境を書いておくが、他の環境では別だろうとも思うんで、あくまで参考です。
  FreeBSD6.1(1.280)
  PostgreSQL 8.1.9
  MySQL4.1.22
  PHP4.4.7
トラブルは拡張の関数(マルチバイト系など)が無いというエラー
それに該当する方は、長い続きをど~ぞ。


きっかけはPostgreSQLとMySQLのバージョンを上げるって作業。
CMSの実験のために要求バージョンであるMySQLを入れたかったのだ。
まぁ、PostgreSQLのバージョンアップは「ついで」
「ついで」と言えば、ついでにphpPgAdminもphpMyAdminもバージョンアップした。

さてさて、上記作業も一段落し、なんとか安定動作するようにはなった。
(まぁ、若干の「警告」的なものは出ているが…)
ということで、何故、ドコにハマったのかということを書いておくことにする。

最大のトラブルはPHPのインストールだった。
コレは盲点だった。
まず、手抜きをするためにports(/usr/ports/lang/php4)からインストールを始める。
(諸般の事情からPHP4系をインストール)
ところがだ、
  マルチバイトの関数
  データベースの関数
そのほかやたと「無いよ!」と叱られる
結論から言うと、
  拡張部分は別のports(/usr/ports/lang/php4-extensions)からインストール
する必要があるのだ。
「まさかな」と思ってやった「php4-extensions」でのmakeでビックリ!
TEXTベースのメニューが出て、モジュール選択ができるのだ。
当然、マルチバイト系とデータベース系を選択。

しかし、問題はこれだけではない!
実は、make時に表示される「インストールしたよ!」ってのはまやかしなのだ。
  インストール先に「/usr/local/lib/php/XXXXXXXX」(XXXXXXXXは数字)
が表示される。
これが曲者で、
  PHPではこのインストール先を知らない
のだ。
各局、
  「/usr/local/etc/php.ini」の中にある
  「extension_dir」へ
  「/usr/local/lib/php/XXXXXXXX」を指定
してやらないとダメ。
ここまで分かるのに、何度Google先生にお世話になったことか…
この時、何度もextensionsをmakeしたので、「欲を出して」沢山のモジュールを指定したことが別のトラブルを引き起こす。(後述)

さて、上記のように何度もextensionsをmakeしたので、そのときにもひとつ分かったことがある。
  最初に起動した時しか、モジュールを選べない
ということだ。
この作業を何度もやりたければ
  make config
としてやる必要がある。
もっとも、この作業で生成されるファイルが
  /var/db/ports/php4-extensions/options
に記述されているので(MySQLモジュールの場合)
  インストールしたいモジュールは「WITH_MYSQL=true」
  インストールしたくないモジュールは「WITHOUT_MYSQL=true」
とすることでコンパイルはできる。

紆余曲折、マル2日間を要した試行錯誤も大詰め。
最後の問題だ。
Apacheを起動すると(syslog上で)
  signal 11 で coredump
してしまい、上手く起動できない。
またまた、Google先生にお伺いをたてると、
  拡張モジュールの読み込み順序が悪い
ということに。

拡張モジュールの読み込み指定は
  /usr/local/etc/php/extensions.ini
にあり、
  extension=mysql.so
などと書かれている。
(ディレクトリはphp.iniのextension_dir指定しているので、ここでは不要)
イロイロやってみた結果、
  いくつかのモジュールでエラー要因となるので、行頭に「#」を付け
て、コメント化。
さらに、Google先生経由で行き着いた先に記述があった、
  session と recode を先頭へ移動
することで、無事にApacheが起動した。

長かったわぁ~。

No comments yet.

コメント投稿

※各記事(エントリー/投稿)の内容は投稿時のものです。閲覧時とは異なることがございますのでご了承ください。