CentOS 7.x で php-7.x を入れるためのリポジトリの比較

# (2021/07/05 更新）

webtatic リポジトリは、2019/10/26 を最後に更新が止まっています。
いい感じのリポジトリだったのですが、今となっては残念ながら、あまりお勧めできません。
このため、この記事もそろそろ賞味期限切れということになります。
これから PHP をインストールする方は、[Remi's RPM repository](https://rpms.remirepo.net/wizard/) をお勧めします。

# はじめに

久しぶりに php の環境を作る機会ができたので、CentOS 7.x と php-7.x の組み合わせにおけるリポジトリの現状を調べてみました。

ベースとなる OS は、Vagrant box から yum update したものです。調査準備までの手順（抜粋）を以下に示します。

```cmd
d:\> mkdir laravel
d:\> cd laravel
d:\laravel> vagrant init bento/centos-7.1
d:\laravel> vagrant up
d:\laravel> vagrant ssh
[vagrant@localhost]:~$ cat /etc/system-release
CentOS Linux release 7.1.1503 (Core)
[vagrant@localhost]:~$ sudo yum update
d:\laravel> vagrant reload
d:\laravel> vagrant snapshot take 'just_after_yum_update'
d:\laravel> vagrant ssh
[vagrant@localhost]:~$ cat /etc/system-release
CentOS Linux release 7.2.1511 (Core)
```
Vagrant+VirtualBox は Windows10 上で動かしています。ディレクトリ名には特に意味はありません。

# デフォルトの状態

素の CentOS7.2 では、yum リポジトリは以下のようになっています。

```bash
[vagrant@localhost ~]$ ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
```

デフォルトでは php はインストールされていません。

```bash
[vagrant@localhost ~]$ rpm -qa|grep php
```

この状態で php を入れようとすると、5.4 系が落ちてきます。

```bash
[vagrant@localhost ~]$ sudo yum install php
（中略）
================================================================================
 Package           Arch         Version                     Repository     Size
================================================================================
Installing:
 php               x86_64       5.4.16-36.3.el7_2           updates       1.4 M
Installing for dependencies:
 apr               x86_64       1.4.8-3.el7                 base          103 k
 apr-util          x86_64       1.5.2-6.el7                 base           92 k
 httpd             x86_64       2.4.6-40.el7.centos.4       updates       2.7 M
 httpd-tools       x86_64       2.4.6-40.el7.centos.4       updates        83 k
 libzip            x86_64       0.10.1-8.el7                base           48 k
 mailcap           noarch       2.1.41-2.el7                base           31 k
 php-cli           x86_64       5.4.16-36.3.el7_2           updates       2.7 M
 php-common        x86_64       5.4.16-36.3.el7_2           updates       563 k

Is this ok [y/d/N]:
```
（ [Enter] で応答して、インストールを中止します）

5.4 以外のバージョンは提供されていないようです。

```bash
[vagrant@localhost ~]$ yum search php | grep ^php | grep -v ^php-
php.x86_64 : PHP scripting language for creating dynamic web sites
```

# リポジトリの選択肢

CentOS 7.x で php-7.x を入れる場合、有名なリポジトリとしては remi と webtatic があります。いずれも epel(Extra Packages for Enterprise Linux) に依存しますので、あらかじめ epel を入れておきます。

```bash
[vagrant@localhost ~]$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
```
## webtatic

まず、以前から個人的に使わせていただいていた webtatic から調べます。webtatic のインストールのやり方は [https://webtatic.com/packages/php70/](https://webtatic.com/packages/php70/) にあります：

```bash
[vagrant@localhost ~]$ sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
[vagrant@localhost ~]$ rpm -qa|grep -E '(epel|remi|webtatic)'
epel-release-7-8.noarch
webtatic-release-7-3.noarch
[vagrant@localhost ~]$ sudo yum update
[vagrant@localhost ~]$ yum search php|grep -E '^php[a-z0-9]*-devel'
php-devel.x86_64 : Files needed for building PHP extensions
php54w-devel.x86_64 : Files needed for building PHP extensions
php55w-devel.x86_64 : Files needed for building PHP extensions
php56w-devel.x86_64 : Files needed for building PHP extensions
php70w-devel.x86_64 : Files needed for building PHP extensions
```

webtatic では 5.4, 5.5, 5.6, 7.0 系が選べるようです。この中で、7.0 系を見てみます。

```bash
[vagrant@localhost ~]$ sudo yum install php70w
================================================================================
 Package            Arch        Version                     Repository     Size
================================================================================
Installing:
 php70w             x86_64      7.0.9-1.w7                  webtatic      2.8 M
Installing for dependencies:
 apr                x86_64      1.4.8-3.el7                 base          103 k
 apr-util           x86_64      1.5.2-6.el7                 base           92 k
 httpd              x86_64      2.4.6-40.el7.centos.4       updates       2.7 M
 httpd-tools        x86_64      2.4.6-40.el7.centos.4       updates        83 k
 mailcap            noarch      2.1.41-2.el7                base           31 k
 php70w-cli         x86_64      7.0.9-1.w7                  webtatic      2.9 M
 php70w-common      x86_64      7.0.9-1.w7                  webtatic      1.2 M
```

php のバージョンは、7.0.9 が落ちてくることがわかります。最新は 2016/08/18 に出た 7.0.10 ですので、ひとつ前のバージョン（パッチレベル）です。パッケージ構成については、libzip がなくなっている以外は、現状の php-5.4 系をほぼそのまま継承していることがわかります。

## remi

次に remi を見てみます。リポジトリが混ざらないように、あらかじめ webtatic を消してから調査します。

```bash
[vagrant@localhost ~]$ sudo yum remove webtatic-release
[vagrant@localhost ~]$ sudo rpm -Uvh  http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
[vagrant@localhost ~]$ rpm -qa|grep -E '(epel|remi|webtatic)'
epel-release-7-8.noarch
remi-release-7.2-1.el7.remi.noarch
```

ちなみに remi とは、公式サイト [http://blog.remirepo.net/pages/English-FAQ#goal](http://blog.remirepo.net/pages/English-FAQ#goal) によると
> Providing the  latest versions of the PHP stack, full featured, and some other software, to the Fedora and Enterprise Linux (RHEL, CentOS, Oracle, Scientific Linux, ...) users.

とのことです。

この状態で php のバリエーションを探してみます。

```bash
[vagrant@localhost ~]$ yum search php|grep ^php | grep -e 'php-devel'
php-devel.x86_64 : Files needed for building PHP extensions
php56-php-devel.x86_64 : Files needed for building PHP extensions
php70-php-devel.x86_64 : Files needed for building PHP extensions
php71-php-devel.x86_64 : Files needed for building PHP extensions
```

remi では 5.6系, 7.0系、7.1系が選べるようです。7.1 系は 7.1.0-b2 が 2016/08/04 に出たばかりの開発版ですので、地雷を避けるために、現時点では 7.0 の方を調べてみます。

```bash
[vagrant@localhost ~]$ sudo yum install php70
（中略）
================================================================================
 Package                   Arch      Version                 Repository    Size
================================================================================
Installing:
 php70                     x86_64    1.0-5.el7.remi          remi-safe    2.9 k
Installing for dependencies:
 audit-libs-python         x86_64    2.4.1-5.el7             base          69 k
 checkpolicy               x86_64    2.1.12-6.el7            base         247 k
 environment-modules       x86_64    3.2.10-10.el7           base         107 k
 libX11                    x86_64    1.6.3-2.el7             base         605 k
 libX11-common             noarch    1.6.3-2.el7             base         162 k
 libXau                    x86_64    1.0.8-2.1.el7           base          29 k
 libcgroup                 x86_64    0.41-8.el7              base          64 k
 libsemanage-python        x86_64    2.1.10-18.el7           base          94 k
 libxcb                    x86_64    1.11-4.el7              base         189 k
 php70-php-cli             x86_64    7.0.9-1.el7.remi        remi-safe    2.6 M
 php70-php-common          x86_64    7.0.9-1.el7.remi        remi-safe    577 k
 php70-php-json            x86_64    7.0.9-1.el7.remi        remi-safe     55 k
 php70-runtime             x86_64    1.0-5.el7.remi          remi-safe    1.1 M
 policycoreutils-python    x86_64    2.2.5-20.el7            base         435 k
 python-IPy                noarch    0.75-6.el7              base          32 k
 scl-utils                 x86_64    20130529-17.el7_1       base          24 k
 setools-libs              x86_64    3.3.7-46.el7            base         485 k
 tcl                       x86_64    1:8.5.13-8.el7          base         1.9 M
```

こちらも php のバージョンは webtatic と同様です。ただパッケージ構成については、5.4 系とはだいぶ異なるようです。

ちょっとだけ調べたところ、依存関係で落ちてくる scl-utils は『[メタパッケージ](https://access.redhat.com/documentation/en-US/Red_Hat_Software_Collections/2/html/Packaging_Guide/sect-Creating_a_Meta_Package.html)』を作るための仕組みで、"SC" は Software Collection の略だそうです。php70-runtime という見慣れないパッケージがありますが、ためしに入れてみたら、これもメタパッケージがらみのようでした。

# 結論

現状では webtatic か remi の二択かと思いますが、すでに php-5.x 系の運用に慣れていて、単なる最新版への追随で Web サーバーも apache(httpd) のままでよいということであれば、webtatic の方がシンプルでよいのかもしれません。一方、今後開発に使っていこうという場合は、新しい仕組みを導入しようとしている remi の方を選ぶ、という感じでしょうか。