2003 年 7 月 25 日 (金) 自宅

さて、昨日届いた「恐るべきさぬきうどん」の「松家」うどん、 今日は細麺の方を食べてみました。 麺も美味しいけど、何と言ってもこのスープがいいな〜。 ごちそうさまでした。

[image]

ところで、FreeBSD の ports からインストールした PostgreSQL に関するメモ。 (今まで諸事情で ports から入れていないものを使うことが多かったので)

pg_hba.conf で、次のように指定した場合 (というか、これが標準であるわけだが…)、 一般ユーザであっても「% psql DBNAME pgsql」としてしまうと、 簡単に DB のスーパーユーザーが握れてしまいます。

local        all         all          trust

さすがにこれでは、DB 専用の隔離マシンを作れるリッチな環境ならともかく、 そうでもない環境では実用に難があります。 そこで普通は、次のような感じにして、 DB スーパーユーザーのパスワードを入力させるようにするわけですが、 このまま再起動すると、起動時に「Password:」と聞いてきて、 自動で再起動が完了しなくなってしまいます。

リモートから再起動した場合などは、もはやおしまいです。 永遠にそのマシンにアクセスできなくなる可能性が高いです。

local        all         all          password

これは、なぜか /usr/local/etc/rc.d/010.pgsql.sh の start 処理部分の、 pg_ctl の起動オプション内に、次のように -w オプション (PostgreSQL が起動するまで待つ) が入っているためです。 どうも起動確認のために pgsql ユーザで接続を試みてしまうらしい。 man pg_ctl によると、-w オプション自体は、 PostgreSQL のデーモンが起動しなかった場合に 60 秒でタイムアウトするものの、 パスワードの入力はなぜかタイムアウトしてくれないようです。

start)
    touch ${logfile}
    chmod 600 ${logfile}
    chown pgsql:pgsql ${logfile}
    [ -x ${PGBIN}/pg_ctl ] && {
        su -l pgsql -c \
            "[ -d \${PGDATA} ] && exec ${PREFIX}/bin/pg_ctl start -s -w -l ${logfile}"
        echo -n ' pgsql'
    }
    ;;

このオプションをはずせば単純に起動してくるわけですが、 それにしても何でこのオプションが標準でついているのでしょう? ああ、そうか、 PostgreSQL に依存するアプリケーションが /usr/local/etc/rc.d/*.sh から起動されるものにあった場合、 DB 呼び出しに失敗してしまうためですね。

………そんなの失敗してもいいじゃん。 DB 接続に失敗したら普通何らかのメッセージの表示とかエラー処理をするだろうに。 それで問題を起こすようなアプリを書く方が悪い! (個人的意見)

うーん、痛し痒しだけれども、 やはり何とかならないものかな〜。 リモートでしか触れないマシンでこれやられると大変です。 パッチ書いて send-pr するかな〜。


このサイトへのリンクには何ら許可は必要ありません。 ただし、無断で写真をダウンロードして他の場所に掲載したり、 画像加工の素材として利用するなど、再配布に当たる行為はしないようにしてください。 また、このサイトへのリンクであることを明示すること無しに <img src="..."> などで他のページの内部に画像ファイルを取り込むことも、 ご遠慮下さい。