それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ubuntu /debian のLTSにphp7.1/php7.2/php8.0/php8.1 などを複数バージョン導入する

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 のサポートライン

f:id:takuya_1st:20211129124747p:plain

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

PECLphpはバージョンが上がるとビルドし直しなので、なにかいい方法がないかと思う。 自前でビルドパッケージシステムを作り、aptパッケージとしてapt-lineしか無いかもしれない

設定など

mod_phpphp-fpm を使うわけだが

mod_php の場合、設定すれば行けるのですが、競合とかめんどくさいので apache(prefork)+mod_phpapache(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/

https://tecadmin.net/install-php-debian-9-stretch/