最新のLaravelをInstしたところ、
https://seesaawiki.jp/lifewithslackzaurus_15_0/d/Laravel
Cannot use laravel/laravel’s latest version v11.1.4 as it requires php ^8.2 which is not satisfied by your platform.
と言われたので、PHP-7.4からPHP-8.2へ上げてみる。
PHP-7.4は以下で入れた。
https://seesaawiki.jp/lifewithslackzaurus_15_0/d/WordPress%a4%f2%c6%fe%a4%ec%a4%eb
slackbuild php、でググった:
https://slackbuilds.org/repository/15.0/development/php82/
SlackBuildsをやってみるか。
https://slackbuilds.org/repository/15.0/development/php82/ にて、
This script doesn’t build mod_php. You can use php-fpm or built-in development server. とは、どのような意味か?
slackbuilds.orgのPHP 8.2に関する記述「This script doesn’t build mod_php. You can use php-fpm or built-in development server.」の意味を説明します。
意味の解説:
・”This script doesn’t build mod_php”
・この部分は、「このスクリプトはmod_phpをビルドしません」という意味です。mod_phpは、ApacheウェブサーバーでPHPを実行するためのモジュールです。このモジュールを使うと、PHPスクリプトがApacheサーバー内で直接処理されるようになります。しかし、このSlackBuildスクリプトではmod_phpを作成しないことが明示されています。
・”You can use php-fpm or built-in development server”
ここでは、「代わりにphp-fpmまたは組み込みの開発サーバーを使用できます」という意味です。mod_phpを使用しない場合、PHPをウェブサーバーで実行するには別の方法が必要です。そのために推奨されているのが以下の2つの方法です。
1.php-fpm (PHP FastCGI Process Manager):
php-fpmは、PHPスクリプトをFastCGIプロトコルを使用して処理するためのプロセスマネージャーです。多くのサーバー(NginxやApache with mod_proxy_fcgiなど)と連携して使われます。php-fpmは高いパフォーマンスを提供し、特に高負荷の環境で有用です。
2.組み込み開発サーバー (Built-in Development Server):
PHPには、コマンドラインから簡単に起動できる組み込みの開発用ウェブサーバーが備わっています。php -S localhost:8000のように実行し、軽量でローカル開発向けの環境を提供します。これは本番環境には適していませんが、簡単な開発やテストに便利です。
要約:
このメッセージは、SlackBuildスクリプトでApacheのmod_phpモジュールを構築しないため、PHPをウェブサーバーで動作させるには、php-fpmまたは組み込みの開発サーバーを使用することを推奨しているという意味です。これにより、ユーザーは他の方法でPHPを運用する準備をする必要があります。
$ grep mod_php /etc/httpd/httpd.conf
Include /etc/httpd/mod_php.conf
$ grep proxy_fcgi /etc/httpd/httpd.conf
#LoadModule proxy_fcgi_module lib64/httpd/modules/mod_proxy_fcgi.so
なるほど、php-fpmで行くか。configureで–enable-fpmしてるし。
$ mkdir php
$ cd php
$ wget https://www.php.net/distributions/php-8.2.23.tar.xz
$ php -r “if (hash_file(‘sha256’, ‘php-8.2.23.tar.xz’) === ’81c5ae6ba44e262a076349ee54a2e468638a4571085d80bff37f6fd308e1d8d5′) { echo ‘txz verified’; } else { echo ‘corrupt’;} echo PHP_EOL;”
txz verified
$ wget https://slackbuilds.org/slackbuilds/15.0/development/php82.tar.gz
$ wget https://slackbuilds.org/slackbuilds/15.0/development/php82.tar.gz.asc
$ gpg –verify php82.tar.gz.asc php82.tar.gz
gpg: ディレクトリ「/home/ore/.gnupg」ができました
gpg: 新しい構成ファイル「/home/ore/.gnupg/gpg.conf」ができました
gpg: *警告*: 「/home/ore/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵リング「/home/ore/.gnupg/pubring.gpg」ができました
gpg: 2024年08月31日 xx時yy分zz秒 JSTにDSA鍵ID 9C7BA3B6で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません
$ gpg –keyserver hkp://keyserver.ubuntu.com –recv-keys 9C7BA3B6
gpg: 鍵リング「/home/ore/.gnupg/secring.gpg」ができました
gpg: 鍵9C7BA3B6をhkpからサーバkeyserver.ubuntu.comに要求
gpg: /home/ore/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵9C7BA3B6: 公開鍵”SlackBuilds.org Development Team <slackbuilds-devel@slackbuilds.org>”をインポートしました
gpg: 究極的に信用する鍵が見つかりません
gpg: 処理数の合計: 1
gpg: インポート: 1
$ gpg –verify php82.tar.gz.asc php82.tar.gz
gpg: 2024年08月31日 xx時yy分zz秒 JSTにDSA鍵ID 9C7BA3B6で施された署名
gpg: “SlackBuilds.org Development Team <slackbuilds-devel@slackbuilds.org>”からの正しい署名
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg: この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガー・プリント: D307 6BC3 E783 EE74 7F09 B8B7 0368 EF57 9C7B A3B6
\
補足: 公開鍵が見つからでない場合 (ChatGPT)
もし公開鍵が見つからない場合、署名者が鍵サーバーに公開鍵をアップロードしていない可能性があります。その場合は、署名者(例えばSlackBuildsのメンテナー)から直接公開鍵を取得する必要があります。
(まあいいや、メンドクサ。スクリプトだし、中身見ながら実行するし)
$ tar xpf php82.tar.gz
$ nvi php82.SlackBuild
(chown -R root:root . をコメントアウトして、エラーが無かったらsudoで実行する)
今回はPostgreSQLは外す。以下を削除。
\ –with-pdo-pgsql=shared,/usr/bin/pg_config \
\ –with-pgsql=shared,/usr/bin/pg_config \
$ mv -i php82/* .
$ TMP=. PKGTYPE=txz sh php82.SlackBuild
Configuring extensions
checking for QDBM support… no
configure: error: DBA: Could not find necessary header file(s).
$ sudo installpkg /mnt2/slackware64/l/gdbm-1.22-x86_64-1.txz
再実行
checking for gdlib >= 2.1.0… no
configure: error: Package requirements (gdlib >= 2.1.0) were not met:
Package ‘libpng’, required by ‘gdlib’, not found
Package ‘libjpeg’, required by ‘gdlib’, not found
Package ‘libtiff-4’, required by ‘gdlib’, not found
configure: error: Unable to locate gmp.h
configure: error: Cannot find ldap.h
configure: error: Package requirements (libargon2) were not met:
configure: error: Package requirements (expat) were not met:
$ sudo installpkg /mnt2/slackware64/l/gd-2.3.3-x86_64-2.txz
$ sudo installpkg /mnt2/slackware64/l/libpng-1.6.37-x86_64-3.txz
$ sudo installpkg /mnt2/slackware64/l/libjpeg-turbo-2.1.2-x86_64-1.tx
$ sudo installpkg /mnt2/slackware64/l/libtiff-4.3.0-x86_64-1.txz
$ sudo installpkg /mnt2/slackware64/l/gmp-6.2.1-x86_64-3.txz
$ sudo installpkg /mnt2/slackware64/n/openldap-2.4.59-x86_64-1.txz
$ sudo installpkg /mnt2/slackware64/l/argon2-20190702-x86_64-5.txz
$ sudo installpkg /mnt2/slackware64/l/expat-2.4.4-x86_64-1.txz
再実行
(ログはメモ省略)
Slackware package /tmp/php82-8.2.23-x86_64-1_SBo.txz created.
$ mv -i /tmp/php82-8.2.23-x86_64-1_SBo.txz .
$ tar tvf php82-8.2.23-x86_64-1_SBo.txz | more
(特に問題無さそうだった)
$ rm php82-8.2.23-x86_64-1_SBo.txz
$ export LANG=C LC_ALL=POSIX TMPDIR=/dev/shm/tmp TMP=. PKGTYPE=txz
$ nvi php82.SlackBuild
(#chown -R root:root . のコメントアウトを外した。TAGを外した。何故かsudoだと環境変数が
伝わらなかった(exportもした)ので、直接スクリプトに書いた。LANG=C LC_ALL=POSIX TMPDIR=/dev/
shm/tmp TMP=. PKGTYPE=txz 。が、TMPDIRが/tmpのままだった。一時的に、sudo ln -s /dev/shm/tmp
/tmp とした)
次回からはこの方法で実行する。https://seesaawiki.jp/lifewithslackzaurus_15_0/d/SlackBuild%a4%f2%bc%c2%b9%d4%a4%b7%a4%c6Inst%a4%b9%a4%eb%bb%fe%a4%ce%a5%e1%a5%e2
$ sudo ./php82.SlackBuild
(ログはメモ省略)
Slackware package /tmp/php82-8.2.23-x86_64-1.txz created.
$ sudo mv -i /tmp/php82-8.2.23-x86_64-1.txz .
$ sudo removepkg /var/log/packages/php-7.4.27-x86_64-1
$ sudo installpkg ./php82-8.2.23-x86_64-1.txz
$ sudo ln -s /usr/bin/php-8.2 /usr/bin/php
$ sudo nvi /etc/httpd/httpd.conf
(#Include /etc/httpd/mod_php.conf
LoadModule proxy_fcgi_module lib64/httpd/modules/mod_proxy_fcgi.so)
$ sudo sh /etc/rc.d/rc.httpd stop
$ sudo sh /etc/rc.d/rc.httpd start
https://60-nouen.com/index.php にアクセスすると、phpが処理されてない。ソースが表示される。うまくいってない。
/etc/php-fpm.d/www.conf にて、listen = 127.0.0.1:9000 となっているが、Apacheの設定にてリバース
プロキシ https://seesaawiki.jp/lifewithslackzaurus_15_0/d/%a5%b5%a1%bc%a5%d0%a1%bc%a4%ce%a5%bb%a5%ad%a5%e5%a5%ea%a5%c6%a5%a3%a1%bc の様な設定をするのか?
/etc/php-fpm.d/www.confの設定でlisten = 127.0.0.1:9000となっている場合、これはPHP-FPM(FastCGI Process Manager)が127.0.0.1:9000でFastCGIリクエストを待ち受けることを意味します。この設定を利用して、ApacheはPHP-FPMと通信するためにリバースプロキシのような設定をする必要があります。
ApacheとPHP-FPMを連携させるために、Apacheの設定には**mod_proxy_fcgi**というモジュールを使用します。このモジュールを使って、ApacheからPHP-FPMへリクエストを転送します。以下にその設定手順を示します。
1. mod_proxyおよびmod_proxy_fcgiの有効化
まず、mod_proxyとmod_proxy_fcgiモジュールを有効にする必要があります。以下のコマンドでApacheにこれらのモジュールがロードされているか確認し、有効化します。
$ sudo a2enmod proxy proxy_fcgi
その後、Apacheを再起動してモジュールを有効化します。
$ sudo systemctl restart httpd # CentOS/RHEL
$ sudo systemctl restart apache2 # Ubuntu/Debian
2. Apacheの設定ファイルの編集
Apacheの設定ファイル(httpd.confまたは仮想ホスト設定ファイル)で、PHP-FPMへのリクエストを転送する設定を行います。以下は、ApacheとPHP-FPMをFastCGI経由で連携させるための設定例です。
例: /etc/httpd/conf.d/php-fpm.conf (または仮想ホストの設定ファイル)
\<VirtualHost *:80>
\ ServerName example.com
\ DocumentRoot /var/www/html
\ # PHP-FPMをプロキシとして設定
\ <FilesMatch \.php$>
\ SetHandler “proxy:fcgi://127.0.0.1:9000”
\ </FilesMatch>
\ # その他の設定
\ <Directory “/var/www/html”>
\ AllowOverride All
\ Require all granted
\ </Directory>
\ ErrorLog ${APACHE_LOG_DIR}/error.log
\ CustomLog ${APACHE_LOG_DIR}/access.log combined
\</VirtualHost>
3. 設定の確認
設定が完了したら、Apacheを再起動して変更を反映させます。
$ sudo systemctl restart httpd # CentOS/RHEL
$ sudo systemctl restart apache2 # Ubuntu/Debian
4. PHP-FPMの動作確認
PHPが正しく動作するか確認するため、info.phpのようなPHPファイルを作成し、PHP-FPM経由で正しく処理されるかを確認します。
\<?php
\phpinfo();
\?>
http://example.com/info.phpにアクセスして、PHPの情報が表示されれば設定は成功です。
まとめ
・listen = 127.0.0.1:9000 は、PHP-FPMが127.0.0.1:9000でFastCGIリクエストを待ち受けている状態です。
・ApacheとPHP-FPMを連携するには、mod_proxy_fcgiモジュールを使用し、Apacheの設定でPHPファイルのリクエストをFastCGIプロキシとしてPHP-FPMに転送するよう設定します。
$ sudo nvi /etc/httpd/extra/httpd-vhosts.conf
(上の、# PHP-FPMをプロキシとして設定 を行った)
$ sudo sh /etc/rc.d/rc.httpd stop
$ sudo sh /etc/rc.d/rc.httpd start
(これでもまだPHPは動かなかった)
php-fpmを利用する時は、php-fpm用のデーモンが動作しているのか?
はい、PHP-FPMを利用する際には、PHP-FPMのデーモンが動作している必要があります。PHP-FPM(FastCGI Process Manager)はPHPをFastCGI経由で実行するためのプロセスマネージャーであり、これが動作していないとApacheなどのWebサーバーがPHPスクリプトを正しく処理できません。
PHP-FPMデーモンの確認方法
1.PHP-FPMデーモンの状態確認
以下のコマンドで、PHP-FPMデーモンが動作しているか確認できます。
$ sudo systemctl status php-fpm
正常に動作していれば、出力には「active (running)」と表示されます。
2.PHP-FPMの起動
もしデーモンが動作していない場合は、以下のコマンドで起動できます。
$ sudo systemctl start php-fpm
3.自動起動の設定
サーバーが再起動された際にPHP-FPMが自動的に起動するように設定するには、以下のコマンドを実行します。
$ sudo systemctl enable php-fpm
PHP-FPMの設定確認
PHP-FPMは通常、/etc/php-fpm.d/www.conf や /etc/php-fpm.conf などの設定ファイルを使用して、どのポートでリクエストを受け付けるか、どのユーザーで動作するかなどを制御します。これらの設定も確認し、適切に設定されているかを確認してください。
$ grep fpm /var/log/packages/php82-8.2.23-x86_64-1
etc/php/8.2/php-fpm.conf.default
etc/php/8.2/php-fpm.d/
etc/php/8.2/php-fpm.d/www.conf.default
etc/rc.d/rc.php-fpm-8.2.new
usr/man/man8/php-fpm-8.2.8.gz
usr/sbin/php-fpm-8.2
$ sudo cp -i -a /etc/php/8.2/php-fpm.d/www.conf.default /etc/php/8.2/php-fpm.d/www.conf
$ sudo cp -i -a /etc/php/8.2/php-fpm.conf.default /etc/php/8.2/php-fpm.conf
($ sudo cp -i -a /etc/php/8.2/php.ini-development /etc/php/8.2/php.ini 保留した)
($ sudo cp -i -a /etc/php/8.2/php.ini-production /etc/php/8.2/php.ini 保留した)
$ sudo cp -i -a /etc/php.ini /etc/php/8.2/ (8.2の大量の設定し直しは面倒なので7.4をコピー)
$ (cd /usr/sbin/; sudo ln -s php-fpm-8.2 php-fpm)
$ sudo sh /etc/rc.d/rc.php-fpm-8.2 start
Starting php-fpm [06-Sep-2024 18:43:58] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library ‘xmlrpc’ (tried: /usr/lib64/php/8.2/extensions/xmlrpc (/usr/lib64/php/8.2/extensions/xmlrpc: cannot open shared object file: No such file or directory), /usr/lib64/php/8.2/extensions/xmlrpc.so (/usr/lib64/php/8.2/extensions/xmlrpc.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
done
$ sudo nvi /etc/php/8.2/php.ini
(PHP-8.4にはxmlreader.soはいるが、xmlrpcもxmlreaderもPHP-8.4の設定には無いのでコメントアウトした)
(これでPHP-8.2は動いた)
$ sudo nvi /etc/php/8.2/php.ini
extension=mbstring
extension=exif ; Must be after mbstring as it depends on it
extension=mysqlnd
extension=mysqli
(メールが飛ばず設定し直ししたが、これが主因ではなかった)
PACKAGE DESCRIPTION:
# gdbm (GNU database routines)
# GNU dbm is a set of database routines that work similar to the
# standard UNIX dbm routines.
#
# gd (a graphics library)
# gd is a graphics library. It allows your code to quickly draw images
# complete with lines, arcs, text, multiple colors, cut and paste from
# other images, and flood fills, and write out the result as a PNG or
# JPEG file. This is particularly useful in web applications, where
# PNG and JPEG are two of the formats accepted for inline images by
# most browsers. The gd library was written by Thomas Boutell.
# Homepage: https://www.libgd.org
#
# libpng (Portable Network Graphics library)
# PNG (Portable Network Graphics) is an extensible file format for the
# lossless, portable, well-compressed storage of raster images. PNG
# provides a patent-free replacement for GIF and can also replace many
# common uses of TIFF. Indexed-color, grayscale, and truecolor images
# are supported, plus an optional alpha channel. Sample depths range
# from 1 to 16 bits.
#
# libjpeg-turbo (high-speed version of libjpeg)
# libjpeg-turbo is a high-speed version of libjpeg for x86 and x86-64
# processors which uses SIMD instructions to accelerate baseline JPEG
# compression and decompression. libjpeg-turbo is generally 2-4x as
# fast as the unmodified version of libjpeg, all else being equal.
# Homepage: https://libjpeg-turbo.org
#
# libtiff (a library for reading and writing TIFF files)
# This package provides support for the Tag Image File Format (TIFF),
# a widely used format for storing image data. Included is the libtiff
# library (for reading and writing TIFF files), and a collection of
# tools for working with TIFF images.
# Homepage: http://www.simplesystems.org/libtiff
#
# gmp (GNU multiple precision arithmetic library)
# GNU MP is a library for arbitrary precision arithmetic, operating on
# signed integers, rational numbers, and floating point numbers. It has
# a rich set of functions, and the functions have a regular interface.
#
# openldap (Lightweight Directory Access Protocol)
# OpenLDAP is an open source implementation of the Lightweight Directory
# Access Protocol. LDAP is a alternative to the X.500 Directory Access
# Protocol (DAP). It uses the TCP/IP stack versus the overly complex OSI
# stack.
# LDAP is often used to provide authentication (such as for email).
# Homepage: https://www.openldap.org/
#
# argon2 (Argon2 password-hashing function)
# This is the reference C implementation of Argon2, the password-hashing
# function that won the Password Hashing Competition
# (see https://password-hashing.net).
# Argon2 is a password-hashing function that summarizes the state of the
# art in the design of memory-hard functions and can be used for
# credential storage, key derivation, or other applications.
# Homepage: https://github.com/P-H-C/phc-winner-argon2
#
# expat (C library for parsing XML)
# This is Expat, a C library for parsing XML, written by James Clark.
# Expat is a stream-oriented XML parser used by Python, GNOME, Xft2,
# and other things.
# Homepage: https://libexpat.github.io
#