とあるサーバにて必要にせまられてPHPのバージョンを5.5以上にあげることになりました。手順をまとめておこうと思います。
前提条件として、OSが「CentOS release 6.7 (Final)」、インストール済みyumリポジトリ「epel」の環境で作業しています。
PHPのバージョンを何にするか、を検討しますが、2016年1月現在、7.0系が最新のようですが、ちょっとバージョンを上げ過ぎな気がするので、5.x系の最新である5.6系にすることにしました。
検索してみると、CentOSにyumでアップグレードするにはremiのリポジトリを利用するようです。どのrpmを使えばいいのか確認するために、本家のサイトを見てみます。
すると、左に「Configuration wizard」というメニューがあるので、ここにアクセスします。
ここで、OS、PHPのバージョン、インストールタイプを選択すると、手順が表示されます。
僕の場合にはそれぞれ、CentOS 6、PHP 5.6、Singleを選択しました。
この後は基本的にはこの手順にそってアップグレードしていきます。
それでは実際に実行したコマンドを紹介して行きます。ここからは画像のない色さびしい記事になります…
リポジトリのインストール状態の確認
まずはインストールされているリポジトリをチェックします。
yum repolist all
Remiはインストールされていませんでしたが、EPELはインストール済みでした。
また、どうしてそうしたのかは忘れてしまいましたが、EPELがenabledになっていたので、明示的に使うようにdisabledに変更しておきます。
yum-config-manager --disable epel
公式サイトのインストラクションでは、enabled前提っぽい書き方になっています。オプションでenabledにしても構わないので、ここは好みや運用方針で変更して構わないと思います。
リポジトリのインストール
今回はRemiのみインストールすることになります(EPELがインストール済みだったので)。
yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm
php関連のインストール状況チェック
インストール済みのphp関連のパッケージをもらさずアップグレードしたいのでチェックします。
rpm -qa | grep php
結果は以下のとおりでした。
php-mysql-5.3.3-46.el6_6.x86_64
php-bcmath-5.3.3-46.el6_6.x86_64
phpldapadmin-1.2.3-1.el6.noarch
php-process-5.3.3-46.el6_6.x86_64
php-ldap-5.3.3-46.el6_6.x86_64
php-php-gettext-1.0.11-12.el6.noarch
php-5.3.3-46.el6_6.x86_64
php-mbstring-5.3.3-46.el6_6.x86_64
php-gd-5.3.3-46.el6_6.x86_64
php-tcpdf-dejavu-sans-fonts-6.2.11-1.el6.noarch
php-mcrypt-5.3.3-4.el6.x86_64
php-cli-5.3.3-46.el6_6.x86_64
php-devel-5.3.3-46.el6_6.x86_64
php-tidy-5.3.3-46.el6_6.x86_64
phpMyAdmin-4.0.10.12-1.el6.noarch
php-common-5.3.3-46.el6_6.x86_64
php-xml-5.3.3-46.el6_6.x86_64
php-pdo-5.3.3-46.el6_6.x86_64
php-imap-5.3.3-46.el6_6.x86_64
php-tcpdf-6.2.11-1.el6.noarch
php-pear-1.9.4-4.el6.noarch
アップグレードするパッケージリストを作成
上の結果から、スペースで区切ってパッケージリストを生成しておきます。
php-mysql php-bcmath phpldapadmin php-process php-ldap php-php-gettext php php-mbstring php-gd php-tcpdf-dejavu-sans-fonts php-mcrypt php-cli php-devel php-tidy phpMyAdmin php-common php-xml php-pdo php-imap php-tcpdf php-pear
拡張リポジトリを使ってyumのアップデート
remi、remi-php56n、epelを使ってyumのアップデートを実行します。
yum update php-mysql php-bcmath phpldapadmin php-process php-ldap php-php-gettext php php-mbstring php-gd php-tcpdf-dejavu-sans-fonts php-mcrypt php-cli php-devel php-tidy phpMyAdmin php-common php-xml php-pdo php-imap php-tcpdf php-pear --enablerepo=epel,remi,remi-php56
すると対象パッケージがこんな感じで出てきますので、インストールします。
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
php-mysqlnd x86_64 5.6.16-1.el6.remi remi-php56 273 k
replacing php-mysql.x86_64 5.3.3-46.el6_6
Updating:
php x86_64 5.6.16-1.el6.remi remi-php56 2.7 M
php-bcmath x86_64 5.6.16-1.el6.remi remi-php56 55 k
php-cli x86_64 5.6.16-1.el6.remi remi-php56 3.9 M
php-common x86_64 5.6.16-1.el6.remi remi-php56 1.1 M
php-devel x86_64 5.6.16-1.el6.remi remi-php56 1.2 M
php-gd x86_64 5.6.16-1.el6.remi remi-php56 75 k
php-imap x86_64 5.6.16-1.el6.remi remi-php56 74 k
php-ldap x86_64 5.6.16-1.el6.remi remi-php56 58 k
php-mbstring x86_64 5.6.16-1.el6.remi remi-php56 965 k
php-mcrypt x86_64 5.6.16-1.el6.remi remi-php56 46 k
php-pdo x86_64 5.6.16-1.el6.remi remi-php56 116 k
php-pear noarch 1:1.10.1-1.el6.remi remi 363 k
php-php-gettext noarch 1.0.11-12.el6.remi remi 20 k
php-process x86_64 5.6.16-1.el6.remi remi-php56 60 k
php-tcpdf noarch 6.2.12-1.el6.remi remi 2.8 M
php-tcpdf-dejavu-sans-fonts noarch 6.2.12-1.el6.remi remi 315 k
php-tidy x86_64 5.6.16-1.el6.remi remi-php56 50 k
php-xml x86_64 5.6.16-1.el6.remi remi-php56 213 k
phpMyAdmin noarch 4.4.15.2-1.el6.remi remi 4.7 M
Installing for dependencies:
gd-last x86_64 2.1.1-2.el6.remi remi 135 k
libvpx x86_64 1.3.0-5.el6_5 base 486 k
libzip-last x86_64 1.0.1-1.el6.remi remi 40 k
php-gmp x86_64 5.6.16-1.el6.remi remi-php56 55 k
php-pecl-jsonc x86_64 1.3.9-1.el6.remi.5.6 remi-php56 50 k
php-pecl-jsonc-devel x86_64 1.3.9-1.el6.remi.5.6 remi-php56 30 k
php-pecl-zip x86_64 1.13.1-1.el6.remi.5.6 remi-php56 52 k
php-phpseclib noarch 2.0.0-4.el6.remi remi 202 k
php-recode x86_64 5.6.16-1.el6.remi remi-php56 32 k
php-symfony-class-loader noarch 2.7.8-1.el6.remi remi 22 k
php-symfony-common noarch 2.7.8-1.el6.remi remi 100 k
recode x86_64 3.6-28.1.el6 base 712 k
t1lib x86_64 5.1.2-6.el6_2.1 base 160 k
Transaction Summary
================================================================================
Install 14 Package(s)
Upgrade 19 Package(s)
Total download size: 21 M
インストール後の確認
Remi公式サイトの最後の手順の動作確認を実行します。
php --version
すると、
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/ssh2.so' - /usr/lib64/php/modules/ssh2.so: undefined symbol: php_checkuid in Unknown on line 0
PHP 5.6.16 (cli) (built: Nov 26 2015 08:01:30)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
ssh2.soでエラーが…もうちょっと追加作業が発生しました。
ssh2でエラーへの対処
検索したところ、ssh2の再インストールで解決しそうです。
参考にしたページはこちら、
ssh2.soのソースを取得します。
wget http://pecl.php.net/get/ssh2
ssh2というファイルがあると思います。実は、wgetする前に、ブラウザから上記ファイルをダウンロードしてまして、その時にファイル名が実際には「ssh2-0.12.tgz」ということは知っていましたので、気持ちの問題ですが、リネームしておきます。
mv ssh2 ssh2-0.12.tgz
そして解凍。
tar -zxvf ssh2-0.12.tgz
後はビルドするのみ。
cd ssh2-0.12
/usr/bin/phpize
./configure --with-ssh2 --with-php-config=/usr/bin/php-config
make
make install
結果は…
Installing shared extensions: /usr/lib64/php/modules/
うまくいったっぽい。
再度、動作確認コマンドを実行します。
php --version
php --modules
エラーが出なければPHPのアップグレードは完了です。Apacheを再起動しましょう。
/etc/init.d/httpd restart
おつかれさまでした。