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 の設定は忘れがちなんだよね?(俺だけかも)