読者です 読者をやめる 読者になる 読者になる

waste of time

主にPHP

PHPのバージョンを5.3.3から5.5系に変える

PHP CentOS

CentOSのバージョンは6.5、PHPのバージョンは5.3.3であることを確認。

$ sudo yum update

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

$ php -v
PHP 5.3.3 (cli) (built: Aug  6 2014 05:54:27)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator

php5.5はremiリポジトリからアップデートするので、まずはremiリポジトリを追加する。

$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

リポジトリの優先順位を変更できるyum-plugin-prioritiesをインストールする。

$ sudo yum install yum-plugin-priorities

標準のリポジトリにない場合のみremiリポジトリを利用するようにしたいので、remiリポジトリは普段は無効にしておく。yum-plugin-prioritiesでremiリポジトリの優先度を標準リポジトリよりも高くしておくことで、yum install --enablerepo=remiyum update --enablerepo=remiで必要に応じてremiリポジトリを有効にして優先利用することができるようになる。

まずは先ほどインストールしたyum-plugin-prioritiesでリポジトリの優先度を指定する。
標準リポジトリ/etc/yum.repos.d/CentOS-Base.repoに[base]や[updates]などいくつか記載されているので、その全てにpriority=2を追記する。priorityの数値は低いほうが優先度が高い。ちなみに未指定だとデフォルトでpriority=99になるらしい。

$ sudo vim /etc/yum.repos.d/CentOS-Base.repo

[base]
priority=2
hogehoge

[updates]
priority=2
hogehoge

.
.
.

続いてremiリポジトリの優先度設定を行う。remiリポジトリの設定は/etc/yum.repos.d/remi.repoに記載されているので、その中のすべてのリポジトリpriority=1を追記する。この際各リポジトリenabled=0になっているかも確認する。(デフォルトでは無効になっているはず)

$ sudo vim /etc/yum.repos.d/remi.repo

[remi]
priority=1
...
enabled=0
...

[remi-php55]  ← php5.5はこのリポジトリからインストールされるので、このリポジトリがちゃんと記載されているか確認。
priority=1
...
enabled=0
...

.
.
.

更新予定のパッケージをyum info php --enablerepo=remi-php55,remiで確認する。

$ sudo yum info php --enablerepo=remi-php55,remi

Installed Packages
Name        : php
Arch        : x86_64
Version     : 5.3.3
Release     : 27.el6_5.1
Size        : 3.5 M
Repo        : installed
From repo   : updates
Summary     : PHP scripting language for creating dynamic web sites
URL         : http://www.php.net/
License     : PHP
Description : PHP is an HTML-embedded scripting language. PHP attempts to make
            : it easy for developers to write dynamically generated webpages.
            : PHP also offers built-in database integration for several
            : commercial and non-commercial database management systems, so
            : writing a database-enabled webpage with PHP is fairly simple. The
            : most common use of PHP coding is probably as a replacement for CGI
            : scripts.
            :
            : The php package contains the module which adds support for the PHP
            : language to Apache HTTP Server.

Available Packages
Name        : php
Arch        : x86_64
Version     : 5.5.17
Release     : 2.el6.remi
Size        : 2.6 M
Repo        : remi-php55
Summary     : PHP scripting language for creating dynamic web sites
URL         : http://www.php.net/
License     : PHP and Zend and BSD
Description : PHP is an HTML-embedded scripting language. PHP attempts to make
            : it easy for developers to write dynamically generated web pages.
            : PHP also offers built-in database integration for several
            : commercial and non-commercial database management systems, so
            : writing a database-enabled webpage with PHP is fairly simple. The
            : most common use of PHP coding is probably as a replacement for CGI
            : scripts.
            :
            : The php package contains the module (often referred to as mod_php)
            : which adds support for the PHP language to Apache HTTP Server.

これでちゃんとphp5.5.17がインストール可能であることが分かる。なおyum info php --enablerepo=remiで標準remiリポジトリのみを確認するとPHP5.4.33が更新可能となっていた。

一応yum check-updateで更新予定のパッケージ一覧を確認してみる。

$ sudo yum check-update --enablerepo=remi-php55,remi

mysql.x86_64                         5.5.40-1.el6.remi                remi
mysql-libs.x86_64                    5.5.40-1.el6.remi                remi
mysql-server.x86_64                  5.5.40-1.el6.remi                remi
php.x86_64                           5.5.17-2.el6.remi                remi-php55
php-bcmath.x86_64                    5.5.17-2.el6.remi                remi-php55
php-cli.x86_64                       5.5.17-2.el6.remi                remi-php55
php-common.x86_64                    5.5.17-2.el6.remi                remi-php55
php-devel.x86_64                     5.5.17-2.el6.remi                remi-php55
php-eaccelerator.x86_64              1:1.0-0.6.git42067ac.el6.remi    remi-php55
php-gd.x86_64                        5.5.17-2.el6.remi                remi-php55
php-mbstring.x86_64                  5.5.17-2.el6.remi                remi-php55
php-mcrypt.x86_64                    5.5.17-2.el6.remi                remi-php55
php-mysql.x86_64                     5.4.33-2.el6.remi                remi
php-pdo.x86_64                       5.5.17-2.el6.remi                remi-php55
php-pear.noarch                      1:1.9.5-3.el6.remi               remi
php-php-gettext.noarch               1.0.11-4.el6.remi                remi
php-tcpdf.noarch                     6.0.093-1.el6.remi               remi
php-tcpdf-dejavu-sans-fonts.noarch   6.0.093-1.el6.remi               remi
php-tidy.x86_64                      5.5.17-2.el6.remi                remi-php55
php-xml.x86_64                       5.5.17-2.el6.remi                remi-php55
phpMyAdmin.noarch                    4.2.9-1.el6.remi                 remi
Obsoleting Packages
php-mysqlnd.x86_64                   5.5.17-2.el6.remi                remi-php55
    php-mysql.x86_64                 5.3.3-27.el6_5.1                 @updates

というわけでようやくphp5.3.3からphp5.5.17にアップデートを行う。

$ sudo yum update php --enablerepo=remi-php55,remi

Error: Package: php-mysql-5.4.33-2.el6.remi.x86_64 (remi)
           Requires: php-pdo(x86-64) = 5.4.33-2.el6.remi
           Removing: php-pdo-5.3.3-27.el6_5.1.x86_64 (@updates)
               php-pdo(x86-64) = 5.3.3-27.el6_5.1
           Updated By: php-pdo-5.5.17-2.el6.remi.x86_64 (remi-php55)
               php-pdo(x86-64) = 5.5.17-2.el6.remi
           Available: php-pdo-5.4.33-1.el6.remi.x86_64 (remi)
               php-pdo(x86-64) = 5.4.33-1.el6.remi
           Available: php-pdo-5.4.33-2.el6.remi.x86_64 (remi)
               php-pdo(x86-64) = 5.4.33-2.el6.remi
           Available: php-pdo-5.5.17-1.el6.remi.x86_64 (remi-php55)
               php-pdo(x86-64) = 5.5.17-1.el6.remi
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

うまくいかない。もちろんphp -vもPHP5.3.3のまま。ここらへんで投げ出したくなるも、エスパーの力でその昔入れたeAcceleratorが原因なんじゃないかと推測。根拠もないままphp-eacceleratorを削除して再度PHPアップデートを試みる。

$ sudo yum remove php-eaccelerator

$ sudo yum update php --enablerepo=remi-php55,remi

Error: Package: php-mysql-5.4.33-2.el6.remi.x86_64 (remi)
           Requires: php-pdo(x86-64) = 5.4.33-2.el6.remi
           Removing: php-pdo-5.3.3-27.el6_5.1.x86_64 (@updates)
               php-pdo(x86-64) = 5.3.3-27.el6_5.1
           Updated By: php-pdo-5.5.17-2.el6.remi.x86_64 (remi-php55)
               php-pdo(x86-64) = 5.5.17-2.el6.remi
           Available: php-pdo-5.4.33-1.el6.remi.x86_64 (remi)
               php-pdo(x86-64) = 5.4.33-1.el6.remi
           Available: php-pdo-5.4.33-2.el6.remi.x86_64 (remi)
               php-pdo(x86-64) = 5.4.33-2.el6.remi
           Available: php-pdo-5.5.17-1.el6.remi.x86_64 (remi-php55)
               php-pdo(x86-64) = 5.5.17-1.el6.remi
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

うまくいかない。たぶんこの最後あたりにかいてある英文メッセージに重要な情報書いてあるのかもしれないけど読む気力この時点ですでになし。ここで更にエスパーのひらめきがあったのだが、もしかしたらphp5.3系からphp5.5系には直接アップデートできないのかもしれない???一度php5.4系へアップデートをする必要がある????
そこで標準remiリポジトリのみを使ってphp5.4系にアップデートを試みた。

$ sudo yum update php --enablerepo=remi

...
Dependency Updated:
  mysql.x86_64 0:5.5.40-1.el6.remi           mysql-libs.x86_64 0:5.5.40-1.el6.remi
  mysql-server.x86_64 0:5.5.40-1.el6.remi    php-bcmath.x86_64 0:5.4.33-2.el6.remi
  php-cli.x86_64 0:5.4.33-2.el6.remi         php-common.x86_64 0:5.4.33-2.el6.remi
  php-devel.x86_64 0:5.4.33-2.el6.remi       php-gd.x86_64 0:5.4.33-2.el6.remi
  php-mbstring.x86_64 0:5.4.33-2.el6.remi    php-mcrypt.x86_64 0:5.4.33-2.el6.remi
  php-mysql.x86_64 0:5.4.33-2.el6.remi       php-pdo.x86_64 0:5.4.33-2.el6.remi
  php-tidy.x86_64 0:5.4.33-2.el6.remi        php-xml.x86_64 0:5.4.33-2.el6.remi

Complete!


$ php -v

PHP 5.4.33 (cli) (built: Sep 20 2014 16:20:03)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

うおおおよくわかんないけどうまくいった。つまり今度こそは…

$ sudo yum update php --enablerepo=remi-php55,remi

Installed:
  php-mysqlnd.x86_64 0:5.5.17-2.el6.remi

Dependency Installed:
  gd-last.x86_64 0:2.1.0-3.el6.remi
  libvpx.x86_64 0:1.3.0-0.el6.remi
  php-channel-phpseclib.noarch 0:1.3-1.el6.remi
  php-gmp.x86_64 0:5.5.17-2.el6.remi
  php-pecl-jsonc.x86_64 0:1.3.6-1.el6.remi.5.5.1
  php-pecl-jsonc-devel.x86_64 0:1.3.6-1.el6.remi.5.5.1
  php-pecl-zip.x86_64 0:1.12.4-1.el6.remi.5.5
  php-phpseclib-crypt-aes.noarch 0:0.3.8-1.el6.remi
  php-phpseclib-crypt-base.noarch 0:0.3.8-1.el6.remi
  php-phpseclib-crypt-rijndael.noarch 0:0.3.8-1.el6.remi
  php-recode.x86_64 0:5.5.17-2.el6.remi
  recode.x86_64 0:3.6-28.1.el6

Updated:
  php.x86_64 0:5.5.17-2.el6.remi

Dependency Updated:
  php-bcmath.x86_64 0:5.5.17-2.el6.remi    php-cli.x86_64 0:5.5.17-2.el6.remi
  php-common.x86_64 0:5.5.17-2.el6.remi    php-devel.x86_64 0:5.5.17-2.el6.remi
  php-gd.x86_64 0:5.5.17-2.el6.remi        php-mbstring.x86_64 0:5.5.17-2.el6.remi
  php-mcrypt.x86_64 0:5.5.17-2.el6.remi    php-pdo.x86_64 0:5.5.17-2.el6.remi
  php-tidy.x86_64 0:5.5.17-2.el6.remi      php-xml.x86_64 0:5.5.17-2.el6.remi
  phpMyAdmin.noarch 0:4.2.9-1.el6.remi

Replaced:
  php-mysql.x86_64 0:5.4.33-2.el6.remi

Complete!



$ php -v

PHP 5.5.17 (cli) (built: Sep 20 2014 17:12:00)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

半日費やしてようやくPHP5.3.3からPHP5.5.17へのアップデートが完了した。
eAcceleratorに気がついたのは、某ブログのphp5.5アップデート記事で事前にAPCを削除していたため。もしかしたらeAcceleratorもphp5.5に対応してないんじゃないかと思い公式サイトを見たら案の定5.4までしか対応していないようだった(しかも5.4対応版を使用する場合はソースからコンパイルしなきゃいけないめんどい)。


追記

MySQLに問題発生しました。↓