【PostgreSQL】VirtualBoxで検証環境を構築
PostgreSQLの勉強をする上で実機での検証をするためにVirtualBoxを利用しています。今回は私の検証環境の構築手順を紹介します。
検証環境の概要
・以下のような感じです。
Windows10にVirutalBoxを導入してその中でCentOS 8をインストールしてPostgreSQLのサーバを導入しています。(今回はPostreSQL12.3です。)
必要パッケージをインターネットのリポジトリからインストールするために、NATアダプタをつけておきます。
Teratermを使用してSSH接続する経路は別途Host-Only Networkを使用します。
※スペック高めの検証PCを使用していますが、PostgreSQLを動かすのであれば、そんなにスペックはいらないです。ゲスト用に2GBほどあればいいと思います。
ツールの準備
仮想マシンの準備
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通りあります。
リポジトリからインストールはあまりいじる要素がないので楽ですが、お勉強という意味だとソースコードからのインストールがいいかと思いますのでソースコードからのインストール手順を紹介します。
※リポジトリからインストールは以下の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
最後に
これで検証環境の下地が整いました。
次回以降はこの環境を使っていろいろな動作を検証していきましょう!