Apache24 MPM event の場合は、php74-7.7.45 がマルチスレッドに対応していないため、マルチスレッドに対応できるようにリビルドするようにする。

また、リビルドした時の内容をメモ書きする事にしました。

注意点
  • php74-7.4.5をインストールしている場合は、事前に削除する必要がある。
  • mod_php74をインストールしている場合は、事前に削除する必要がある。
  • Ports Collection が使用できる必要がある。
設定①

portsを使用してインストールするため、portupgradeをインストールする。

①.portupgrade をインストールする。

pkg install portupgrade

②.インストール時の情報です。

[root@FreeBSD /]# pkg install portupgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        pkg: 1.13.2 -> 1.14.2

Number of packages to be upgraded: 1

6 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching pkg-1.14.2.txz: 100%    6 MiB   6.8MB/s    00:01
Checking integrity... done (0 conflicting)
[1/1] Upgrading pkg from 1.13.2 to 1.14.2...
[1/1] Extracting pkg-1.14.2: 100%
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 3 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        db5: 5.3.28_7
        portupgrade: 2.4.16,2
        ruby26-bdb: 0.6.6_7

Number of packages to be installed: 3

The process will require 51 MiB more space.
13 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/3] Fetching portupgrade-2.4.16,2.txz: 100%   92 KiB  94.6kB/s    00:01
[2/3] Fetching ruby26-bdb-0.6.6_7.txz: 100%  336 KiB 344.2kB/s    00:01
[3/3] Fetching db5-5.3.28_7.txz: 100%   12 MiB   3.2MB/s    00:04
Checking integrity... done (0 conflicting)
[1/3] Installing db5-5.3.28_7...
[1/3] Extracting db5-5.3.28_7: 100%
[2/3] Installing ruby26-bdb-0.6.6_7...
[2/3] Extracting ruby26-bdb-0.6.6_7: 100%
[3/3] Installing portupgrade-2.4.16,2...
[3/3] Extracting portupgrade-2.4.16,2: 100%
[root@FreeBSD /]#

③.pkgtools.conf を編集する。

vi /usr/local/etc/pkgtools.conf

④.以下のように修正後に、記入情報を記入する。

■変更前

PORTUPGRADE_ARGS = ENV['PORTUPGRADE']
■変更後

#PORTUPGRADE_ARGS = ENV['PORTUPGRADE']
■記入情報

PORTUPGRADE_ARGS = ENV['PORTUPGRADE'] || \
   '-v -D -L /var/tmp/portupgrade-%s::%s.log'
設定②

php74をマルチスレッドに対応できるようにリビルドする。

①.php74 の場所に移動する。

cd /usr/ports/lang/php74

②.make config を実行する。

make config

③.ZTS にチェックする。

■変更前

[x] CLI      Build CLI version
[x] CGI      Build CGI version
[x] FPM      Build FPM version
[x] EMBED    Build embedded library
[ ] PHPDBG   Interactive PHP debugger
[ ] DEBUG    Build with debugging support
[x] DTRACE   Build with DTrace probes
[x] IPV6     IPv6 protocol support
[x] MYSQLND  Build with MySQL Native Driver
[x] LINKTHR  Link thread lib (for threaded extensions)
[ ] ZTS      Force Zend Thread Safety (ZTS) build
■変更後

[x] CLI      Build CLI version
[x] CGI      Build CGI version
[x] FPM      Build FPM version
[x] EMBED    Build embedded library
[ ] PHPDBG   Interactive PHP debugger
[ ] DEBUG    Build with debugging support
[x] DTRACE   Build with DTrace probes
[x] IPV6     IPv6 protocol support
[x] MYSQLND  Build with MySQL Native Driver
[x] LINKTHR  Link thread lib (for threaded extensions)
[x] ZTS      Force Zend Thread Safety (ZTS) build

④.Makefile の情報を確認する。

cat /usr/ports/lang/php74/Makefile

⑤.以下のようにリビルド時のオプション情報が確認できる。

CLI_DESC=       Build CLI version
CGI_DESC=       Build CGI version
FPM_DESC=       Build FPM version
EMBED_DESC=     Build embedded library
PHPDBG_DESC=    Interactive PHP debugger
MYSQLND_DESC=   Build with MySQL Native Driver
LINKTHR_DESC=   Link thread lib (for threaded extensions)
ZTS_DESC=       Force Zend Thread Safety (ZTS) build

⑥.pkgtools.conf を修正する。

vi /usr/local/etc/pkgtools.conf

⑦.MAKE_ARGS にリビルドのオプション情報を記入する。

MAKE_ARGS = {
   'lang/php74' => [
      'CLI_DESC=yes',
      'CGI_DESC=yes',
      'FPM_DESC=yes',
      'EMBED_DESC=yes',
      'DTRACE_DESC=yes',
      'IPV6_DESC=yes',
      'MYSQLND_DESC=yes',
      'LINKTHR_DESC=yes',
      'ZTS_DESC=yes',
   ],
}

pkg search -o php74 で、langの情報が確認できます。

こちらを作成する理由は、次回のリビルドを実行する時に、コマンドで実行できるようにするためです。

⑧.リビルドを実行する。

portinstall php74
make install clean

make コマンドでも同じようにリビルドする事ができます。

初回のリビルド時は、いくつかの確認が表示する事があります。
また、「OK」を選択して実行しました。

⑨.以下のように表示する事を確認する。

====> Compressing man pages (compress-man)
===> Staging rc.d startup script(s)
===>  Deinstalling for php74
===>   php74 not installed, skipping
===>  Installing for php74-7.4.5
===>  Checking if php74 is already installed
===>   Registering installation for php74-7.4.5
Installing php74-7.4.5...
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/bin/php
/usr/local/bin/php-cgi
/usr/local/sbin/php-fpm
/usr/local/lib/libphp7.so

      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/php-fpm

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage:
https://www.php.net/
===>  Cleaning for pkgconf-1.6.3,1
===>  Cleaning for autoconf-2.69_3
===>  Cleaning for m4-1.4.18_1,1
===>  Cleaning for texinfo-6.7_2,1
===>  Cleaning for help2man-1.47.13
===>  Cleaning for p5-Locale-gettext-1.07
===>  Cleaning for gettext-tools-0.20.1_1
===>  Cleaning for libtextstyle-0.20.1
===>  Cleaning for gmake-4.2.1_3
===>  Cleaning for p5-Locale-libintl-1.31
===>  Cleaning for p5-Text-Unidecode-1.30
===>  Cleaning for p5-Unicode-EastAsianWidth-12.0
===>  Cleaning for autoconf-wrapper-20131203
===>  Cleaning for automake-1.16.1_2
===>  Cleaning for pcre2-10.34
===>  Cleaning for libtool-2.4.6_1
===>  Cleaning for libargon2-20190702
===>  Cleaning for php74-7.4.5

⑩.pkg コマンドを使用してインストールされている事を確認する。

pkg info | grep php74

⑪.以下のように表示される事を確認する。

php74-7.4.5                    PHP Scripting Language

⑫.マルチスレッドが有効なのかコマンドで確認する。

php -i | grep enable-maintainer-zts

⑬.enable-maintainer-zts が表示される事を確認する。

Configure Command =>  './configure'  '--with-layout=GNU' '--with-config-file-scan-dir=/usr/local/etc/php' '--disable-all' '--with-libxml' '--with-password-argon2=/usr/local' '--program-prefix=' '--enable-mysqlnd' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--enable-embed' '--enable-maintainer-zts' '--enable-dtrace' '--prefix=/usr/local' '--localstatedir=/var' '--mandir=/usr/local/man' '--infodir=/usr/local/share/info/' '--build=amd64-portbld-freebsd12.1' 'build_alias=amd64-portbld-freebsd12.1' 'PKG_CONFIG=pkgconf' 'CFLAGS=-O2 -pipe -fstack-protector-strong -fno-strict-aliasing ' 'CPP=cpp' 'CXXFLAGS=-O2 -pipe -fstack-protector-strong -fno-strict-aliasing '
設定③

mod_php74 をマルチスレッドに対応できるようにリビルドする。

①.mod_php74 の場所に移動する。

cd /usr/ports/www/mod_php74

②.make config を実行する。

make config

③.ZTS にチェックする。

■変更前

[ ] AP2FILTER  Use Apache 2.x filter interface (experimental) 
[ ] PHPDBG     Interactive PHP debugger
[ ] DEBUG      Build with debugging support
[x] DTRACE     Build with DTrace probes
[x] IPV6       IPv6 protocol support
[x] MYSQLND    Build with MySQL Native Driver
[x] LINKTHR    Link thread lib (for threaded extensions)
[ ] ZTS        Force Zend Thread Safety (ZTS) build
■変更後

[ ] AP2FILTER  Use Apache 2.x filter interface (experimental) 
[ ] PHPDBG     Interactive PHP debugger
[ ] DEBUG      Build with debugging support
[x] DTRACE     Build with DTrace probes
[x] IPV6       IPv6 protocol support
[x] MYSQLND    Build with MySQL Native Driver
[x] LINKTHR    Link thread lib (for threaded extensions)
[x] ZTS        Force Zend Thread Safety (ZTS) build

④.Makefile の情報を確認する。

cat /usr/ports/www/mod_php74/Makefile

リビルド時のオプション情報がなかったため
php74 と同じオプション情報を使用する事にしました。

⑤.pkgtools.conf を修正する。

vi /usr/local/etc/pkgtools.conf

⑥.MAKE_ARGS にリビルドのオプション情報を記入する。

MAKE_ARGS = {
   'lang/php74' => [
      'CLI_DESC=yes',
      'CGI_DESC=yes',
      'FPM_DESC=yes',
      'EMBED_DESC=yes',
      'DTRACE_DESC=yes',
      'IPV6_DESC=yes',
      'MYSQLND_DESC=yes',
      'LINKTHR_DESC=yes',
      'ZTS_DESC=yes',
   ],
   'www/mod_php74' => [
      'DTRACE_DESC=yes',
      'IPV6_DESC=yes',
      'MYSQLND_DESC=yes',
      'LINKTHR_DESC=yes',
      'ZTS_DESC=yes',
   ],
}

pkg search -o mod_php74 で、www の情報が確認できます。

⑦.リビルドを実行する。

portinstall mod_php74
make install clean

make コマンドでも同じようにリビルドする事ができます。

初回のリビルド時は、いくつかの確認が表示する事があります。
また、「OK」を選択して実行しました。

⑧.以下のように表示する事を確認する。

===>  Staging for mod_php74-7.4.5
===>   mod_php74-7.4.5 depends on file: /usr/local/sbin/apxs - found
===>   Generating temporary packing list
/bin/mkdir -p /usr/ports/www/mod_php74/work/stage/usr/local/libexec/apache24
install  -s -m 0644 /usr/ports/www/mod_php74/work/php-7.4.5/libs/libphp7.so  /usr/ports/www/mod_php74/work/stage/usr/local/libexec/apache24
====> Compressing man pages (compress-man)
===>  Deinstalling for mod_php74
===>   mod_php74 not installed, skipping
===>  Installing for mod_php74-7.4.5
===>  Checking if mod_php74 is already installed
===>   Registering installation for mod_php74-7.4.5
Installing mod_php74-7.4.5...
[activating module `php7' in /usr/local/etc/apache24/httpd.conf]
******************************************************************************

Make sure index.php is part of your DirectoryIndex.

You should add the following to your Apache configuration file:

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

******************************************************************************

If you are building PHP-based ports in poudriere(8) or Synth with ZTS enabled,
add WITH_MPM=event to /etc/make.conf to prevent build failures.

******************************************************************************

===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/libexec/apache24/libphp7.so

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage:
https://www.php.net/
===>  Cleaning for mod_php74-7.4.5

⑨.pkg コマンドを使用してインストールされている事を確認する。

pkg info | grep mod_php74

⑩.以下のように表示される事を確認する。

mod_php74-7.4.5                PHP Scripting Language
設定④

Apache24 MPM event のモードに変更する。

①.httpd.conf を編集する。

vi /usr/local/etc/apache24/httpd.conf

②.以下のように変更後の内容にする。

■変更前

#LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
■変更後

LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
#LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

③.Apache を再起動する。

service apache24 restart

エラーメッセージが表示されない事を確認する。

④.Apache が起動している事を確認する。

service apache24 status

⑤.以下のように表示する事を確認する。

apache24 is running as pid 39184.