EL6 で Apache httpd 2.4 と PHP 5.4 を使う
RHEL6系のディストリビューション(CentOS, Scientific Linux等)で Apache httpd 2.4.x, PHP 5.4.x を使う場合のメモです。
前提条件
remi の有効範囲を限定する
/etc/yum.repos.d/remi.repo に includepkgs, exclude を追加します。
[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=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi includepkgs=php-*,mysql,mysql-*,compat-mysql51 exclude=php
Apache httpdをインストールする
Jenkinsを用いた継続的RPMビルド - GeekFactory を参照ください。例として Apache httpd のビルドについて書いています。
httpd-2.4.x をインストールした状態で remi の php をインストールしようとすると、下記のエラーが出ます。これはhttpd とモジュールのバージョンを合わせるチェックが働いているためです。
Error: Package: php-5.4.17-2.el6.remi.x86_64 (remi) Requires: httpd-mmn = 20051115 Installed: httpd-2.4.6-1.x86_64 (@my) httpd-mmn = 20120211 Available: httpd-2.2.15-26.sl6.x86_64 (sl) httpd-mmn = 20051115 Available: httpd-2.2.15-28.sl6.x86_64 (sl-security) httpd-mmn = 20051115 Available: httpd-2.4.3-1.x86_64 (my) httpd-mmn = 20120211
一方で、php パッケージに含まれているのは mod_php と設定ファイルだけで、内容的にはなくても問題ないことが分かります。
Provides
Files
http://www.rpmfind.net//linux/RPM/remi/enterprise/6/x86_64/php-5.4.17-1.el6.remi.x86_64.html
- /etc/httpd/conf.d/php.conf
- /usr/lib64/httpd/modules/libphp5-zts.so
- /usr/lib64/httpd/modules/libphp5.so
- /var/lib/php/session
- /var/www/icons/php.gif
ここで、下記を満たす解決策を考えみましょう。
phpのダミーパッケージをインストールする
一つの解決策として、ダミーパッケージをインストールする方法があります。これは空のRPMを入れて、あたかもインストール済みのように見せかけるものです。乱用するとパッケージ管理システムの運用に支障を来しますが、簡単なので昔からよく使われている手法です。
必要なファイルは GitHub の int128/dummy-rpms · GitHub に置いています。
Name: php Version: 5.4 Release: 1%{?dist}.dummy Summary: A dummy package providing PHP without mod_php Group: Development/Languages License: Nothing %description Providing PHP dependencies for CGI/CLI only environment. %files
rpmbuild -bb php.spec sudo yum install php-5.4-1.el6.dummy.rpm
PHP, MySQL をインストールする
PHP, MySQL に依存するパッケージを指定して、依存関係が正常に解決されることを確認してください。
$ sudo yum install php-mysql (中略) Resolving Dependencies --> Running transaction check ---> Package php-mysql.x86_64 0:5.4.17-2.el6.remi will be installed --> Processing Dependency: php-pdo(x86-64) = 5.4.17-2.el6.remi for package: php-mysql-5.4.17-2.el6.remi.x86_64 --> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: php-mysql-5.4.17-2.el6.remi.x86_64 --> Processing Dependency: libmysqlclient.so.18(libmysqlclient_16)(64bit) for package: php-mysql-5.4.17-2.el6.remi.x86_64 --> Processing Dependency: libmysqlclient.so.18()(64bit) for package: php-mysql-5.4.17-2.el6.remi.x86_64 --> Running transaction check ---> Package mysql-libs.x86_64 0:5.1.69-1.el6_4 will be updated --> Processing Dependency: libmysqlclient.so.16()(64bit) for package: 2:postfix-2.6.6-2.2.el6_1.x86_64 --> Processing Dependency: libmysqlclient.so.16(libmysqlclient_16)(64bit) for package: 2:postfix-2.6.6-2.2.el6_1.x86_64 ---> Package mysql-libs.x86_64 0:5.5.32-1.el6.remi will be an update ---> Package php-pdo.x86_64 0:5.4.17-2.el6.remi will be installed --> Processing Dependency: php-common(x86-64) = 5.4.17-2.el6.remi for package: php-pdo-5.4.17-2.el6.remi.x86_64 --> Running transaction check ---> Package compat-mysql51.x86_64 0:5.1.54-1.el6.remi will be installed ---> Package php-common.x86_64 0:5.4.17-2.el6.remi will be installed --> Finished Dependency Resolution