モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

DebianでPHP4からPostgreSQLにアクセスするための設定

Debianに移行したサーバで、PHP経由でPostgreSQLのDBへアクセスできない、という件の調査対応。

まとめると、

  • php.confにPostgreSQLのモジュールpgsqlを読み込む設定
  • PostgreSQLにwww-dataユーザを作成
  • identを動かす
  • ローカルからの接続は許可する

が必要でした。

php.confにPostgreSQLのモジュールpgsqlを読み込む設定

これをしていないと、

Fatal error: Call to undefined function: pg_connect() in 〜

というようなエラーが出てきて動きません。


原因は /etc/php4/apache/php.ini に pgsql.so のモジュールを読み込む設定がされていないためでした。
本来は、apt でインストールした際に php.conf に書かれているはずなのですが。
それ以前に php-pgsql が入っていない場合は当然ながら動きませんので、apt-get install php-pgsql しておきましょう。

/etc/php4/apache/php.ini に下記行を追加

extension=pgsql.so

その後apacheの再起動


(参考)

Debian Gnu/Linuxのインストール記録

PostgreSQLにwww-dataユーザを作成

Debianではapacheが標準で「www-data」というユーザで動いています。
以前のサーバでは「httpd」というユーザで動かしていたため、PostgreSQLに登録されているユーザと相違が生まれてしまっていました。
そのため「www-data」ユーザを作成して権限等もこのユーザに対して行うように変更。

# createuser www-data
=> grant all on 〜 to "www-data";


(参考)

Debian GNU/PHP+PostgreSQL/動作確認 - .punto

identを動かす

それでも下記のようなエラーが出ました。

IDENT authentication failed for user 'www-data'

IDENTで認証がうまくいかないということで、それまではidentdを動かしていなかったので、inetd.confを修正してidentdを動かすように設定。
むろん、identd自体が入っていなければ出来ないので、入っていなかったら apt-get install pidentd しておきます。

/etc/inetd.conf を修正(該当行の頭の「#」を取るだけ)

ident   stream  tcp     wait    identd  /usr/sbin/identd        identd


(参考)

なかのにっき

ローカルからの接続は許可する

それでも、www-data以外のユーザで接続しようとすると、ユーザ名とパスワードを指定してもうまく通らなかった。

IDENT authentication failed

とエラーが出てしまう。
それで検索してみると、デフォルトではローカルからの接続も信用されないため、全てIDENTが呼ばれるようになっているのでうまくいかないようだった。

そこで、postgresの設定を修正した。

/etc/postgresql/pg_hba.conf を修正(該当行の頭の「#」を取るだけ)

local all all trust
host all all 127.0.0.1 255.255.255.255 trust

その後、postgresqlを再起動。


(参考)

日記のようなもの: てすと