データベース技術調査ブログ

LinuxやPostgreSQL、Oracleデータベース、AWSの知識をアウトプットしていきます

【PostgreSQL】VirtualBoxで検証環境を構築

PostgreSQLの勉強をする上で実機での検証をするためにVirtualBoxを利用しています。今回は私の検証環境の構築手順を紹介します。

検証環境の概要

・以下のような感じです。

f:id:jimatomo:20200711110234p:plain
VirtualBoxでのPostgreSQL検証環境

Windows10にVirutalBoxを導入してその中でCentOS 8をインストールしてPostgreSQLのサーバを導入しています。(今回はPostreSQL12.3です。)
必要パッケージをインターネットのリポジトリからインストールするために、NATアダプタをつけておきます。
Teratermを使用してSSH接続する経路は別途Host-Only Networkを使用します。

※スペック高めの検証PCを使用していますが、PostgreSQLを動かすのであれば、そんなにスペックはいらないです。ゲスト用に2GBほどあればいいと思います。

ツールの準備

VirtualBox

以下のサイトからダウンロード
Downloads – Oracle VM VirtualBox

インストールは普通にデフォルトのままでいいです。

Teraterm

以下のサイトからダウンロード
「Tera Term」定番のターミナルエミュレーター - 窓の杜

お好みでポータブル版でもOKです。


仮想マシンの準備

インストーラ

最新版は以下からダウンロード
Download

※古いバージョンをダウンロードする場合は以下から
Download - CentOS Wiki

VirutalBoxの設定

VirtualBox上の設定手順は以下を参考に設定します。
Oracle検証環境構築手順〜VirtualBoxでの設定〜 - データベース技術調査ブログ

CentOSのインストール

CentOSのインストール手順は以下を参考にどうぞ
(ソフトウェアの選択では「サーバー(GUIの使用)」または「サーバー」あたりを選択しておくといいかと思います。)
画像で分かる!CentOS 8 のインストール方法 – Hacker's High

インストール後の設定

ネットワーク系の設定を確認しておくといいです。(インストール時のGUIの設定がうまく反映されていないことがある)

# ネットワークの設定を確認
nmcli c s

# ページャーで起動するので確認し終わったら"q"を入力して終了
nmcli c s enp0s3
nmcli c s enp0s8

# 自動起動の設定(enp0s3がホストオンリーアダプタ)
nmcli c m enp0s3 connection.autoconnect yes
nmcli c s enp0s3

# 【おまけ】ホスト名の変更(GUI側でやり忘れた)
nmcli general hostname cent82-pg12-01
hostname

cat /etc/hosts

cat << 'EOF' >> /etc/hosts

192.168.56.33 cent82-pg12-01
EOF

cat /etc/hosts

ping -c 1 cent82-pg12-01

ちなみに個人的にNATはインストール資材をダウンロードするとき以外は閉じていますので自動起動の設定にしていません。

nmcli c up enp0s8

で起動します。

PostgreSQLのインストール

ここからが本番です。(ここからちゃんと書きます)

インストール方法について

インストール方法は主に2通りあります。

  1. yum (dnf) でリポジトリからインストール
  2. ソールコードからインストール

リポジトリからインストールはあまりいじる要素がないので楽ですが、お勉強という意味だとソースコードからのインストールがいいかと思いますのでソースコードからのインストール手順を紹介します。
リポジトリからインストールは以下のQiitaの記事が細かく説明が書かれて勉強になります。
qiita.com


インストール

今回はSSL接続の検証や追加モジュールの検証もできるようにデフォルトのインストールから一部変更しています。特にこだわりがなければ同じようにインストールしてみていただければと思います。
※suでのスイッチまではrootユーザでの操作になります。

①依存パッケージのインストール
# rootユーザで実施(または適宜sudoをつける)
# 依存パッケージのインストール
dnf install -y make
dnf install -y gcc
dnf install -y readline-devel
dnf install -y zlib-devel

# SSLの検証をしたいときはopensslも入れておくこと
dnf install -y openssl-devel

ちなみに依存パッケージについては以下のドキュメントを確認するといいです。
https://www.postgresql.jp/document/12/html/install-requirements.html

②ソフトウェア要件を確認
# GNU makeのバージョン3.80以上が必要です。 他のmakeや古いGNU makeでは動作しません。
#  (GNU makeはときどきgmakeという名前でインストールされます。) GNU makeの試験を行うためには以下を実行してください。
make -version

# ISO/ANSI Cコンパイラ(最低限C89-準拠)が必要です。 
# GCC の最近のバージョンをお勧めしますが、
# PostgreSQLは異なるベンダの、様々なコンパイラを使用して構築できることで知られています。
dnf list installed | grep gcc

# 配布物を展開するために、tarおよびgzipかbzip2のどちらかが必要です。
which tar
which gunzip
which bzip2

# このコマンドで確認してもいい
dnf list installed | grep -e tar -e zip

# GNU Readlineライブラリは、デフォルトで使用されます。
# これによりpsql(PostgreSQLコマンドラインSQLインタプリタ)は入力したコマンドの記憶、
# さらに、カーソルキーを使用した過去のコマンドの再実行や編集ができるようになります。 
# これは非常に役に立ちますので、強く推奨します。
dnf list installed | grep readline

# zlib圧縮ライブラリはデフォルトで使用されます
dnf list installed | grep zlib

# SSLの検証をしたいときにはopensslを確認
dnf list installed | grep openssl
③インストールユーザとインストール先の準備
# インストールユーザの作成(postgres)
useradd postgres

# 【おまけ】sudo権限をつけておく(wheelグループを追加)
gpasswd -a postgres wheel
id postgres

# パスワードの設定
passwd postgres

# インストール先(ドキュメントのデフォルトのもの)
mkdir /usr/local/pgsql
chown postgres. /usr/local/pgsql
ls -ld /usr/local/pgsql
ソースコードの入手

検証したいバージョンに読み替えてください。
以下のサイトからダウンロード可能なバージョンを確認
https://www.postgresql.org/ftp/source/

# /usr/local/src に移動する
cd /usr/local/src; pwd

# scp等で配置しない場合は直接wgetで取得
wget https://ftp.postgresql.org/pub/source/v12.3/postgresql-12.3.tar.gz

# 取得・配置されたことを確認
ls -l postgresql-12.3.tar.gz

# 解凍
gunzip postgresql-12.3.tar.gz
tar xf postgresql-12.3.tar

# 確認
ls -l postgresql-12.3

# インストールユーザ(postgres)の所有に変更
chown -R postgres. postgresql-12.3
ls -l postgresql-12.3

※ここでVirtualBoxのファイル(フォルダごと)の物理バックアップをしておくとインストールオプションを変更したいときに便利です。(スナップショット機能でもOK)

⑤インストール
# インストールユーザ(postgres)にスイッチ
su - postgres
id;pwd

cd /usr/local/src/postgresql-12.3; pwd

# 1. 構成
# デフォルトのインストールの場合は以下を実行(コメントアウトさせています)
# ./configure

# opensslを使用する場合はこちら
./configure --with-openssl

#2. 構築
#拡張モジュールを使わない場合は以下を実行(コメントアウトさせています)
# make

# ドキュメント(HTMLやman)や追加モジュール(contrib)を含め、構築可能なもの全てを構築したい場合はこちら
make world

# 3. リグレッションテスト
make check

# 4. ファイルのインストール
# 普通のmakeの場合はこちら(コメントアウトさせています)
# make install
# ドキュメント(HTMLやman)をインストールするには、以下を入力して下さい。(コメントアウトさせています)
# make install-docs

# make worldを実行した場合はこちら
make install-world

# 【おまけ】クリーニング
make clean
⑥.bash_profileの追記
# 環境変数を追加
cp -pv ~/.bash_profile ~/.bash_profile_bk
cat << 'EOF' >> ~/.bash_profile

export PGHOME=/usr/local/pgsql
export PATH=$PGHOME/bin:$PATH
export MANPATH=/usr/local/pgsql/share/man:$MANPATH
export PGDATA=/usr/local/pgsql/data
EOF

cat ~/.bash_profile

# 正常に反映されているか確認
exec $SHELL --login
env | grep -e PG -e PATH

# ログインしなおして確認する
exit
su - postgres
id
env | grep -e PG -e PATH

データベースクラスタの作成

PostgreSQLはDBクラスタという入れ物の中に設定ファイルやDBのオブジェクトを格納して管理します。initdbはDBクラスタという入れ物を作成する処理だと思ってもらえればいいです。initdbを実行して初めてPostgreSQLのDBが使えるようになります。initdb実行時に指定したディレクトリの中に一通りのファイルを作成するだけなので、失敗したなって思ったらディレクトリを消せば大丈夫です。

今回はPGDATAという環境変数を設定している状態なので、-Dオプションでディレクトリを指定しなくてもPGDATAのパスが指定されます。

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

# initdbの実行
initdb

データベースの起動

DBサーバを起動するのは以下のコマンドです

# 起動しているかどうかを確認
pg_ctl status

# DBの起動
pg_ctl start

# 起動しているかどうかを確認
pg_ctl status

# プロセスの確認
ps -ef | grep postgres

データベースの確認

初期のデータベースクラスタには3種類のDBが存在しています。
postgres:管理者用のDBです。基本的に使用しませんが、CREATE DATABASEコマンドなどの管理用SQLを実行するためにpsqlクライアントで接続するときに指定します。
template0:ほぼほぼまっさらなテンプレートとなるDBです。CREATE DATABASEコマンドのTEMPLATEオプションとして指定します。
 ※RDS fot PostgreSQLとかでDBを作成するときにロケールとかを変更したいときにはtemplate0が必要になります。
template1:カスタマイズ可能なテンプレートとなるDBです。CREATE DATABASEコマンドのTEMPLATEオプションを省略するとこちらをテンプレートとしてDBが作成されます。

# psql -lでのDBの確認
psql -l

データベースの停止

# DBの停止
pg_ctl stop

# 起動しているかどうかを確認
pg_ctl status

# プロセスの確認
ps -ef | grep postgres

最後に

これで検証環境の下地が整いました。
次回以降はこの環境を使っていろいろな動作を検証していきましょう!