phpMyAdmin インストールでハマる

mysql と phpMyAdmin をportsからインストールする

先日構築したVPN接続のFreeBSD Webサーバーに WordPress を入れようとして、前段階の mysql server とphpMyAdmin を入れようとしてハマりました。
mysql も phpMyAdmin も過去に何度もインストールしているので簡単に終わるはず!でした。
過去はソースコードを提供者のサイトから手動でダウンロードし、自分のワーキングディレクトリでビルドして手動インストールしたものを使っていましたが、最近はFreeBSD サーバー全体のメンテナンスを考えて、セキュリティーは考慮しつつ、出来る限りportsコレクションから導入し、セキュリティーメンテナンスを簡単に行えるようにしたいと、パッケージに関する考え方が変わってきました。出来る限りports が自動的に編集してくれるディレクトリ構造を保つようにしているため過去にインストールした時と、別のディレクトリ構成が必要になっています。これが罠でした。

mysql インストール

ports/database/mysql55-server と ports/database/mysql55-client から make install すれば自動的に依存関係があるパッケージがインストールされるので、ports を使う事は、インストールするだけなら簡単。
当たり前ですが、MySQLデータベースシステムをインストールしてくれるだけで、データベースの初期化は行ってくれません。ユーザー自身がデータベース初期化を行う必要があります。
初期化はコマンドラインから行うか、ツールを使って行うかを選択することになります。
正直 mysql データベース管理を行うのはCMSの初回設定の時だけなので、初期化の作業内容は覚えているもののコマンドSyntaxを忘れています。
コマンドラインから初期化作業をする時は、毎回初期化コマンドやらSQLコマンドを検索しながら行っています。phpMyAdmin を使うと、GUIから作業できるためコマンドを覚えておく必要がないので楽です。しかし、phpMyAdmin はmysql を起動してくれないので、GUIを使う前に mysql サーバーを起動しておかなければなりません。

以前、mysql 5.1系を使った時は、「インストール後、/usr/local/etc/rc.d/mysql-server start を叩いても /var/db/mysql 以下の初期化は自動的に行われず、mysql_install_db コマンドを手動で発行した」というメモが残っていたので、今回も同様に行ったら、

FATAL ERROR: Could not find ./bin/my_print_defaults
If you compiled from source, you need to run ‘make install’ to
copy the software into the correct location ready for operation.
If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the –basedir option
pointing to that location.

となってしまいました。メモを読み直したら、「mysql 5.5系では、/usr/local/etc/rc.d/mysql-server start コマンドがデータベース初期化も行ってくれる」と半年前の別のメモに書いてありました。実際にコマンドを発行してみたら、/var/db/mysql 下にファイルが作られました。次は、phpMyAdmin。

phpMyAdmin を入れる

手動パッケージ管理するなら、phpMyAdmin の tar ボールをオリジナルサイトからダウンロードして展開すればほぼ終わりなのだけど、今回は /usr/ports/database/phpmyadmin から、make install することにしました。これもメンテナンス性を考えてのこと。ports から make する場合の問題点は、パッケージが デフォルトで、/usr/local/www/phpMyAdmin にインストールされること。FreeBSDを知っている誰もが http://database.my.webserver.jp/phpMyAdmin/ と叩くと、そこにデータベース管理システムが存在しているとわかること。当然、phpMyAdmin へアクセス可能なホストは限定し、パスワードを設定するものの、サーバーで運用している何らかのサービスにセキュリティーホールが見つかると慌てることになるため、必ず httpd.conf の Alias 機能を使ってパス名は phpMyAdmin から”dATABESEADIMN” のように phpMyAdmin へのパスを名変えておく必要があります。

Alias /dATABESEADIMN/ "/usr/local/www/phpMyAdmin/"

更に、

<Directory "/usr/local/www/phpMyAdmin/">
 Options none
 AllowOverride Limit
 Order Deny,Allow
 Deny from all
 Allow from 127.0.0.1 .database.my.webserver.jp
</Directory>

も書き込んで、このURLにアクセス出来るホストを制限します。

このあと、phpMyAdmin にアクセスすれば、mysql データベースへ接続出来る・・・・・・・はずだったのに、うまくゆかない。

Object not found!

要求された URL は本サーバでは見つかりませんでした。 参照元ページのリンクが間違っているか、古くなってしまっているようです。 ページの著者にこのエラーをお知らせ下さい。

サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。

Error 404

Thu Nov 22 16:21:02 2012
Apache/2.2.23 (FreeBSD) PHP/5.4.7 mod_ssl/2.2.23 OpenSSL/0.9.8q DAV/2 」

ですと。
Apache ログファイルを見ると、

File does not exist: /usr/local/www/phpMyAdmin/<
File does not exist: /usr/local/www/phpMyAdmin/navigation.php<

こんなエラーが残っています。
原因を切り分けるために、phpMyAdmin/phpinfo.php をアクセスしてみると、空白ページが表示されます。phpMyAdmin/setup/ をアクセスしてみると、

「* @license http://www.gnu.org/licenses/gpl.html GNU GPL 2.0 */ /** * Core libraries. */ require ‘./lib/common.inc.php’; $page = filter_input(INPUT_GET, ‘page’); $page = preg_replace(‘/[^a-z]/’, ”, $page); if ($page === ”) { $page = ‘index’; } if (!file_exists(“./setup/frames/$page.inc.php”)) { // it will happen only when enterung URL by hand, we don’t care for these cases die(__(‘Wrong GET file attribute value’)); } // Handle done action info $action_done = filter_input(INPUT_GET, ‘action_done’); $action_done = preg_replace(‘/[^a-z_]/’, ”, $action_done); // send no-cache headers require ‘./libraries/header_http.inc.php’; ?>」

と、php 文がそのまま表示されます。

> php phpMyAdmin/phpinfo.php

と、コマンドラインからファイルをそのまま叩くと、HTML文が生成されるので、どうも、mysql とは全く関係なく、apache からphpへ接続するところで止まっているみたいだと判明。ようやく出口が見えてきました。
/usr/local/libexec/apache22/ をチェックしてみると、libphp5.so が存在していない!
な、な、な、何〜〜〜!

こんな基本的なセットアップを行っていないとは!今回、ApacheのAlias 機能でディレクトリとURL変換を行ったので、そこに問題があるのかと見当違いな調査ばかりしていましたが、Aliasは全然関係なかったわけだ。

ports/lang/php5 で make config してみると、

 [ ] APACHE     Build Apache module

Apache モジュールにチェックが入っていません。そりゃ、ApacheさんがPHPで書かれたコードを理解しないわ。portupgrade を行う時、毎回コンフィグ画面で止まるのが面倒なので、環境変数 BATCH=YES で動かしていて、細かいコンフィグチェックを行っていなかったことを思い出しました。Apache にチェックを入れて再インストール。これで解決か!と期待したけど、なおも phpinfo.php を叩くと空白ページが表示される。php5 インストールスクリプトは httpd.conf に

LoadModule php5_module        libexec/apache22/libphp5.so

を自動で追加してくれるけど、

AddHandler php5-script .php

は、追加してくれない模様。
手動でハンドラーを追加して、Apache をリスタート。ようやく、phpMyAdmin ログインページにアクセス出来ました。

mysql データベースにアカウント登録

mysql に接続するには、mysql のパスワードが必要。これは手動で設定するしか無さそう。

# mysqladmin -u root password
New password:
Confirm new password:

ようやくデータベースをGUIから操作出来るようになりました。結局30分で終わる作業が4時間くらい掛かってしまいました。

 

コメントを残す