🏫

AlmaLinux9上にPostgreSQL16の学習環境を構築する

2023/11/06に公開1

はじめに

PostgreSQLはWindows OS上にインストールすることが可能ですが、OSS-DB技術者認定試験の受験準備等のために本格的な学習環境を構築したい場合には、Linux OS上にPostgreSQLをインストールして動作させるのが好ましいと考えられます。

そこで、Linuxの基本知識は持っているが、個人で利用できるLinux環境を持ってない人を対象として、Windows上の仮想マシンにAlmaLinuxをインストールし、その上でPostgreSQLが動作する環境を構築する方法を説明します。さらに、PostgreSQLの初心者でも簡単に利用できるようにするため、GUIでデータベースを操作できるPgAdmin4もインストールします。

この記事で使用しているソフトウェアは以下の通りです。

  • Windows 11 Home 22H2
  • Oracle VM VirtualBox 7.0
  • AlmaLinux 9.2
  • PostgreSQL 16.0
  • PgAdmin4 Web 7.8

前提条件

Windows上にOracle VM VirtualBoxの本体とExtension Packがインストール済であるものとします。これらのソフトウェアのインストール方法については、以下の公式サイトを参照してください。
https://www.virtualbox.org/wiki/Downloads

AlmaLinuxをインストールする

1. 公式サイトからAlmaLinuxのISO Imageをダウンロードする

AlmaLinuxのインストール用ISO Imageは、DVD、Boot、Minimalの3種類が提供されています。
https://almalinux.org/ja/get-almalinux/

この記事では、AlmaLinux OS 9.2 Minimal ISOをダウンロードします。執筆時点でのファイル名はAlmaLinux-9.2-x86_64-minimal.isoで、ファイルサイズは1.65GBでした。ダウンロードしたら念のためファイルのハッシュ値をチェックしておきます。Windowsのコマンドプロンプトを使用する場合は、以下のコマンドでチェックできます。

certutil -hashfile Downloads\AlmaLinux-9.2-x86_64-minimal.iso sha256

コマンドが表示したハッシュ値とダウンロードサイトに掲載されているハッシュ値が一致していることを確認します。

Windows画面表示
C:\Users\DE>certutil -hashfile Downloads\AlmaLinux-9.2-x86_64-minimal.iso sha256
SHA256 ハッシュ (対象 Downloads\AlmaLinux-9.2-x86_64-minimal.iso):
51ee8c6dd6b27dcae16d4c11d58815d6cfaf464eb0e7c75e026f8d5cc530b476
CertUtil: -hashfile コマンドは正常に完了しました。

2. VirtualBoxの仮想マシンを作成する

VirtualBoxを立ち上げ、仮想マシンメニューの新規を選んで仮想マシンを作成します。ISO Image欄にダウンロードしたファイルを設定し、Skip Unattended Installationのチェックボックスにチェックを入れて、次に進みます。ハードウェアの設定はデフォルトのままとします。最後の概要画面で設定内容を確認して完了します。
仮想マシンの作成

3. 最小構成でOSをインストールする

VirtualBoxの起動ボタンをクリックして仮想マシンを起動します。仮想マシンが起動したらキーボードでInstall AlmaLinux 9.2を選択し、Enterキーを押してインストールを開始します。インストールに使用する言語は日本語を選択し、続行ボタンを押すとインストール概要画面が表示されます。なお、仮想マシンの画面上でマウスボタンをクリックすると、マウスカーソルが仮想マシンの画面から出られなくなります。ホストマシン(Windows)の画面に復帰させるには、キーボードの右Ctrlキーを押してください。
インストール概要

インストール概要画面では、以下を確認・設定します。

  • ソフトウェアの選択:最小限のインストール(デフォルトのままにする)
  • インストール先:自動パーティション(ダイアログを開いて完了させる)
  • ネットワークとホスト名:接続済み(ホスト名は設定してもよい)
  • rootパスワード:無効(パスワードを設定してrootアカウントを有効にしてもよい)
  • ユーザ名とパスワード:ダイアログを開いて設定(このユーザを管理者にするのチェックボックスにチェックを忘れずに入れる)
    ユーザの作成

インストール概要
確認・設定が完了したら、インストールの開始ボタンを押します。この後、インストールが実行されます。インストールが完了したら、システムの再起動ボタンを押してインストール作業を終わります。

AlmaLinuxの初期設定を行う

1. VirtualBoxのネットワークを設定する

Virtual Boxの設定ボタンをクリックしてネットワークのダイアログボックスを開きます。ネットワークアダプタが有効(NAT)になっていることを確認して、Advancedのタブを開きます。
ネットワーク設定

次に、ポートフォワーディングボタンを押して、ポートフォワーディングルールのダイアログボックスを開きます。右上の追加ボタンを押して以下の2行を入力し、OKボタンを押します。

  • 名前:SSH、プロトコル:TCP、ホストポート:22、ゲストポート:22
  • 名前:HTTP、プロトコル:TCP、ホストポート:80、ゲストポート:80

ポートフォワーディングルール

1行目は、ホストマシン(Windows)のSSHクライアントアプリから仮想マシンに接続できるようにするための設定で、putty等のクライアントアプリを端末として使用して、仮想マシンへのログインとコマンドの操作が可能になります。2行目は、ホストマシンのウェブブラウザから仮想マシンのウェブサーバに接続できるようにするための設定で、この後でインストールするhttpdとpgadmin4を使用する際に必要になります。

2. SELinuxをpermissiveに変更する

AlmaLinuxはデフォルトでSELinuxがEnforcing(検知・拒絶)になっています。このままではpgadmin4のアクセスが拒絶されるので、SELinuxをPermissive(検知・許容)に変更します。/etc/selinux/configファイル中のSELINUX=enforcingの行をSELINUX=permissiveに変更して再起動します。

sudo vi /etc/selinux/config
# SELINUX=enforcing の行を SELINUX=permissive に変更
sudo reboot

再起動後にgetenforceコマンドで、以下のように表示されればOKです。ついでに、sudo dnf updateコマンドでAlmaLinuxのリポジトリも更新しておきます。

Linux画面表示
[linuxuser@localhost ~]$ getenforce
Permissive
[linuxuser@localhost ~]$ sudo dnf update
[sudo] password for linuxuser:
# 更新の確認と結果
Complete!

PostgreSQLをインストールする

1. ソフトウェアを導入してサーバを起動する

PostgreSQLの公式ページには、各種OS対応のインストール方法が記載されています。
https://www.postgresql.org/download/

Linux downloads (Red Hat family)のページのPostgreSQL Yum Repositoryの説明に書いてある通りにインストールします。以下のコマンドを使用します。

# Install the repository RPM:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Disable the built-in PostgreSQL module:
sudo dnf -qy module disable postgresql

# Install PostgreSQL:
sudo dnf install -y postgresql16-server

# Initialize the database:
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

# Enable automatic start the server:
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16

2番目の組み込みのPostgreSQLを無効化するコマンドで、GPG Keyのインポートが複数回繰り返されますが問題はありません。インストールが成功してPostgreSQLサーバが正常に動作していることは、以下のコマンドで確認できます。

systemctl status postgresql-16
PostgreSQLサーバの状態
[linuxuser@localhost ~]$ systemctl status postgresql-16
● postgresql-16.service - PostgreSQL 16 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; pr>
     Active: active (running) since Sun 2023-10-29 23:51:44 JST; 22s ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 2272 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${P>
   Main PID: 2277 (postgres)
      Tasks: 7 (limit: 11052)
     Memory: 17.4M
        CPU: 54ms
     CGroup: /system.slice/postgresql-16.service
             ├─2277 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             ├─2278 "postgres: logger "
             ├─2279 "postgres: checkpointer "
             ├─2280 "postgres: background writer "
             ├─2282 "postgres: walwriter "
             ├─2283 "postgres: autovacuum launcher "
             └─2284 "postgres: logical replication launcher "

Oct 29 23:51:44 localhost.localdomain systemd[1]: Starting PostgreSQL 16 databa>
Oct 29 23:51:44 localhost.localdomain postgres[2277]: 2023-10-29 23:51:44.064 J>
Oct 29 23:51:44 localhost.localdomain postgres[2277]: 2023-10-29 23:51:44.064 J>
Oct 29 23:51:44 localhost.localdomain systemd[1]: Started PostgreSQL 16 databas>

2. インストール後の設定を行う

上記のサーバの状態で表示されている通り、データベース管理者ユーザはpostgresで、データベース関連のファイルは/var/lib/pgsql/16/data/にあります。このディレクトリに置かれている以下の2つのファイルには、クライアントからの接続を制御するための重要な情報が設定されています。

postgresql.confの一部
# - Connection Settings -
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
pg_hba.confの一部
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

これらの設定は、接続可能なクライアントはlocalhostに限定されており、ユーザの認証はソケット接続の場合はpeer、TCP接続の場合はscram-sha-256のパスワードで行われることを意味します。そこで、最初はposugresユーザとしてpeer認証で接続し、postgresユーザのパスワードを設定して、以後はlocalhostからパスワード認証でTCP接続することにします。

PostgreSQLの標準クライアントのpsqlを使用したpeer認証での接続とパスワードの設定は、以下のコマンドで行います。

sudo -u postgres psql
\password
\quit

実行結果を以下に示します。

peer認証とパスワード設定
[linuxuser@localhost ~]$ sudo -u postgres psql
psql (16.0)
Type "help" for help.

postgres=# \password
Enter new password for user "postgres": # パスワードの入力
Enter it again: # パスワードの再入力
postgres=# \quit

パスワード認証が有効になると、TCP接続でのパスワード認証が可能になります。TCP接続の場合は、psqlのパラメータ-h localhostを指定してください。

TCP接続でのパスワード認証
[linuxuser@localhost ~]$ psql -h localhost -U postgres
Password for user postgres: # 登録したパスワード入力
psql (16.0)
Type "help" for help.

postgres=# \quit

PgAdmin4をインストールする

1. Apache HTTPDをインストールする

PgAdmin4を実行するためにはウェブサーバが必要になります。ここでは、最も一般的なApache HTTPサーバを利用することにします。インストールは、以下のコマンドで行います。

# Install Apache HTTP server:
sudo dnf -y install httpd

# Enable automatic start the server:
sudo systemctl enable httpd
sudo systemctl start httpd

続いて、HTTP接続を可能にするためにファイアウォールのTCP/80番ポートを開放します。以下のコマンドで行ってください。

sudo firewall-cmd --add-service=http
sudo firewall-cmd --runtime-to-permanent 

Windowsのウェブブラウザを起動して、アドレスバーにlocalhostを入力してください。以下のようなテストページが表示されれればOKです。
Apache httpdの確認

2. PgAdmin4本体をインストールする

PgAdmin4の公式ページには、各種OS対応のインストール方法が記載されています。
https://www.pgadmin.org/download/

RPMのリンクを開くと、Yum Repositoryの使用方法が記載されています。AlmaLinuxはRedhat互換なので Rocky, Redhat or CentOS の項、Apache HTTPサーバに接続して使用するので Web modeの項の記述に従います。具体的に使用するのは以下のコマンドになります。

# Setup the repository:
sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm

# Install for web mode only:
sudo yum install pgadmin4-web

# Run the web setup script:
sudo /usr/pgadmin4/bin/setup-web.sh

途中のsetup-web.shでは、PgAdmin4のユーザアカウントを作成するためにメールアドレスとパスワードを要求してきます。ここで入力するメールアドレスは、PgAdminの初期ユーザの識別に用いるものなので、ダミーでも構いません。

setup-web.shの実行
[linuxuser@localhost ~]$ sudo /usr/pgadmin4/bin/setup-web.sh
Setting up pgAdmin 4 in web mode on a Redhat based platform...
Creating configuration database...
NOTE: Configuring authentication for SERVER mode.

Enter the email address and password to use for the initial pgAdmin user account:

Email address: admin@example.jp
Password: # パスワードを入力
Retype password: # パスワードの再入力
pgAdmin 4 - Application Initialisation
======================================

Creating storage and log directories...
Configuring SELinux...
/usr/pgadmin4/bin/setup-web.sh: line 98: semanage: command not found
/usr/pgadmin4/bin/setup-web.sh: line 100: semanage: command not found
The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? y
Apache successfully restarted. You can now start using pgAdmin 4 in web mode at http://127.0.0.1/pgadmin4

設定が終わるとApache HTTPサーバが自動的に再起動され、PgAdmin4が利用可能になります。ホストマシンのウェブブラウザを起動して、http://localhost/pgadmin4のURLにアクセスしてください。ログイン画面が表示されたら、先ほど設定したメールアドレスとパスワードを入力し、言語でJapaneseを選択してください。なお、仮想マシンのメールシステム設定を行っていないため、パスワードのリセット機能は利用できません。
PgAdmin4 ログイン画面

ログインボタンをクリックすると、以下のようなPgAdmin4のダッシュボード画面が表示されます。
PgAdmin4 ダッシュボード

3. PgAdmin4を接続設定する

ダッシュボード画面が表示されたら、クイックリンクの「新しいサーバを追加」をクリックして、PostgreSQLサーバへの接続情報を登録します。最初に、Generalタブの名前欄に適当な名前を入力します。
PgAdmin4 接続設定1

次に、接続タブのホスト名/アドレス欄にlocalhost、ユーザ名欄にpostgres、パスワード欄にpsqlコマンドで設定したpostgresユーザのパスワードを入力し、「パスワードを保存」を有効にして、保存ボタンを押します。
PgAdmin4 接続設定2

以下のようなサーバの稼働状況がグラフで表示されれば、接続は成功です。
PgAdmin4 接続完了

以後は、メニューとオブジェクトエクスプローラを用いてデータベースの操作を行ってください。PgAdmin4の公式マニュアルは以下のサイトにあります。
https://www.pgadmin.org/docs/pgadmin4/latest/index.html

PgAdmin4の操作を終了するときは、オブジェクトエクスプローラでサーバを選択した状態で、オブジェクトメニューの「サーバから切断」を選びます。次回再接続するときはオブジェクトメニューの「サーバに接続」を選んでください。

おわりに

この記事では、VirtualBox上の仮想マシンにAlmaLinuxをインストールし、その上にPostgreSQLとPgAdmin4をインストールする方法を説明しました。SQL文によるデータベースの操作は、標準クライアントのpsqlコマンドと、PgAdmin4のクエリツールのどちらでも実行できます。PostgreSQLの本格的な学習環境として使用可能だ思います。実際に試してみていただければ幸いです。

Discussion

Ushio InoueUshio Inoue

自己フォローです。
2023年11月13日にAlmaLinux 9.3の安定版が公開されました。
Minimal ISOファイルはAlmaLinux-9.3-x86_64-minimal.isoで、サイズは 1.73GBです。dnf updateコマンドが短時間で完了するので、これからインストールする方はこちらをご利用ください。