PostgreSQL8.1.0インストール

入手したソースアーカイブのチェック
# md5 postgresql-8.1.0.tar.gz
MD5 (postgresql-8.1.0.tar.gz) = 644b50b88cd2b93e465bb8ff30da09ed

FreeBSDの最小構成ではgmakeが入ってないのでmake時に失敗するためgmakeをインストール。

ftp://ftp.gnu.org/gnu/make/

# tar zxvf make-3.80.tar.gz
# ./configure
# make
# make install

postgresグループとユーザーを作成する。このとき出来るならばgidとuidを70にセットする。
これはアーカイブを解凍したときにchownを省略できるため。(元々postgresのuid/gidは70で定義されているみたい)※意味がわからなければ解凍後chownでpostgresにしてください。

今回はpwコマンドを初めて使ったので(というかリファレンス不足でpwコマンドの詳細が不明)uidとgidは後から編集しました。

# pw groupadd postgres
# pw useradd postgres -m -d /usr/local/pgsql -g postgres -s /bin/tcsh

## -g グループ
## -s シェル
## -d ホーム
## -m ホームが無ければ作成

パスワードを設定
# passwd postgres

uidを編集(vipwを使わなくて vi /etc/passwdでもOKです)
# vipw

gidを編集
# vi /etc/group

uid/gidが変わったのでホームディレクトリの所有者・グループを修正。
# chown -R postgres:postgres /usr/local/pgsql

解凍
# tar xzvf postgresql-8.1.0.tar.gz

postgresユーザーに切り替え( – をつけるとログインするユーザーのプロファイルを使用します)
# su – postgres

コンフィグレーション
% cd /usr/local/src/postgresql-8.1.0
% ./configure –enable-multibyte=EUC_JP –with-perl

–enable-multibyte=EUC_JP 日本語を使用するとき必要。コードセットはEUC
–with-perl Perl用Pgライブラリをコンパイル

コンパイル
% make

インストール
% make install

環境変数の設定(csh,tcshの場合)
% vi ~/.login

下記を追加

————————————————————
# PostgreSQL
setenv PG_HOME “/usr/local/pgsql”
setenv PATH “${PATH}:${PG_HOME}/bin”
setenv PGLIB “${PG_HOME}/lib”
setenv PGDATA “${PG_HOME}/data”

if ($?MANPATH) then
setenv MANPATH “${MANPATH}:${PG_HOME}/man”
else
setenv MANPATH “/usr/man:/usr/local/man:${PG_HOME}/man”
endif

if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH “${LD_LIBRARY_PATH}:${PGLIB}”
else
setenv LD_LIBRARY_PATH “${PGLIB}”
endif
————————————————————

環境変数の変更を適用(csh,tcshの場合)
source ~/.login

データディレクトリの作成
% mkdir /usr/local/pgsql/data

データの初期化
% initdb /usr/local/pgsql/data

テスト
% postmaster -D /usr/local/pgsql/data

問題なければ起動
% postmaster -i -S -D /usr/local/pgsql/data

-i TCP/IP経由で接続する場合に使用。現在多くのサーバーシステムでは必須。
-S サイレントモード(バックグランドで起動)
-D [ディレクトリ] データディレクトリを指定

最小構成以外でLinuxやBSDを入れている人は、rpmやportsのpostgresが混入していないかチェックしてください。既に起動していてポートが使えなかったり、バージョンやディレクトリ構成の差異によって予期せぬ不具合を起こします。(違う場所のinitdbやpostmasterを呼び出したりなど)

自動起動(FreeBSD)
ここからはまたrootに戻って作業

ソースに起動ファイルがあるのでコピーする
# cd /usr/local/src/postgresql-8.1.0/contrib/start-scripts
# cp freebsd /usr/local/etc/rc.d/postgres.sh

オプションやパス等が正しいか確認する。(ここでは-iを追加)
# vi /usr/local/etc/rc.d/postgres.sh

実行権を与える
# chmod 755 /usr/local/etc/rc.d/postgres.sh

これで自動起動の設定は完了です。iオプションを有効にしているので外部からの接続が制限できているかpostgresユーザーになって下記のファイルを確認します。

# su – postgres
% less /data/pg_hba.conf

————————————————————
# TYPE DATABASE USER CIDR-ADDRESS METHOD

# “local” is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
————————————————————

デフォルトではこのようになっておりlocalhost以外からは接続できないように設定されているようです。これだけでは安心できないので前段にファイヤーウォールを設置した方が良いと思います。

サーバー管理コマンド

UNIX系どっぷり生活ですが(仕事でLinux、自宅でBSD)運用上よく使う管理コマンドをメモ。

# top

起動しているプロセスの一覧とCPU、メモリーの使用率を表示。
サーバーが重いなと感じたらまずこれを使いましょう。

# ps

起動しているプロセスの一覧、-xでシステムプロセス、-auで全てのユーザーのプロセスを表示。
全プロセスを確認するときはps -auxと入力。ここではサービス等が正常な状態で起動しているかどうか等をチェックする。

# df

パーティションの使用率を表示。 -hオプションでK(キロ)・M(メガ)・G(ギガ)等単位をつけて表示してくれるので便利です。

# du

ディレクトリの使用量を表示。du -sk * とするとカレント直下のディレクトリの使用量を表示。

# netstat
TCP/IPでサービスを行っているサーバーなら必須のコマンド。-nでポート番号を数値に変換。基本はnetstat -lnで使用しています。

# ipcs
共有メモリ内の使用状況を表示。サービスをkillコマンドで強制終了させた場合にゴミが残っていることがあるのでそのときはipcrmで駆除。

Perlをソースからインストール

まず、ココを読まれた方にお伝えしたいことがあります。
Perlはソースからインストールするメリットがわかりません。
特にカスタマイズするものではないので特にソースコンパイルに興味が無ければパッケージからインストールしてください。

今回のサーバー構築はスペック的にも厳しいものがあるので、使わないサービスは一切入れないこととパッケージインストールはせず意地ででソースコンパイルという名目もあるので、Perlもソースからコンパイルします。

Perlはhttp://www.perl.com/CPAN/src/より入手。実はWindowsからpscpを使って転送しました。

コンフィグ
./Configure

コンパイル
make

インストール
make install

これだけだと超カンタンに見えますが、実はコンフィグが対話式で沢山の質問に対してyesかnoで答えなければいけません。あまりに面倒なのでデフォルトでいいやと[Enter]連打したら…。

> cd /usr/local/bin
> ls
a2p5.9.2 h2ph5.9.2 perldoc5.9.2 pod2text5.9.2 s2p5.9.2
c2ph5.9.2 h2xs5.9.2 perlivp5.9.2 pod2usage5.9.2 splain5.9.2
corelist5.9.2 instmodsh5.9.2 piconv5.9.2 podchecker5.9.2 xsubpp5.9.2
cpan5.9.2 libnetcfg5.9.2 pl2pm5.9.2 podselect5.9.2
dprofpp5.9.2 perl5.9.2 pod2html5.9.2 prove5.9.2
enc2xs5.9.2 perlbug5.9.2 pod2latex5.9.2 psed5.9.2
find2perl5.9.2 perlcc5.9.2 pod2man5.9.2 pstruct5.9.2

ちょっとまて─────!
こんなんじゃ使いにくいだろボケ───!

という事でやり直しです。 orz…