FreeBSD 11.2 に PostgreSQL 11.1 を入れてみた

諸事情あって、FreeBSD 8.x 系列で使っていた PostgreSQL 入りのサーバを手放すことになったので、新たに VMWare ESXi 上にゲストOSを立てて、OS も PostgreSQL も 2018年11月時点の最新版で新規構築してみました。

今回は、FreeBSD 11.2 の VMDK ファイルを利用してゲストOSを導入したのですが、そのくだりはばっさり削除させていただきます。bsdconfig で初期設定は終わったものとします。

さて、久々のFreeBSDなので、いろいろ勝手が変わっています。

最近のFreeBSDはデフォルトではGNUのツール類を使わない方針なので、必要そうなものは ports を使ってインストールしておきます。ただし、先に libiconv をパッチつきでインストールしておかないと Shift-JIS で拡張漢字を含んだ日本語テキストファイルが処理できません。

まず ports の準備。これやらないと、VM Image を使っている場合 /usr/ports は空ですw

FreeBSD handbook に載っているとおり、以下のようにさくっとコマンドを実行します。
portsnap fetch
portsnap extract
portsnap fetch update
で。libiconv ですが、昔ながらのオプションで大丈夫です。

cd /usr/ports/converters/libiconv
make WITH_EXTRA_PATCHES=yes
下はオプションを間違ってチェックが外れた図。その場合はちゃんと手でチェックを入れましょう。

libiconvダイアログ

make が終わったらインストールします。

make install
make clean

続いて GNU make をインストールします。NLSは悩むところですが一応デフォルトのONにしておきます。

cd /usr/ports/devel/gmake
make
make install
make clean

PostgreSQL では使わない予定だが、別の目的で perl が必要なのでついでにインストールします。5.28 では警告が出るので、5.26 をチョイスしました。コンパイルオプションは何がなんだかわからないのでデフォルトでえいっと実行。

cd /usr/ports/lang/perl5.26
make install
make clean
ここで一度リブートしておきました。



どうしても昔のPostgreSQLのイメージが強くて、インストール先は /usr/local/pgsql 下が好きなのでそういう設定でソースからコンパイルをします。事前にPostgreSQL 実行ユーザ/グループとして pgsql:pgsql を作っています。

# mkdir /usr/local/pgsql
# chown pgsql:pgsql /usr/local/pgsql
ソースのtarball は /usr/local/src に展開します。

ファイアウォールの内側で使うサーバでそもそもログインできる人が限られているので、パーミッションはぬるい設定です。

# mkdir /usr/local/src
# chmod 777 /usr/local/src   
# cd /usr/local/src
# tar xvzf /foobar/postgresql-11.1.tar.gz
# chown -R pgsql:pgsql postgresql-11.1
ここで pgsql ユーザでログインしなおします。

% cd /usr/local/src/postgresql-11.1/
% ./configure --without-readline
% gmake
% gmake install

readline サポート機能は ports からインストールしても認識しないし先に進めないので外しました。gmake は必要ですが gcc はなくてもちゃんとコンパイルできます。

postgresql のデータディレクトリは /usr/local/pgsql/data とします。

% mkdir /usr/local/pgsql/data
% setenv PGDATA /usr/local/pgsql/data            ※pgsql ユーザの .cshrc にも追加
% setenv LD_LIBRARY_PATH /usr/local/pgsql/lib   ※pgsql ユーザの .cshrc にも追加
じゃ、初期化しましょう。

% /usr/local/pgsql/bin/initdb --encoding=utf-8 --no-locale
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.

The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
うまくいったみたいです。pgsql ユーザの ~/.cshrc で path に /usr/local/posql/bin を追加した上で createdb したら
% createdb foobardb
createdb: could not connect to database template1: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
あ、postmaster 起動するのを忘れてたw。

FreeBSD 11.2 ではデフォルトで /usr/local/etc/rc.d は存在しませんが、bsdconfig で startup -> Miscellaneous Startup Services で ここを有効にしていれば、作るとちゃんと実行されます。

デーモン起動オプション

起動スクリプトは雑にこんな感じで。

# cat /usr/local/etc/rc.d/pgsql.sh
#!/bin/sh
export PGCLIENTENCODING=utf-8
case $1 in
        start) su pgsql -c "/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l /usr/local/pgsql/data/pgsql.log" ;;
        stop) su pgsql -c "/usr/local/pgsql/bin/pg_ctl stop" ;;
esac
もちろん chmod +x はお忘れなく。リブート後、ログを確認します。

% cat /usr/local/pgsql/data/pgsql.log
2018-11-21 18:08:34.933 JST [662] LOG:  listening on IPv6 address "::1", port 5432
2018-11-21 18:08:34.936 JST [662] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2018-11-21 18:08:34.942 JST [662] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-11-21 18:08:35.001 JST [663] LOG:  database system was shut down at 2018-11-21 18:07:49 JST
2018-11-21 18:08:35.037 JST [662] LOG:  database system is ready to accept connections
お、起動しました。これで createdb できるようになりました。めでたしめでたし。あとはアクセス制御をかけたり、DBのユーザを作ったりだとか、よしなに作業を進めればよいということになります。



戻る