CentOS7にApache2.4とPHP5.6を入れようとしたら物凄く躓きました。httpd-mmnの違いで、インストール時の依存性解決時にエラーが起きました。
エラー内容
# sudo yum install --enablerepo=remi,remi-php56 httpd php
...
エラー: パッケージ: php-5.6.4-2.el6.remi.x86_64 (remi-php56)
要求: httpd-mmn = 20051115
利用可能: httpd-2.4.6-17.el7.centos.1.x86_64 (base)
httpd-mmn = 20120211x8664
httpd-mmn = 20120211-x86-64
httpd-mmn = 20120211
インストール中: httpd-2.4.6-18.el7.centos.x86_64 (updates)
httpd-mmn = 20120211x8664
httpd-mmn = 20120211-x86-64
httpd-mmn = 20120211
httpd-mmnとはapacheのソースコードに定義されている、互換性に関する定数のようです。「Apacheのhttpd-mmnは『20120211』なのに、PHP5.6が要求しているhttpd-mmnは『20051115』だからインストールできませんわ」と言っているんですね。
結論から言いますと、remiリポジトリのバージョンが古いことが原因でした。実際にremiリポジトリの内容を見てみると、
# cat /etc/yum.repos.d/remi.repo
[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
...
となっています。「Enterprise Linux 6」となっていたり、リポジトリのURLに「6」と入っていると古いようです(2015年1月現在新しいのは7です)。なので、一旦この古いリポジトリを削除して新しくします。
remiリポジトリを新しくする
削除するため古いリポジトリ名を探します。
# rpm -qa | grep remi
remi-release-6.5-1.el6.remi.noarch
「remi-release-6.5-1.el6.remi.noarch」ですね。
remiリポジトリを削除する前に、依存性のあるパッケージがあるか確認しておきます。
# rpm -e --test remi-release-6.5-1.el6.remi.noarch
自分の場合は無かったので、そのまま削除します。
# rpm -e remi-release-6.5-1.el6.remi.noarch
次に、新しいremiリポジトリを入れます。以下はユーザディレクトリ(cd ~
)にリポジトリをダウンロードしています。
# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# rpm -Uvh remi-release-7.rpm
これでremiリポジトリが新しくなりました。早速インストールしてみます。
# sudo yum install --enablerepo=remi,remi-php56 httpd php
...
エラー: パッケージ: php-5.6.4-2.el6.remi.x86_64 (remi-php56)
要求: httpd-mmn = 20051115
利用可能: httpd-2.4.6-17.el7.centos.1.x86_64 (base)
httpd-mmn = 20120211x8664
httpd-mmn = 20120211-x86-64
httpd-mmn = 20120211
インストール中: httpd-2.4.6-18.el7.centos.x86_64 (updates)
httpd-mmn = 20120211x8664
httpd-mmn = 20120211-x86-64
httpd-mmn = 20120211
が、自分の場合ここに来てまた冒頭と同じエラーが起きてしまいました。
リポジトリのキャッシュが原因
リポジトリを新しくしたのにもかかわらずphpのダウンロードバージョンに「el6」と書かれています。どうやらキャッシュが原因でリポジトリのURLが変更されていないようです。キャッシュを削除してみます。
# yum clean all
しかし、これでもダメでした。
yum cleanでも完璧には削除されない?
もうここまで来たらコマンドに頼らず、直接yumのキャッシュディレクトリを削除することにしました。キャッシュディレクトリは/etc/yum.confに設定されています。
# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
$basearch
と$releasever
はそれぞれシステムのアーキテクチャ、Red Hat Enterprise Linuxのバージョンを参照するようですが、ディレクトリはtabを押していけば自動的に入力されるので深く考えなくて大丈夫でしょう。自分は以下のキャッシュディレクトリを削除しました。
# rm -rf /var/cache/yum/x86_64/7/remi
# rm -rf /var/cache/yum/x86_64/7/remi-php55
# rm -rf /var/cache/yum/x86_64/7/remi-php56
はい。これでようやくリポジトリのURLが新しくなって、Apache2.4とPHP5.6のインストールができました。
# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Jul 23 2014 14:48:00
# php -v
PHP 5.6.4 (cli) (built: Dec 17 2014 16:37:35)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
# httpd -M | grep php
php5_module (shared)
以上です。
参考:
PHPの環境設定に関する問題CentOS 7.0.1406 上のPHP5.4及び5.5で以下の… – Yahoo!知恵袋