CentOS5.2上でのphp5.2.9への更新作業
March 5, 2009 – 11:50 pmZDNetJapanでphp5.29が公開されたことを知り、早速、phpのオフィシャルサイトを覗いてみた。5.2.6のリリース以降、12月の5.2.7,5.2.8、そして今回の5.2.9へと立て続けにバージョンがアップしている。「CentOS 5.2上でPHP 5.2.6にアップグレード」で書いたように、我がサイトがphp5.2.6にアップグレードしたのは昨年の10月だ。それから半年の間に、もう3回もバージョンが上がっている。遅れてはならじと、最新版のphpにアップグレードすることにした。
phpのアップグレードの必要性: わがサイト、いわゆるLAMPをベースに構築を進めようとしている。当然、その基幹パッケージphpを最新版に保つことは、セキュリティの維持を含めて必須の作業だ。今回のように、半年も放っておくというのはいい話ではない。
CentOS5のオフィシャルなRepositoryでは、rpmからのphpの更新作業は行えない。とういことで、前回と同様、フランスのLe RPM de Remiのyum repositoryを使わせてもらって作業することにした。前回の更新作業は比較的簡単に行うことができたが、今回の作業は、てまどることも多かった。なんとか無事作業が終了することができた。簡単に作業記録をメモしておいた。
アップグレードの手順(整理後): 上記したように、今回は、結構大変な更新作業になってしまった。作業記録の詳細を書くまえに、今回の経験をまとめると、こうした手順になるだろうと思ったところを、以下書き下してみた:
(1) yum remove mysql-5.0.45-7.el5
(2) yum –enablerepo=remi update php*
(3) yum update
(4) yum remove dovecot*
(5) yum –enablerepo=remi install dovecot
(6) yum –enablerepo=remi install php-mysql
(7) yum –enablerepo=remi install mysql*
通常の感覚からいったら、(2)の手順からスタートすることになるのだが、これではライブラリの整合性の問題によりTransaction Check Errorがでてしまう。これを避けるために、mysqlのパッケージをremoveするという(1)の手順が必要になる。このあたりが今回の作業を難しくしているところといえるだろう。ライブラリがらみの影響でmysqlとかdovecotも同時に更新する必要が生じたことが作業を複雑にしている。
なお、この更新作業に入る前に必要なRepositoryファイルの作成などについては、前回の「CentOS5.2上でPHP5.2.6にアップグレード」を参考にして欲しい。今回の作業では、前回作成したものをそのまま使用している。
実際の作業記録: 実際の更新作業では、手順(2)から開始しようとした。結果、上に書いたように、Transaction Check Errorにより更新は失敗。Le RPM de Remiのブログサイトのやりとりで同種の問題が議論されていた。このやりとりのなかで、remiのサイト運営者は、Transaction Check Errorに関わる質問に対し、以下の手順を示している:
yum remove mysql-5.0.45-7.el5 yum install --enablerepo=remi mysql yum update --enablerepo=remi
この記述を参考として、我がほうは、ほぼ上記した7ステップからなる手順に沿って更新作業を実施した。
手順(1)の手続きにより、以下のモジュールがremoveされた;
Remove: mysql.i386-5.0.45-7.el5 Dependency Remove: dovecot.i386 0:1.0.7-2.el5 mysql-bench.i386 0:5.0.45-7.el5 mysql-connector-odbc.i386 0:3.51.12-2.2 mysql-devel.i386 0:5.0.45-7.el5 mysql-server.i386 0:5.0.45-7.el5 mysql-test.i386 0:5.0.45-7.el5 perl-DBD-MySQL.i386 0:3.0007-1.fc6 php-mysql.i386 0:5.2.6-1.el5.remi
次に、目的のphpのアップグレード
yum --enablerepo=remi update php*
これにより、一応、目標とするphpのバージョンアップは行うことができた。
手順(3)による全モジュールのアップデート: Le RPM de Remiで示されていた手順で(remiをアクティブにし)全てのモジュールをアップデートする手順が示されていたこと、加えて我がサイトこのところ更新作業をきちんとやっていなかったこともあり、mysqlのインストールを行うのに先立って
yum –enablerepo=remi update
を実行(ここでmysqlのインストールを後にまわしたことの良し悪しは分からない)。ところが、
Error: Missing Dependency: liblzo.so.1 is needed by package mplayer Error: Missing Dependency: libcucul.so.0 is needed by package mplayer
なるエラーでyum updateが失敗。ということで、あまり推奨される話ではないが、mplayerをremoveして、このエラーを回避したのち、yum updateを行う。mplayerについては別に処理することにしておいた。
Dovecotの復旧作業(手順(4)(5)): 手順(1)でRemoveされたdovecotを復旧させておかねばということで、 yum install dovecotを行ったところ
Error: Missing Dependency: libmysqlclient.so.15(libmysqlclient_15) is needed by package dovecot Error: Missing Dependency: libmysqlclient.so.15 is needed by package dovecot
なるエラーが発生。そこで、とりあえず、dovecotを全部removeしたのち(これは必要なかったのかもしれない)、
yum --enablerepo=remi install dovecot
でdovecotを復旧させた。
php-mysqlを復旧(手順6): removeされたphp-mysqlを復旧させるため
yum --enablerepo=remi install php-mysql
mysql関連モジュール全てを復旧(手順7): 同様にremoveされたmysqlを一括して復旧させるため、
yum --enablerepo=remi install mysql*
これにより、手順(1)で欠けたmysql関連のモジュールを一括でinstallした。手順(1)でremoveされたもの以外のモジュールも含めて、この手順(7)の手続きにより以下がinstallされた;
mysql - 5.1.31-1.el5.remi.i386 mysql-devel - 5.1.31-1.el5.remi.i386 lua - 5.1.2-1.el5.i386 perl-DBD-MySQL - 3.0007-1.fc6.i386 mysql-server - 5.1.31-1.el5.remi.i386 mysql-embedded - 5.1.31-1.el5.remi.i386 mysql++ - 3.0.9-1.el5.remi.i386 perl-TermReadKey - 2.30-4.el5.i386 devhelp - 0.12-20.el5.i386 mysql-proxy - 0.5.1-1.el5.i386 mysql-connector-odbc - 3.51.12-2.2.i386 mysql-cluster - 5.1.31-1.el5.remi.i386 mysql++-manuals - 3.0.9-1.el5.remi.i386 mysql-embedded-devel - 5.1.31-1.el5.remi.i386 mysql-test - 5.1.31-1.el5.remi.i386 mysqlreport - 3.5-2.el5.noarch mysql++-devel - 3.0.9-1.el5.remi.i386 mysql-bench - 5.1.31-1.el5.remi.i386 mysqlclient15-devel - 5.0.67-1.el5.remi.i386 mysqltuner - 0.9.8-2.el5.noar
以上の一連の手続きで、目標としたphpのバージョンアップとこの作業に付随するもろもろの処理を無事終了させることができた。phpに加えて、mysql、dovecotについてもバージョンが上った。
更新作業の結果、php.ini、my.cnfなどのconfiguration fileが更新された可能性もあることに注意しながら、serviceの立ち上げ、スケジューリングなどの一連の後処理を行って、全更新作業を完了。
2 Trackback(s)