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.