Kozupon.com    
 
 n-linux de Postgresql(source版)インスコ


Nature'sLinuxにPostgresqlのソース版をインスコした。本来、バイナリ版が有るが俺自身バイナリ版が嫌いである。理由はインスコした後、必要なモジュールのフォルダとか必要ファイルの場所の特定ができない。ソースの場合は、make installの履歴をたどれば全てが解るわけで・・・・。さらに、セキュリティ及びバグフィックス訂正版はなんと言ってもソースが優先される。したがって、ここの説明ではNature'sLinuxにソース版Postgresqlをインスコする作業の全容を説明したい。


1.まずは、ソースのダウンロード

ソースのダウンロードは、 ここ のミラーサイトで行う。
2005年4月当時の最新、postgresql-7.4.7.tar.gzをダウンロード。


2.インストール

1) インストールする前の準備

■ あらかじめセットアップされている事が前提のモジュール
gmake(3.75以上)
gcc(2.7.2以上)
bison
flex(2.5.4以上)
patch

■ postgresユーザを作る
PostgreSQLの最高権限であるpostgresユーザとpostgresグループを作成する。インストールもこのユーザの権限で行うため必ず作ること。

[VFS-root@michi ~]# groupadd -g 30000 postgres

[VFS-root@michi ~]# useradd -g postgres -d /home/daemon/pgsql postgres

■ ソースディレクトリとインストールディレクトリを作る
あらかじめ、ソースディレクトリとインストールディレクトリを作成する。

[VFS-root@michi ~]# mkdir /usr/local/pgsql

[VFS-root@michi ~]# chown postgres:postgres /usr/local/pgsql

[VFS-root@michi ~]# chown postgres:postgres /usr/local/src

2)ファイルの展開

とりあえず、/tmpあたりにpostgresql-7.4.7.tar.gzを置いたことにして説明する。postgresユーザにスイッチ。
[VFS-root@michi ~]# su - postgres

[VFS-postgres@michi ~]$ cd /usr/local/src

[VFS-postgres@michi src]$ tar -zxvf /tmp/postgresql-7.4.7.tar.gz

3)コンパイル&リンク

■ 本体のインストール

[VFS-postgres@michi src]$ cd postgresql-7.4.7

[VFS-postgres@michi postgresql-7.4.7]$ ./configure --enable-multibyte=EUC_JP

エラーがなければエラーがあったら個別に対処。

[VFS-postgres@michi postgresql-7.4.7]$ make all

エラーがなければエラーがあったら個別に対処。

[VFS-postgres@michi postgresql-7.4.7]$ make install

■ マニュアルのインストール

[VFS-postgres@michi postgresql-7.4.7]$ cd doc

[VFS-postgres@michi doc]$ make install

4)環境変数とコマンドサーチパスを作る

postgresユーザの.profileに環境変数とコマンドサーチパスを追加する。
( 今回は、bashの場合で説明する。csh場合はそれなりに書くこと )

[VFS-postgres@michi doc]$ cd ~/

[VFS-postgres@michi ~]$ vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

#PATH=$PATH:$HOME/bin

PATH="$PATH":$HOME/bin:/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="LD_LIBRARY_PATH":"$PGLIB"

if [ -z "$LANG" -o "`/sbin/consoletype`" != "pty" ]; then
LANG=C
fi

export PATH LANG
unset USERNAME

追加編集後、設定を反映させる。

[VFS-postgres@michi ~]$ source .bash_profile

4)データベースの初期化

コンパイル後、データベースを初期化する(Postgres権限で)。

[VFS-postgres@michi ~]$ initdb
This database system will be initialized with username "postgres".
This user will own all the data files and must also own the server process.

Creating directory /usr/local/pgsql/data
Creating directory /usr/local/pgsql/data/base
Creating directory /usr/local/pgsql/data/global
Creating directory /usr/local/pgsql/data/pg_xlog
Creating template1 database in /usr/local/pgsql/data/base/1
DEBUG: database system was shut down at 2005-04-03 12:27:16 JST
DEBUG: CheckPoint record at (0, 8)
DEBUG: Redo record at (0, 8); Undo record at (0, 8); Shutdown TRUE
DEBUG: NextTransactionId: 514; NextOid: 16384
DEBUG: database system is in production state
Creating global relations in /usr/local/pgsql/data/global
DEBUG: database system was shut down at 2005-04-03 12:27:47 JST
DEBUG: CheckPoint record at (0, 108)
DEBUG: Redo record at (0, 108); Undo record at (0, 0); Shutdown TRUE
DEBUG: NextTransactionId: 514; NextOid: 17199
DEBUG: database system is in production state
Initializing pg_shadow.
Enabling unlimited row width for system tables.
Creating system views.
Loading pg_description.
Setting lastsysoid.
Vacuuming database.
Copying template1 to template0.

Success. You can now start the database server using:

/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
or
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

少々、時間がかかるかも特に遅いPCは。。。。。


3.データベース起動

いよいよ、データベースを起動する。データベースの起動は、postmasterコマンドで行う。

[VFS-postgres@michi ~]$ /usr/local/pgsql/bin/postmaster -S -i -D /usr/local/pgsql/data

一応、プロセスを確認する。

$ ps axw
PID TTY STAT TIME COMMAND
523 ? S 0:00 postmaster -S -i -D /usr/local/pgsql/data
18658 pts/0 S 0:00 -bash
18735 pts/0 R 0:00 ps -axw
18736 pts/0 R 0:00 -bash

後は、createuserでユーザを追加したり、createdbでデータベースを作ったり自由にやってくださいまし!


4.起動スクリプトを作る

1)起動スクリプトの内容

/etc/init.dディレクトリ内にパーミッション755で次のような内容で起動スクリプトを作る。

[VFS-root@michi ~]# vi /etc/init.d/pgsql
#! /bin/sh

# chkconfig: 2345 20 20
# description: Postgresql Script

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
prefix=/usr/local/pgsql
PGDATA="/usr/local/pgsql/data"
PGUSER=postgres
PGLOG="$PGDATA/serverlog"
DAEMON="$prefix/bin/pg_ctl"

if echo '\c' | grep -s c >/dev/null 2>&1 ; then
ECHO_N="echo -n"
ECHO_C=""
else
ECHO_N="echo"
ECHO_C='\c'
fi

set -e
test -f $DAEMON || exit 0

case $1 in
start)
if [ -f /tmp/.s.PGSQL.5432 ]; then
       rm /tmp/.s.PGSQL.5432
fi
$ECHO_N "Starting PostgreSQL: "$ECHO_C
su - $PGUSER -c "$DAEMON start -D '$PGDATA' -s -l $PGLOG"
echo "ok"
;;
stop)
echo -n "Stopping PostgreSQL: "
su - $PGUSER -c "$DAEMON stop -D '$PGDATA' -s -m fast"
echo "ok"
;;
restart)
echo -n "Restarting PostgreSQL: "
su - $PGUSER -c "$DAEMON restart -D '$PGDATA' -s -m fast -l $PGLOG"
echo "ok"
;;
reload)
echo -n "Reload PostgreSQL: "
su - $PGUSER -c "$DAEMON reload -D '$PGDATA' -s"
echo "ok"
;;
status)
su - $PGUSER -c "$DAEMON status -D '$PGDATA'"
;;
*)
# Print help
echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
exit 1
;;
esac

exit 0

2)pgsql起動スクリプトの登録

[VFS-root@michi ~]# chkconfig --add pgsql

3)起動スクリプトのアクティブ化

[VFS-root@michi ~]# chkconfig pgsql on

4)登録確認

[VFS-root@michi ~]# chkconfig --list
apache 0:off 1:off 2:on 3:on 4:on 5:on 6:off
fcron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
pgsql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
syslogd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
xinetd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

xinetd based services:
ftp: on

5)起動・再起動・停止

[VFS-root@michi ~]# /etc/init.d/pgsql start
[VFS-root@michi ~]# /etc/init.d/pgsql restart
[VFS-root@michi ~]# /etc/init.d/pgsql stop


5.その他、これだけはやっておいた方が良いこと

起動まで出来たわけだが、今後のためにこれだけはやっておこう!

1)nobodyユーザの登録

WebベースのスクリプトからDBコネクトする場合に、nobodyユーザ権限でDBにアクセスするのでDBにユーザ登録を行う。postgresユーザ権限で、

$ createuser nobody

で問い合わせには、全て"no"で答える。

注:ApacheのユーザがWWWユーザの場合は、このユーザを作るようにする。

2)アクセス制御

PostgreSQLは、デフォルトで外部ホストからのアクセスを拒否する設定になっている。
したがって、ローカルアドレスのホストからのアクセスは許可してあげなければならない。それには、以下のようにpg_hba.confで設定する。

$ cd /usr/local/pgsql/data

$ vi pg_hba.conf

例えば、ネットワークアドレス192.168.0.0に所属するホストを全てアクセス許可したければ、

host  all  192.168.0.0  255.255.255.0  trust

を追加してやればよい。

3)動作テストを行う!

最後に動作テストを行ってみよう!PostgreSQLには、regression testというのがある。実行すると、自動的にテストを行ってくれる。以下に説明する。

$ cd /usr/local/src/postgresql-7.4.7/src/test/regress

$ make all runtest

[VFS-postgres@michi regress]$ make all runtest
make -C ../../../contrib/spi refint.so autoinc.so
make[1]: Entering directory `/usr/local/src/postgresql-7.4.7/contrib/spi'
make[1]: `refint.so' is up to date.
make[1]: `autoinc.so' is up to date.
make[1]: Leaving directory `/usr/local/src/postgresql-7.4.7/contrib/spi'
/bin/sh ./pg_regress --schedule=./serial_schedule --multibyte=SQL_ASCII
(using postmaster on Unix socket, default port)
============== dropping database "regression" ==============
DROP DATABASE
============== creating database "regression" ==============
CREATE DATABASE
ALTER DATABASE
============== dropping regression test user accounts ==============
============== installing PL/pgSQL ==============
============== running regression test queries ==============
test boolean ... ok
test char ... ok
test name ... ok
test varchar ... ok
test text ... ok
test int2 ... ok
test int4 ... ok
test int8 ... ok
test oid ... ok
test float4 ... ok
test float8 ... ok
test bit ... ok
test numeric ... ok
test strings ... ok
test numerology ... ok
test point ... ok
test lseg ... ok
test box ... ok
test path ... ok
test polygon ... ok
test circle ... ok
test date ... ok
test time ... ok
test timetz ... ok
test timestamp ... ok
test timestamptz ... ok
test interval ... ok
test abstime ... ok
test reltime ... ok
test tinterval ... ok
test inet ... ok
test comments ... ok
test oidjoins ... ok
test type_sanity ... ok
test opr_sanity ... ok
test geometry ... ok
test horology ... FAILED
test insert ... ok
test create_function_1 ... ok
test create_type ... ok
test create_table ... ok
test create_function_2 ... ok
test copy ... ok
test constraints ... ok
test triggers ... ok
test create_misc ... ok
test create_aggregate ... ok
test create_operator ... ok
test create_index ... ok
test inherit ... ok
test vacuum ... ok
test create_view ... ok
test sanity_check ... ok
test errors ... ok
test select ... ok
test select_into ... ok
test select_distinct ... ok
test select_distinct_on ... ok
test select_implicit ... ok
test select_having ... ok
test subselect ... ok
test union ... ok
test case ... ok
test join ... ok
test aggregates ... ok
test transactions ... ok
test random ... ok
test portals ... ok
test arrays ... ok
test btree_index ... ok
test hash_index ... ok
test update ... ok
test privileges ... ok
test misc ... ok
test select_views ... ok
test portals_p2 ... ok
test rules ... ok
test foreign_key ... ok
test cluster ... ok
test limit ... ok
test plpgsql ... ok
test copy2 ... ok
test temp ... ok
test domain ... ok
test rangefuncs ... ok
test prepare ... ok
test without_oid ... ok
test conversion ... ok
test truncate ... ok
test alter_table ... ok
test sequence ... ok
test polymorphism ... ok
test stats ... ok

=======================
1 of 93 tests failed.
=======================

The differences that caused some tests to fail can be viewed in the
file `./regression.diffs'. A copy of the test summary that you see
above is saved in the file `./regression.out'.

make: *** [installcheck] Error 1

rm regress.o

成功すると、上記のようなメッセージが出て終了する。
俺の場合は、horologyがFAILEDになっており結果的にエラーになった。どうも、プラットホーム固有の結果らしいがhorologyは、その結果の一部で timezone が PST ではなくて PDT になってしまっているらしい。特に、体制に影響ないので良しとした。ちなみに、Slackwareではこのエラーは出ないようだ(-.-;)。

以上


 
 
 



Copyright 2007 Kozupon.com.