2015年2月3日火曜日

CentOS6.5でphp5.5のrpm化&インストール

WordPressを構築してみるために、最新のphp 5.6.5をインストールを試みた。rpm作成から試してみる。
※rpm作成環境の構築はこちら ソースコードを入手し、さくっとrpmを作成してみる。
まずは標準のレポジトリから入れてみる。
$ sudo yum install php
・
・
Error: Package: php-5.3.3-40.el6_6.x86_64 (updates)
           Requires: httpd-mmn = 20051115
           Installed: httpd-2.4.12-1.x86_64 (installed)
               httpd-mmn = 20120211
           Available: httpd-2.2.15-39.el6.centos.x86_64 (base)
               httpd-mmn = 20051115
・
・
となった。バージョンも5.3.3となっているし、httpd 2.4が入ってる環境だと、エラーが出てしまう見たい。 原因はメッセージの通り、httpd 2.2.15までにしか対応していない。ということなのでしょう。 ということで、ソース化からrpmを作ってみることにした。phpのサイトから入手して、、
$ wget http://jp1.php.net/get/php-5.6.5.tar.bz2/from/this/mirror -O php-5.6.5.tar.bz2
$ rpmbuild -bb php-5.6.5.tar.bz2

error: File /home/hayashi/rpmbuild/SOURCES/php-5.6.5.tar.bz2 does not appear to be a specfile.

specファイルがないと・・確かにない。ということで、IUSのサイトからSRPMを入手し、試す。
$ cd ~/rpmbuild/SRPMS
$ wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php56u-5.6.5-1.ius.centos6.src.rpm
$ rpmbuild --rebuild --clean php56u-5.6.5-1.ius.centos6.src.rpm
・
・
・
error: Failed build dependencies:
        bzip2-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        curl-devel >= 7.9 is needed by php56u-5.6.5-1.ius.el6.x86_64
        pam-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        httpd-devel < 2.4 is needed by php56u-5.6.5-1.ius.el6.x86_64
        libedit-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libtool-ltdl-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        systemtap-sdt-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libc-client-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        firebird-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        net-snmp-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libxslt-devel >= 1.0.18-1 is needed by php56u-5.6.5-1.ius.el6.x86_64
        t1lib-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libjpeg-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libpng-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        freetype-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libXpm-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libvpx-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        gmp-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        tokyocabinet-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libmcrypt-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libtidy-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        aspell-devel >= 0.50.0 is needed by php56u-5.6.5-1.ius.el6.x86_64
        recode-devel is needed by php56u-5.6.5-1.ius.el6.x86_64
        libicu-devel >= 4.0 is needed by php56u-5.6.5-1.ius.el6.x86_64
        enchant-devel >= 1.2.4 is needed by php56u-5.6.5-1.ius.el6.x86_64

$ yum install bzip2-devel curl-devel pam-devel libedit-devel libtool-ltdl-devel systemtap-sdt-devel /
libc-client-devel firebird-devel net-snmp-devel libxslt-devel t1lib-devel libjpeg-devel libpng-devel /
freetype-devel libXpm-devel libvpx-devel gmp-devel tokyocabinet-devel libmcrypt-devel libtidy-devel /
aspell-devel recode-devel libicu-devel enchant-devel

$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/httpd-devel-2.4.12-1.x86_64.rpm

error: Failed build dependencies:
        httpd-devel < 2.4 is needed by php56u-5.6.5-1.ius.el6.x86_64

おっと、、httpd-develはapache2.4.12と合わせてインストールしたが、、これを見ると2.2じゃないとダメということか?httpdとhttpd-develのバージョンを別々のものを入れてもよいのか?はわからなかった。ということで、php 5.5.xを 探してみる。 ちなみにphpの古いバージョンは、IUSのサイトのアーカイブを参照。
まずは、5.5系の最新版である5.5.21。
$ mkdir /tmp/php/
$ wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/SRPMS/php55u-5.5.21-1.ius.el6.src.rpm
$ rpm2cpio php55u-5.5.21-1.ius.centos6.src.rpm  | cpio -id
$ less php55u.spec

・
・
%if 0%{?rhel} < 7
BuildRequires: httpd-devel < 2.4
%else
BuildRequires: httpd-devel
%endif
・
・
となっており、5.6とおなじく、redhet6(この場合はcentos6)だと、httpd-develは2.4未満じゃないとダメらしい。次は5.5.20。5.5.20のspecを見ると、
・
・
BuildRequires: httpd-devel >= 2.0.46-1, pam-devel
・
・
となっており、大丈夫そうです。ということで、5.5.20で進める。
$ cd ~/rpmbuild/SRPM
$ rpmbuild --rebuild --clean php55u-5.5.20-1.ius.centos6.src.rpm

・
・

Sorry, I cannot run apxs.  Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs
3. Apache was not built using --enable-so (the apxs usage page is displayed)

The output of /usr/sbin/apxs follows:
./configure: line 8754: /usr/sbin/apxs: No such file or directory
configure: error: Aborting
error: Bad exit status from /var/tmp/rpm-tmp.bYrvIJ (%build)

・
・
というエラーがでた。apache2.4からは、apxsのパスは、「/usr/bin/apxs」に変更になったとの ことで、specファイルを変更する。
$ cd /tmp/php/;rm -f *
$ rpm2cpio php55u-5.5.20-1.ius.centos6.src.rpm  | cpio -id
$ cp php55u.spec ~/rpmbuild/SPECS/
$ cd ~/rpmbuild/SPECS/
$ vi php55u.spec
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}}
 ↓
# /usr/sbin/apsx with httpd < 2.4 and defined as /usr/bin/apxs with httpd >= 2.4
#%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}}
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_bindir}/apxs}}
これでいけるかな・・
$ rpmbuild -bb --clean ~/rpmbuild/SPECS/php55u.spec
・
・
+ umask 022
+ cd /home/hayashi/rpmbuild/BUILD
+ rm -rf php-5.5.20
+ exit 0

$ cd ~/rpmbuild/RPMS/x86_64/
$ ls php55u-*5.5.20*
php55u-5.5.20-1.ius.el6.x86_64.rpm            php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm
php55u-bcmath-5.5.20-1.ius.el6.x86_64.rpm     php55u-mcrypt-5.5.20-1.ius.el6.x86_64.rpm
php55u-cli-5.5.20-1.ius.el6.x86_64.rpm        php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm
php55u-common-5.5.20-1.ius.el6.x86_64.rpm     php55u-mysqlnd-5.5.20-1.ius.el6.x86_64.rpm
php55u-dba-5.5.20-1.ius.el6.x86_64.rpm        php55u-odbc-5.5.20-1.ius.el6.x86_64.rpm
php55u-debuginfo-5.5.20-1.ius.el6.x86_64.rpm  php55u-opcache-5.5.20-1.ius.el6.x86_64.rpm
php55u-devel-5.5.20-1.ius.el6.x86_64.rpm      php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm
php55u-embedded-5.5.20-1.ius.el6.x86_64.rpm   php55u-pgsql-5.5.20-1.ius.el6.x86_64.rpm
php55u-enchant-5.5.20-1.ius.el6.x86_64.rpm    php55u-process-5.5.20-1.ius.el6.x86_64.rpm
php55u-fpm-5.5.20-1.ius.el6.x86_64.rpm        php55u-pspell-5.5.20-1.ius.el6.x86_64.rpm
php55u-gd-5.5.20-1.ius.el6.x86_64.rpm         php55u-recode-5.5.20-1.ius.el6.x86_64.rpm
php55u-gmp-5.5.20-1.ius.el6.x86_64.rpm        php55u-snmp-5.5.20-1.ius.el6.x86_64.rpm
php55u-imap-5.5.20-1.ius.el6.x86_64.rpm       php55u-soap-5.5.20-1.ius.el6.x86_64.rpm
php55u-interbase-5.5.20-1.ius.el6.x86_64.rpm  php55u-tidy-5.5.20-1.ius.el6.x86_64.rpm
php55u-intl-5.5.20-1.ius.el6.x86_64.rpm       php55u-xml-5.5.20-1.ius.el6.x86_64.rpm
php55u-ldap-5.5.20-1.ius.el6.x86_64.rpm       php55u-xmlrpc-5.5.20-1.ius.el6.x86_64.rpm
php55u-litespeed-5.5.20-1.ius.el6.x86_64.rpm
成功!wordpressを想定してインストールしてみる。
$ sudo rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm

error: Failed dependencies:
        php55u-common(x86-64) = 5.5.20-1.ius.el6 is needed by php55u-5.5.20-1.ius.el6.x86_64
        php55u-cli(x86-64) = 5.5.20-1.ius.el6 is needed by php55u-5.5.20-1.ius.el6.x86_64
        php55u-common = 5.5.20-1.ius.el6 is needed by php55u-mbstring-5.5.20-1.ius.el6.x86_64
        php55u-pdo = 5.5.20-1.ius.el6 is needed by php55u-mssql-5.5.20-1.ius.el6.x86_64

$ sudo rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm php55u-mssql-5.5.20-1.ius.el6.x86_64.rpm php55u-common-5.5.20-1.ius.el6.x86_64.rpm php55u-cli-5.5.20-1.ius.el6.x86_64.rpm php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm

error: Failed dependencies:
        php55u-pecl-jsonc is needed by php55u-common-5.5.20-1.ius.el6.x86_64

まだかぁ。先は長いっす。この後も出てきます。ちょっと関係性を整理しておく。  php55u-common   ⇒php55u-pecl-jsonc(*)    ⇒php55u-devel     ⇒php55u-cli      ⇒php55u-common     ⇒php55u-pecl-jsonc-devel(*)    ⇒php55u-pear(*)     ⇒php55u-cli      ⇒php55u-common     ⇒php55u-xml      ⇒php55u-common とループしちゃってます。うち、(*)についてはコンパイルが必要になります。ので、、 コンパイルに必要となるphp55u-cli、php55u-common、php55u-xml、php55u-develについては、依存関係を無視して インストールする必要があるってことですね。

$ sudo rpm -Uvh --nodeps php55u-cli-5.5.20-1.ius.el6.x86_64.rpm php55u-common-5.5.20-1.ius.el6.x86_6
4.rpm  php55u-xml-5.5.20-1.ius.el6.x86_64.rpm php55u-devel-5.5.20-1.ius.el6.x86_64.rpm

残りのパッケージについて、IUSで再度入手して進める。
$ wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php55u-pear-1.9.5-2.ius.centos6.src.rpm
$ rpmbuild --rebuild --clean php55u-pear-1.9.5-2.ius.centos6.src.rpm
$ sudo rpm -Uvh ../RPMS/noarch/php55u-pear-1.9.5-2.ius.el6.noarch.rpm

error: Failed dependencies:
        php55u-posix is needed by php55u-pear-1:1.9.5-2.ius.el6.noarch

まだあるんですか。。長すぎる。php55u-posixのSRPMをIUSのサイトで調べたけど、見当たらず。yumを使って調査をしてみた。まずはIUSのレポジトリを追加。
$ wget wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-13.ius.centos6.noarch.rpm
$ sudo rpm -Uvh ius-release-1.0-13.ius.centos6.noarch.rpm
$ sudo vi /etc/yum.repos.d/ius.repo
[ius]
・
・
#enabled=1
enabled=0
・
・
[ius-debuginfo]
・
・

調査。
$ yum --enablerepo=ius provides php55u-posix

Loaded plugins: fastestmirror, versionlock
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.riken.jp
 * ius: hkg.mirror.rackspace.com
 * updates: ftp.riken.jp
php55u-process-5.5.21-1.ius.centos6.x86_64 : Modules for PHP script using system process interfaces
Repo        : ius
Matched from:
Other       : php55u-posix
ということで、php55u-processを入れればいいみたい。
$ sudo rpm -Uvh ../RPMS/noarch/php55u-pear-1.9.5-2.ius.el6.noarch.rpm ../RPMS/x86_64/php55u-process-5.5.20-1.ius.el6.x86_64.rpm
無事成功。残るは、、php55u-pecl-jsoncとphp55u-pecl-jsonc-develです。
$ wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php55u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm
$ rpmbuild --rebuild --clean php55u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm
$ cd ../RPMS/x86_64/
$ sudo rpm -Uvh php55u-pecl-jsonc-1.3.6-3.ius.el6.x86_64.rpm php55u-pecl-jsonc-devel-1.3.6-3.ius.el6.x86_64.rp
$ sudo rpm -Uvh php55u-5.5.20-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.20-1.ius.el6.x86_64.rpm php55u-pdo-5.5.20-1.ius.el6.x86_64.rpm  php55u-mysqlnd-5.5.20-1.ius.el6.x86_64.rpm

ということで、php 5.5.20を無事インストールすることができました。 wordPress $ sudo rpm -Uvh php55u-5.5.14-1.ius.el6.x86_64.rpm php55u-common-5.5.14-1.ius.el6.x86_64.rpm php55u-cli-5.5.14-1.ius.el6.x86_64.rpm php55u-opcache-5.5.14-1.ius.el6.x86_64.rpm php55u-pdo-5.5.14-1.ius.el6.x86_64.rpm php55u-mysqlnd-5.5.14-1.ius.el6.x86_64.rpm php55u-mbstring-5.5.14-1.ius.el6.x86_64.rpm $ sudo rpm -Uvh php55u-fpm-5.5.14-1.ius.el6.x86_64.rpm $ sudo chkconfig php-fpm on http.conf LoadModule mpm_event_module lib64/httpd/modules/mod_mpm_event.so #LoadModule mpm_prefork_module lib64/httpd/modules/mod_mpm_prefork.so root:password mysql mysql> create database wp; mysql> grant all privileges on wp.* to wp@localhost identified by "wppassword";