- PR -

SELinux有効時、PostgreSQLでinitdbに失敗してしまいます

1
投稿者投稿内容
kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-12-01 19:30
keiと申します。

Redhat Enterprize ES4にPostgreSQL8.1.3をインストールし、
initdbを行ったところ、エラーを示すメッセージが出て、DBが起動
出来ませんでした。対処の方法をネットで調べてみたのですが、
分かりませんでした。

SELinuxは有効になっています。

インストールの手順は、次のとおりです。
@Rootでログインし、 PostgreSQL用のグループとユーザーアカウントを作成
 # groupadd postgres
 # useradd postgres -g postgres -d /home/postgres
 # passwd postgres

APostgreSQLの実行ファイルを置くディレクトリを作成
 # mkdir /usr/local/pgsql
 # chown postgres:postgres /usr/local/pgsql

BダウンロードしたPostgreSQLのソースファイルを/usr/local/srcディレクトリに展開
 # cd /usr/local/src
 # tar xfz postgresql-8.1.3.tar.gz

C展開されたソースのオーナーをpostgresに変更し、suコマンドでpostgresに
 # chown -R postgres:postgres postgresql-8.1.3
 # su - postgres

D展開したPostgreSQLのディレクトリに移動
 $ cd /usr/local/src/postgresql-8.1.3

E環境に合わせた設定を行う為、configureスクリプトを使う
 $ ./configure --enable-multibyte=EUC_JP --enable-syslog

Fソースをコンパイルし、インストール
 $ make clean
 $ make all
 $ make install

Gpostgresユーザの環境変数を設定
 ホームディレクトリで.bash_profileを開き、以下を追加
 export PATH="$PATH":/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"

Hsourceコマンドで、.bash_profileを再読み込み
 $ source .bash_profile

Iデータベースを初期化
 $ initdb


initdb実行時のエラーメッセージ
--------------------------------------------------------
[postgres@sstsv14 ~]$ initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale ja_JP.UTF-8.

creating directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
selecting default max_connections... 10
selecting default shared_buffers... 50
creating configuration files... ok
creating template1 database in /usr/local/pgsql/data/base/1...
initdb: failed
initdb: removing data directory "/usr/local/pgsql/data"

--------------------------------------------------------

/usr/sbin/setenforce 0 で、SELinuxを無効にしてしまうと、エラーが
解消されるのですが、それではセキュリティの意味がなくなるので、
やりたくはないという状況です。

SELinuxを有効にしたまま、initdbを成功させる方法を教えてもらえないでしょうか。
よろしくお願いいたします。



[ メッセージ編集済み 編集者: kei 編集日時 2006-12-01 19:30 ]
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-12-01 20:58
こんばんは。

SELinux は苦手なので、外していたらスミマセン。

CentOS の /etc/selinux 配下を眺めてみたところ、

./targeted/contexts/files/file_contexts:/var/lib/pgsql/data(/.*)? system_u:object_r:postgresql_db_t

こんな記述があったので、システムデフォルトの Path 以外に Database を作成する場合、
ここら辺を書き換える必要があるか、PostgreSQL 側を合わせるか、する必要がある気がします。
1

スキルアップ/キャリアアップ(JOB@IT)