OracleLinux8.3開発環境構築(php7.3)

VirtualBoxを使用してOracleLinux8.3＋php7.3の開発環境を構築しました。
ゲストOSのIPは固定にしました。
#本記事の環境
ホストOS：Windows10 Pro 64bit 8GB
ゲストOS：ORACLE LINUX 8.3
Oracle VM VirtualBox：6.0.4
Apache：2.4.37
Tera Term：4.105
php：7.3(モジュール版)

#構築手順1(OracleLinux8インストールまで)
* 以下URLからOracleLinux8の最新のisoファイルをダウンロードする。
http://public-yum.oracle.com/oracle-linux-isos.html
  ※OracleLinux-R8-U3-x86_64-dvd.iso等
  ※ダウンロードは時間がかかります。

* VirtualBoxを起動し「新規」を選択する。

* 「名前とオペレーティングシステム」を以下のように選択し、「次へ」を選択する。
> * Name：任意
> * Machine Folder：変更しない
> * タイプ：Linux
> * バージョン：Oracle (64-bit)

* メモリーサイズを2048(※任意)MBとし、「次へ」を選択する。

* 「仮想ハードドライブを作成する」を選択し、「作成」を選択する。

* 「仮想ハードドライブの作成」にて、以下のように選択し、「次へ」を選択する。
> * ハードドライブのファイルタイプ：VDI (VirtualBox Disk Image)
> * 物理ハードドライブにあるストレージ：固定サイズ
> * ファイルの場所とサイズ：40.00GB(※任意)

* 作成された仮想マシンを選択した状態で「設定」を選択する。

* 「システム」の「マザーボード」の「起動順序」で「ハードディスク」を一番上にする。

* 「ネットワーク」の「アダプター 1」の「割り当て」を「NAT」にする。

* 「ネットワーク」の「アダプター 1」の「ポートフォワーディング」を選択する。

* ホストIPに「127.0.0.1」、ホストポートに「2222」、ゲストポートに「22」を入力し「OK」を選択する。

* 「ネットワーク」の「アダプター 2」の「ネットワークアダプターを有効化」を選択し、
  「割り当て」を「ホストオンリーアダプター」に変更。「OK」を選択する。

* 作成された仮想マシンを選択した状態で「起動」を選択する。

* 「起動ハードディスクを選択」ダイアログが表示されるので、
  ダウンロードしておいたOracleLinux8のisoイメージを選択して「起動」を選択する。

* 言語を選択して「続行」を選択する。
  ※ホストOS、ゲストOS間の入力切替はRight Ctrlキーを使用。
  ※検索窓に「j」と入力すると日本語を見つけやすいです。
  ※tabキーで選択対象を切り替えられます。

* 「インストール先」を選択し、何もせずに「完了」する。

* 「ソフトウェアの選択」を選択し、「最小限のインストール」を選択して「完了」を選択する。

* 「時刻と日付」を選択し、設定を変更したら「完了」を選択する。

* 「ネットワークとホスト名」を選択し、
  「ネットワークとホスト名」設定画面の右上にあるスイッチを
  Ethernet(enp0s3)、Ethernet(enp0s8)両方ともオンにして「完了」を選択する。

* 「ユーザーの設定」を選択し、rootパスワードを設定する。

* 「インストールの開始」を選択する。
  ※インストールは時間がかかります。

* ゲストOSのインストールが完了するので、画面右下の「再起動」を選択する。

* 以下のコマンドでディレクトリを移動する。
<pre>
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
</pre>

* 以下のコマンドでifcfg-enp0s8を開く。
  「IPADDR=192.168.56.XXX」「PREFIX=24」を追記、
  「BOOTPROTO=none」「ONBOOT=yes」に変更して保存する。
　※XXX：101等
<pre>
[root@localhost network-scripts]# vi ifcfg-enp0s8
</pre>

* 更新した設定を反映させるため再起動する。
<pre>
[root@localhost network-scripts]# ifdown enp0s8
[root@localhost network-scripts]# ifup enp0s8
</pre>

* Tera TermでIP「192.168.56.XXX」、ポート「22」にアクセスし、
  rootユーザーでログインする。
  ※アクセスできない場合は、ファイアフォールを確認すると良いです。以下が手順です。
<pre>
systemctl is-enabled firewalld  ※OS起動時のファイアウォールのデフォルト動作を確認
systemctl status firewalld      ※現在のファイアウォールの有効/無効を確認
systemctl stop firewalld        ※ファイアウォールを止める方法
systemctl status firewalld
systemctl disable firewalld     ※OS起動時のファイアウォールのデフォルト動作を「無効」に変更。
systemctl is-enabled firewalld
</pre>

* コマンドラインで「cat /etc/oracle-release」を実行し結果を確認する。
<pre>
[root@localhost ~]# cat /etc/oracle-release
Oracle Linux Server release 8.3
[root@localhost ~]#
</pre>

* コマンドラインで「grubby --default-kernel」を実行し結果を確認する。
※「uek」と「rhck」があります。お好みで。必要なら切り替えてください。
<pre>
[root@localhost ~]# grubby --default-kernel
/boot/vmlinuz-5.4.17-2011.7.4.el8uek.x86_64
[root@localhost ~]#
</pre>

* (補足)カーネルの変え方の一例
<pre>
[root@localhost ~]# dnf -y install kernel-uek*
[root@localhost ~]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.4.17-2036.102.0.2.el8uek.x86_64.debug"
(中略)
index=1
kernel="/boot/vmlinuz-5.4.17-2036.102.0.2.el8uek.x86_64"
(中略)
index=2
kernel="/boot/vmlinuz-5.4.17-2036.101.2.el8uek.x86_64.debug"
(以下省略)
[root@localhost ~]# grubby --set-default /boot/vmlinuz-5.4.17-2036.102.0.2.el8uek.x86_64
[root@localhost ~]# grubby --default-kernel
/boot/vmlinuz-5.4.17-2036.102.0.2.el8uek.x86_64
[root@localhost ~]# vi /etc/sysconfig/kernel
DEFAULTKERNEL=kernel
\#DEFAULTKERNEL=kernel-uek
[root@localhost ~]# reboot
</pre>

#構築手順2(Apacheインストール)
* Tera TermでIP「192.168.56.XXX」、ポート「22」にアクセスする。
* コマンドラインで以下を実行する。
<pre>
[root@localhost ~]# dnf -y install httpd httpd-tools httpd-devel httpd-manual
[root@localhost ~]# dnf list installed | grep httpd
</pre>
* コマンド実行結果を以下のものと比較し過不足がないことを確認する。
<pre>
httpd.x86_64                         2.4.37-30.0.1.module+el8.3.0+7816+49791cfd @ol8_appstream
httpd-devel.x86_64                   2.4.37-30.0.1.module+el8.3.0+7816+49791cfd @ol8_appstream
httpd-filesystem.noarch              2.4.37-30.0.1.module+el8.3.0+7816+49791cfd @ol8_appstream
httpd-manual.noarch                  2.4.37-30.0.1.module+el8.3.0+7816+49791cfd @ol8_appstream
httpd-tools.x86_64                   2.4.37-30.0.1.module+el8.3.0+7816+49791cfd @ol8_appstream
oracle-logos-httpd.noarch            80.5-1.0.6.el8                             @ol8_baseos_latest
</pre>

* コマンドラインで「which httpd」を実行し結果を確認する。
<pre>
[root@localhost ~]# which httpd
/usr/sbin/httpd
[root@localhost ~]#
</pre>

* コマンドラインで以下を実行する。
<pre>
[root@localhost ~]# systemctl start httpd
</pre>

* コマンドラインで「systemctl enable httpd」を実行し、
  サーバーの再起動や停止の復旧時に、httpdが自動的に起動するように設定する。
  コマンドラインで「systemctl is-enabled httpd」を実行し、「enabled」と表示されれば成功。

* コマンドラインで以下を実行する。
<pre>
[root@localhost ~]# httpd -t
</pre>

#構築手順3(php7.3インストール)
* PHP7.3をインストールする。
<pre>
[root@localhost ~]# dnf -y module install php:7.3
[root@localhost ~]# php -v

* CGI版、モジュール版、CLI版のどれになっているか確認する。
<pre>
[root@localhost ~]# php -i | grep API
Server API => Command Line Interface
PHP API => 20180731
Zend Extension Build => API320180731,NTS
PHP Extension Build => API20180731,NTS
GSSAPI => Yes
DOM/XML API Version => 20031129
MHASH API Version => Emulated Support
Phar API version => 1.1.1
[root@localhost ~]# php -i | grep "Thread Safety"
Thread Safety => disabled
</pre>


* 必要であればモジュール版へ変更する。
<pre>
[root@localhost php-7.3.25]# vi /etc/httpd/conf.modules.d/00-mpm.conf
※preforkに切り替える。
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
\#LoadModule mpm_worker_module modules/mod_mpm_worker.so
\#LoadModule mpm_event_module modules/mod_mpm_event.so
[root@localhost ~]# cd ~/
[root@localhost ~]# wget https://www.php.net/distributions/php-7.3.25.tar.gz
[root@localhost ~]# tar -zxvf php-7.3.25.tar.gz
[root@localhost ~]# cd php-7.3.25
[root@localhost php-7.3.25]# dnf -y install httpd-devel libxml2-devel.x86_64
[root@localhost php-7.3.25]# ./configure --enable-debug --enable-maintainer-zts --with-tsrm-pthreads --prefix=/usr/lib64/php/ --with-apxs2=/usr/bin/apxs --with-mysqli --with-pdo-mysql --enable-mbregex --enable-mbstring
[root@localhost php-7.3.25]# make
※時間がかかります。
[root@localhost php-7.3.25]# make test
※時間がかかります。
[root@localhost php-7.3.25]# make install
[root@localhost php-7.3.25]# ls /usr/lib64/httpd/modules/*php*
/usr/lib64/httpd/modules/libphp7.so
[root@localhost php-7.3.25]# cp -p php.ini-development /usr/local/lib/php.ini
[root@localhost php-7.3.25]# cp -p /usr/local/lib/php.ini /usr/local/lib/php.ini_bk
[root@localhost php-7.3.25]# vi /usr/local/lib/php.ini
expose_php = Off                     ※phpのバージョンの公開(on)/非公開(off)
post_max_size = 8M                   ※アップロードファイルサイズ
upload_max_filesize = 8M             ※アップロードファイルサイズ
date.timezone = "Asia/Tokyo"         ※タイムゾーン
mbstring.language = Japanese         ※言語
mbstring.internal_encoding = UTF-8   ※文字コード
mbstring.http_input = UTF-8          ※文字コード
mbstring.http_output = pass          ※自動変換実施要否
mbstring.encoding_translation = On   ※HTTP入力変換有無  ※文字化けが発生した場合はOffへ
mbstring.detect_order = auto         ※文字コード自動検出の優先順位
mbstring.substitute_character = none ※変換できない文字がある場合の代替文字を出力有無
include_path = ".:/usr/local/include/php:/usr/local/lib/php"  ※起点ディレクトリのパス
[root@localhost php-7.3.25]# cd ~
[root@localhost ~]# php -v
PHP 7.3.20 (cli) (built: Jul  7 2020 07:53:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.20, Copyright (c) 1998-2018 Zend Technologies
[root@localhost ~]# php -i | grep "Thread Safety"
Thread Safety => disabled
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# systemctl status httpd
</pre>

* コマンド実行結果を以下のものと比較しモジュール版であることを確認する。
<pre>
[root@localhost ~]# httpd -M
(省略)
 php7_module (shared)
(省略)
[root@localhost ~]# httpd -V | grep -B 3 -A 3 "Server MPM"
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
</pre>

#関連
[CentOS8.0開発環境構築(php7.2)](https://qiita.com/Pell/items/22132999f69a3f9f01aa)