WSL2でPostgreSQLとApacheとPHPを使えるようにする(OracleLinux8.5 systemd対策あり)

database

webシステムの勉強を始めようと環境構築に勤しんだ記録です。今回はVirtualBoxやHyper-VではなくWSL2で挑戦しました(作業機のOSはWindows11 Pro 22H2です)。

WSL2インストール

PowerShellを起動しコマンド一発です。拍子抜けするほど簡単でした。

wsl --install

このコマンドですとUbuntuがインストールされます。Ubuntuで良い場合はこれでOKなのですが、私はPostgreSQLを慣れた環境で使いたかったのでRHEL系を探してみました。

wsl --list -o

利用可能な一覧が表示されます。

wsl –list -o

OracleLinux8.5で作ることにしました。

wsl --install -d OracleLinux_8_5

インストールが始まり少し待つと別ウインドウでOracleLinuxが表示されます。ユーザー名とパスワードを入力するとインストール完了です。なんとも簡単です。

OracleLinux8.5 on WSL

要るものを最初に入れる

後の作業で必要になるものや自分が使いやすいエディタを忘れないうちに入れておきます。キャプチャは取っていませんがdnf updateもやっておきましょう。この記事を作ったときはやり忘れていました(あはっ)。

sudo dnf install epel-release
epel-release
sudo dnf install nano htop neofetch

neofetchは完全に個人的な趣味ですw

nano htop neofetch

最初にやること(systemdを使えるようにする)

WSL環境ではsystemctlを使おうとすると「System has not been booted with systemd as init system (PID 1).」とお𠮟りを受けます。そのまんまで「systemdがPID1じゃない」ということなのですが、これを恒久的に解消するための作業を最初に行います。出でよ、ジェニー!

wget https://github.com/arkane-systems/genie/releases/download/v1.36/genie-1.36-1.fc33.x86_64.rpm
genie1.36-1
sudo dnf install genie-1.36-1.fc33.x86_64.rpm
genie1.36-2

ここでpsコマンドを使って状況を見てみましょう。

before

では、genieを初期化→開始します。

genie -i

ちょっと時間がかかるので気長に待ちましょう。

そして・・・

genie -s

再度psコマンドを実行してみましょう。

systemdがPID1になりました

これでめでたくsystemctlを使えるようになったのですが、このままではwslを再起動するとまた元に戻ってしまいますので対処します。

nano ~/.bashrc

ここの末尾へ追記します。

if [ "`ps -eo pid,lstart,cmd | grep systemd | grep -v -e grep -e systemd- | sort -n -k2 | awk 'NR==1 { print $1 }'`" != "1" ]; then
  genie -s
fi

こんなふうにしておきます。

.bashrc

と、ここまで来て「WSLの再起動ってどうするんだろ?」と思ったら一度wslを落としてしまうんですね。PowerShellに戻って実行してください。

wsl --shutdown

これで再度WSLを起動させればOKです。genie -iのときと同じように「!」がいっぱい表示されます。

WSL再起動直後

これで何を意識しなくてもsystemctlを使えるようになりました。先人たちの記事がとても参考になりました。感謝!です。

PostgreSQL15のインストール

以前の記事ではソースコードからコンパイルしました(PostgeSQL10)。

今回は最新バージョンの15をdnfでインストールしていきます。そのままだと15が入ってくれないので準備を行います。

sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
pgdg-redhat-repo
sudo dnf -qy module disable postgresql
module disable
sudo dnf install postgresql15-server
postgresql15

これでPostgreSQL15のインストールが終わりました。折角なので設定もしてしまいましょう。

sudo -i -u postgres
/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data
initdb

実ははじめWSLをUbuntuで組んだのですが、Ubuntuのポスグレではinitdbが見当たらなくて焦りました。Ubuntuは先日10年サポートの発表もあったので、使い勝手が揃っていると嬉しいですね。

さて、環境変数を設定しましょう。

nano ~/.bash_profile

末尾に加筆します。

export PATH=/usr/pgsql-15/bin/:$PATH
export LD_LIBRARY_PATH=/usr/pgsql-15/lib/:$LD_LIBRARY_PATH
export PGDATA=/var/lib/pgsql/15/data
.bash_profile

読み込みなおして完了です。

source ~postgres/.bash_profile

コマンドが通ることを確認しておきましょう!

nano $PGDATA/pg_hba.conf
nano $PGDATA/postgresql.conf
pg_ctl start

Apacheのインストール

ここは普通にdnf installだけで行えます。セキュリティ対策については触れておりませんのでご注意ください。

sudo dnf install httpd
sudo systemctl enable httpd
sudo systemctl start httpd

PHP8のインストール

Apache同様セキュリティ対策には触れていませんのでご注意ください。

まずremiリポジトリを追加します。

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

デフォルトのバージョンがいくつか見てみます。

sudo dnf module list php
PHPバージョン一覧

PHP8を入れられるようになりましたので進めます。DBアクセスにはPDOを使いたいので一緒に入れましょう。

sudo dnf module install php:8.0
sudo dnf install php-pdo php-pgsql
PHP8が入りました

動作テスト

テストファイルを作ります。

sudo nano /var/www/html/index.php

ここへ

<?php
phpinfo();

Apacheを再起動してブラウザでlocalhost/index.phpへアクセスしてみましょう。

sudo systemctl restart httpd

DBに適当なテーブルを作ってPDOもぜひ試してみてください。最後までご覧くださって有難うございました!

コメント