Ubuntu 16 LTSのPHPが古い
WindowsのWSLでインストールされる Ubuntu 16 LTS のパッケージがLTSらしく、どれもちょっと古くて困るので、php7.1 php7.2 をapt インストールして使いたい。
LTS だとphpが古い
php5.6 のサポートは終わりました。
php7.0 のサポートも終わりました。
php7.1系ももうすぐ終わりそうです。(終わりました。
wordpressに導入するためには、現行のubuntu/DebianのLTSサポートだとちょっと困る。
php のサポートライン
ubuntu LTS や debian 9 / debian LTS
debian はstable は古いが安定してるというか、長期運用が可能といえど追いついてこないのは本当に困るよね。
配布レポジトリを追加する
debian 用
eval " $( cat /etc/os-release )" sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg sudo sh -c "echo 'deb https://packages.sury.org/php/ $VERSION_CODENAME main' > /etc/apt/sources.list.d/php.list" sudo apt install apt-transport-https ca-certificates sudi apt update
ubuntu 用
add-apt-repository ppa:ondrej/php
インストール
パッケージはお好みで。
sudo apt install php7.1-apcu\ php7.1-bcmath\ php7.1-cli\ php7.1-curl\ php7.1-fpm\ php7.1-gd\ php7.1-intl\ php7.1-imagick\ php7.1-mcrypt\ php7.1-mbstring\ php7.1-mysql\ php7.1-pgsql\ php7.1-sqlite3\ php7.1-xml\ php7.1-zip\ php7.1-phpdbg
php8.1 のインストール
sudo apt install \ php8.1-apcu \ php8.1-bcmath \ php8.1-curl \ php8.1-cli \ php8.1-common \ php8.1-dev \ php8.1-fpm \ php8.1-gd \ php8.1-intl \ php8.1-imagick \ php8.1-mbstring \ php8.1-mcrypt \ php8.1-mysql \ php8.1-opcache \ php8.1-sqlite3 \ php8.1-xml \ php8.1-xsl \ php8.1 \ ;
デフォルトのphpを設定する。
いきなり全部あげてしまうと影響もあるし、デフォルトのphpコマンドのバージョンを固定してしまってもいいだろう。
sudo update-alternatives --set php /usr/bin/php8.0
任意のバージョンを使う。
$ php7.0 -i $ php7.4 -i $ php8.0 -i $ php8.1 -i
phpのモジュールを有効・無効を切り替える
有効化
phpenmod -v 7.0 imap phpenmod -v 8.0 imap
無効化
phpdismod -v 7.0 imap phpdismod -v 8.0 imap
任意のPECL/PEARバージョンを入れる。
PEAR/PECL のモジュールは、バージョン共通のパッケージを使う。
apt install php-pear
ビルドして、PECLのパッケージを有効化する。
たとえば、pam のパッケージをビルドして使う場合。
sudo apt install php8.1-dev wget https://pecl.php.net/get/pam-2.2.3.tgz tar zxvf pam-2.2.3.tgz cd pam-2.2.3 phpize8.1 ./configure make sudo make install phpenmod -v 8.1 pam systemctl restart php8.1-fpm apache2
PECLのphpはバージョンが上がるとビルドし直しなので、なにかいい方法がないかと思う。 自前でビルドパッケージシステムを作り、aptパッケージとしてapt-lineしか無いかもしれない
設定など
mod_php の場合、設定すれば行けるのですが、競合とかめんどくさいので apache(prefork)+mod_php → apache(worker)+php-fpm にしたほうが無難かと思われる。もちろんnginx でもいいんだけど、thread や worker を使うならapacheでも対して変わらない。
2021-11-15
stretch / buster / bullseye を直接書いてたので、再利用しやすいように変更
2021-11-29
php8.1が出たので更新。
参考資料
System installation on Debian 9 (Stretch) — Akeneo PIM documentation
https://pierre-schmitz.com/using-opcache-to-speed-up-your-cli-scripts/