このエントリーをはてなブックマークに追加


CentOSにPostgreSQL9.1.4をソースからインストール

CentOS5.8にPostgreSQL9.1.4をソースからインストールしました。
RPMパッケージからインストールしても良いのですが、特定ユーザ以外はPostgreSQLの各種コマンド等のPATHが通らないようにしたかったため、ソースから手動でインストールしました。
(特定のユーザしかPostgreSQLを使用しない環境を構築したかったため)


スポンサーリンク

関連記事

PostgreSQLのソースを入手

PostgreSQL9.1.4のソースを以下のサイトからダウンロードしました。
http://www.postgresql.jp/

ダウンロードしたファイル名は postgresql-9.1.4.tar.gz になります。

PostgreSQLのユーザを作成

PostgreSQLユーザを以下のコマンドで作成しました。

useradd postgres
# useradd postgres
# id postgres
uid=502(postgres) gid=503(postgres) 所属グループ=503(postgres)

尚、パスワードの設定はおこないませんでした。

# cat /etc/passwd | grep postgres
postgres:x:502:503::/home/postgres:/bin/bash
# cat /etc/shadow | grep postgres
postgres:!!:15510:0:99999:7:::

!!になっているのでパスワードロック状態なのが確認できます。

PostgreSQLソースのコンパイル

今回は、PostgreSQLをインストールすることにより、他のユーザ環境に影響をあたえたくないので /opt/pgsql にインストールすることにします。
尚、本資料はダウンロードしたPostgreSQLのソースアーカイブは/tmpにあることにします。

  1. su - コマンドで root にスイッチユーザします。
    [buildfarm@centos ~]$ su -
    パスワード:
    [root@centos ~]# 
  2. インストールするディレクトリの作成およびパーミッションの変更など
    以下のオペレーションでインストールするディレクトリの作成および設定を行いました。
    [root@centos /]# mkdir /opt/pgsql
    [root@centos /]# chown postgres:postgres /opt/pgsql
    [root@centos /]# chmod 755 /opt/pgsql
    [root@centos /]# ls -l /opt/
    合計 4
    drwxr-xr-x 2 postgres postgres 4096  6月 19 12:28 pgsql
  3. su - postgres で postgres にスイッチユーザします。
    [root@centos ~]# su - postgres
    [postgres@centos ~]$ 
  4. tar コマンドでダウンロードしたpostgresql-9.1.4.tar.gzを展開します。
    [postgres@centos ~]$ tar zxvf /tmp/postgresql-9.1.4.tar.gz
  5. tarballが展開されていること確認します。
    [postgres@centos ~]$ pwd
    /home/postgres
    [postgres@centos ~]$ ls -l
    合計 4
    drwxrwxr-x 6 postgres postgres 4096  6月  1 08:25 postgresql-9.1.4
  6. 展開したディレクトリにcdします。
    [postgres@centos ~]$ cd postgresql-9.1.4/
    [postgres@centos postgresql-9.1.4]$ pwd
    /home/postgres/postgresql-9.1.4
  7. configureを実行します。
    インストール先は/opt/pgsqlなのでprefixに/opt/pgsqlを指定します。
    [postgres@centos postgresql-9.1.4]$ ./configure --prefix=/opt/pgsql
    checking build system type... x86_64-unknown-linux-gnu
    checking host system type... x86_64-unknown-linux-gnu
    checking which template to use... linux
    <snip>
  8. configureでerrorなどが出力された場合 ライブラリが不足している場合、以下のようなエラーが出力される場合があります。
    *** The installed version of Flex, /usr/bin/flex, is too old to use with PostgreSQL.
    *** Flex version 2.5.31 or later is required, but this is /usr/bin/flex version 2.5.4.
    
    configure: error: readline library not found
     
    • flexのバージョンが古いと出力された場合 以下の記事を参考にflexをインストールしてください。
    • configure: error: readline library not found と出力された場合
      以下のコマンドでreadlineのライブラリをインストールしてください。
      yum install readline-devel
       
    • configure: error: zlib library not found と出力された場合
      以下のコマンドでzlibのライブラリをインストールしてください。
      yum install zlib-devel
  9. makeコマンドを実行します。
    [postgres@centos postgresql-9.1.4]$ make
    make -C src all
    make[1]: ディレクトリ `/home/postgres/postgresql-9.1.4/src' に入ります
    make -C port all
    make[2]: ディレクトリ `/home/postgres/postgresql-9.1.4/src/port' に入ります
    <snip>
  10. makeが完了したらインストール前に動作確認をしてみます。(省略可能)
    [postgres@centos postgresql-9.1.4]$ make check
    <snip>
    ../../../src/test/regress/pg_regress --inputdir=. --temp-install=./tmp_check --top-builddir=../../..   --dlpath=. --schedule=./parallel_schedule
    ============== creating temporary installation        ==============
    <snip>
    ============== shutting down postmaster               ==============
    
    =======================
     All 126 tests passed. 
    =======================
  11. make installでコンパイルしたPostgreSQLをインストールします。
    上記までの操作では、まだインストールされていません。
    $ ls -ltr /opt/pgsql/
    合計 0
    make install をすることによりPostgreSQLがインストールされます。
    [postgres@centos postgresql-9.1.4]$ make install
    <snip>
    /bin/mkdir -p '/opt/pgsql/lib/pgxs/config'
    /bin/sh ../config/install-sh -c -m 755 ./install-sh '/opt/pgsql/lib/pgxs/config/install-sh'
    make[1]: ディレクトリ `/home/postgres/postgresql-9.1.4/config' から出ます
    PostgreSQL installation complete.
    インストールされたか確認してみます。
    $ ls -ltr /opt/pgsql/
    合計 16
    drwxrwxr-x 6 postgres postgres 4096  6月 19 13:34 include
    drwxrwxr-x 6 postgres postgres 4096  6月 19 13:34 share
    drwxrwxr-x 3 postgres postgres 4096  6月 19 13:34 lib
    drwxrwxr-x 2 postgres postgres 4096  6月 19 13:34 bin
  12. postgresユーザの.bashrcを編集
    postgresユーザの.bashrcにインストールしたPostgreSQLを使用するための環境変数を設定します。
    本記事では、viを使って追記しました。
    [postgres@centos ~]$ vi ~/.bashrc 
    追記した内容は以下の通りです。
    export PATH=/opt/pgsql/bin:$PATH
    export POSTGRES_HOME=/opt/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"
  13. 起動スクリプトの設置
    展開したPostgreSQLソース内にcontribディレクトリがあります。
    contribディレクトリ内のstart-scriptsにlinuxというファイルが起動スクリプトの雛型になります。 (本記事の場合は /home/postgres/postgresql-9.1.4/contrib/start-scripts にありました。)
    このファイルをrootユーザで/etc/rc.d/init.d/にpostgresとファイル名を変更してコピーします。
    [postgres@centos postgresql-9.1.4]$ su -c "cp contrib/start-scripts/linux /etc/init.d/postgres"
    パスワード:
    [postgres@vmbuildfarm postgresql-9.1.4]$ su -c "chmod 755 /etc/init.d/postgres"
    パスワード:
    [postgres@centos postgresql-9.1.4]$ ls -l /etc/init.d/postgres 
    -rwxr-xr-x 1 root root 3019  6月 19 13:51 /etc/init.d/postgres
  14. コピーしたpostgresファイルの修正 rootユーザでコピーした/etc/init.d/postgresを修正します。
    修正箇所はprefixとPGDATAです。
    <snip>
    ## EDIT FROM HERE
    
    # Installation prefix
    prefix=/opt/pgsql
    
    # Data directory
    PGDATA="/opt/pgsql/data"
    <snip>
  15. chkconfigコマンドにて起動スクリプトの登録 以下のコマンドで上記で編集した起動スクリプトを登録します。(rootユーザで実施)
    [root@centos ~]# chkconfig --add postgres
    checkconfig --list で確認できました。
    [root@centos ~]# chkconfig --list | grep postgres
    postgres        0:off   1:off   2:on    3:on    4:on    5:on    6:off
  16. PGDATAで設定したディレクトリを作成します。(initdbします。)
    postgresユーザにスイッチユーザします。
    上記で.bashrc設定をした環境変数が反映されていることを確認してください。
    尚、ロケールは--no-localeでinitdbします。
    [root@vmbuildfarm ~]# su - postgres
    [postgres@vmbuildfarm ~]$ initdb --no-locale -D /opt/pgsql/data
    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 C.
    The default database encoding has accordingly been set to SQL_ASCII.
    The default text search configuration will be set to "english".
    <snip>
  17. 必要に応じて/opt/pgpsql/dataのpostgresql.conf, pg_hba.confを修正します。
    当方、localhostのみで運用するつもりなので、デフォルトままです。
  18. serviceコマンドにてインストールしたpostgresqlを起動してみます。(rootユーザで実施)
    [root@vmbuildfarm ~]# service postgres start
    Starting PostgreSQL: ok
  19. postgresユーザで接続してみます。(postgresユーザで実施)
    [postgres@vmbuildfarm data]$ psql template1
    psql (9.1.4)
    Type "help" for help.
    
    template1=#
  20. マシン再起動による自動起動 上記のchkconfig -addで登録したとき既にランレベル2, 3, 4, 5で自動起動するように設定されていました。
    もし全てoffの場合は、以下のコマンドで自動起動するように設定してください。(rootユーザで実施)
    chkconfig postgres on

これで、他のユーザアカウントにインストールしたPostgreSQLの環境変数を設定すれば、設定したユーザのみ使用可能となります。

今回実施しなかっとこと

今回は、特定ユーザのみPostgreSQLを使用できるようにし、現在の環境に影響をあたえたくないのでPostgreSQLのシェアードライブラリをldconfigに設定しませんでした。
設定したい場合は、/etc/ld.so.conf.dディレクトリにpostgresql.confのようにファイルを作成しシェアードライブラリのディレクトリを設定すればOKです。

  • 設定例(rootで以下のコマンドを実行すれば設定が完了です)
    echo /opt/pgsql/lib > /etc/ld.so.conf.d/postgresql.conf

スポンサーリンク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00 (1216d)