Ubuntu 9.04 で PostgreSQL + phpPgAdmin

CentOS で開発したシステムを保守用に Ubuntu へ移行中です。
すんなりとは行きませんねぇ。

PostgreSQL のインストール

Synaptic で PostgreSQL と php5-pgsql をインストール。

PostgreSQL の設定

開発環境なのでパスワード無しでログイン可能にしておく。
パスワードはなんだったっけなー、と思い出したり調べたりせずに済むので、作業効率がかなり上がります。

...
# Database administrative login by UNIX sockets
#local   all         postgres                          ident sameuser
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
#local   all         all                               ident sameuser
# IPv4 local connections:
#host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
#host    all         all         ::1/128               md5
local   all         postgres                          trust
local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust

PostgreSQL に設定を反映します。

$ sudo /etc/init.d/postgresql-8.3 reload

PostgreSQL で UTF-8 以外のエンコードを使用可能にする

RedHat系の時もあったのですが、パッケージインストール時の initdb で –no-locale が指定されていないため、UTF-8 以外のデータベースが作成できません。
このため、initdb をやりなおします。

$ pg_dumpall -U postgres > dumpall.sql
$ sudo su
# /etc/init.d/postgresql-8.3 stop
# cd /var/lib/postgresql/8.3/
# cp -ra main main.back
# rm -rf main/*
# su postgres
$ /usr/lib/postgresql/8.3/bin/initdb --no-locale --encoding=UTF8 -D /var/lib/postgresql/8.3/main
$ exit
# cd main/
# ln -s /etc/postgresql-common/root.crt root.crt
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
# cp -a ../main.back/postmaster.opts .
# rm postgresql.conf
# rm pg_hba.conf
# rm pg_ident.conf
# /etc/init.d/postgresql-8.3 start
# exit
$ psql -U postgres -f dumpall.sql

データベースが元通りであることを確認して、バックアップを削除します。
万が一の場合でも pg_dumpall で作成した SQL があるので安心です。

$ sudo rm -rf /var/lib/postgresql/8.3/main.back/

phpPgAdmin のパッケージをインストール

Synaptic で phpPgAdmin を検索してインストール。
パッケージ名は全て小文字の phppgadmin。

phpPgAdmin の設定

/etc/phppgadmin/apache.conf でアクセスを制限。
あきらは以下の部分のみ修正してLANのネットワークアドレスを追加した。

allow from 127.0.0.0/255.0.0.0 ::1/128 192.168.11.0/255.255.255.0

/etc/phppgadmin/config.inc.php で phpPgAdmin を設定。
あきらは以下の部分のみ修正して、ユーザー postgres でのログインと パスワード無しのログインを可能にした。

...
//$conf['extra_login_security'] = false;
$conf['extra_login_security'] = false;
...
//$conf['min_password_length'] = 1;
$conf['min_password_length'] = 0;
...

※ パスワード無しのログインを可能にするには /etc/postgresql/8.3/main/pg_hba.conf を修正しておく必要があります。

おまけ – phpPgAdmin の SQL アップロードでハマりました

SQLをアップロードした所、以下のエラーが表示されました。

サーバーが指定されていません!

いままで見たことのないエラーなので、よく分かりません。
面倒ですがソースを追いかける事にしました。

(1) 表示しているスクリプトの特定

Firefox で右クリックして「このフレーム」>「フレームの情報を表示」で、sql.php と判明

(2) ソースを調べる

とりあえずソースを見たが、メッセージを表示している場所を特定できなかった。
しかし、$lang にメッセージが格納されているようなので、言語別メッセージファイルからアプローチする事にした。

/usr/share/phppgadmin/lang/japanese.php と見当をつけ、該当メッセージを検索した。
該当メッセージは $lang[‘strnoserversupplied’] と判明。

再び sql.php を調べたが、$lang[‘strnoserversupplied’] は検索できなかった。
grep ‘strnoserversupplied’ -R * で一括検索を行った所、libraries/lib.inc.php と判明。

さらに該当箇所を特定。

...
// Create data accessor object, if necessary
if (!isset($_no_db_connection)) {
if (!isset($_REQUEST['server'])) {
echo $lang['strnoserversupplied'];
exit;
}
...

(3) 状況の調査

該当箇所で print_r( $_REQUEST ) ; とした所、$_REQUEST[‘server’]が渡されていないことが判明した。
さらに SQL をアップロードしない場合はちゃんと渡されていることが判明。

(4) 原因の推理

a. 今まで見たことが無いエラーである -> 今回の環境特有
b. SQL をアップロードした場合のみ発生 -> ファイルのアップロード時

以上から、PHP のアップロード設定ではないかと推測できた。

(5) 対策

/etc/php5/apache2/php.ini の以下を修正

...
post_max_size = 20M
...
upload_max_filesize = 18M
...

Apache2を再起動

$ sudo /etc/init.d/apache2 restart

(6) 確認

エラーとなっていた SQL のアップロードが正常に実行されることを確認。

おつかれ?

新しい環境になると結構 php.ini の設定は忘れがちなんだよね?(俺だけかも)


コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください