先日yum replaceを使ってphpを5.5にするという記事を書きましたが、書きそびれていたことがありました。
phpを対象にyum replaceを行った場合、「Unable to resolve all providers」の警告が出ますが、これは無視して問題ありません。
とりあえず、CentOS6の環境でIUSのレポジトリからインストール済みのphp54をphp55uにreplaceしようとした場合にどうなるかを見てみましょう。以下の方法では余計なごちゃごちゃを表示しないように「-q」オプションを使っていますが、yum replaceの動作に影響を与えるものではありませんのでその点ご留意ください。
# yum -q replace php54 --replace-with=php55u Replacing packages takes time, please be patient... WARNING: Unable to resolve all providers: ['php54-common', 'php54(language)', 'php54(language)(x86-64)', 'php54-api', 'php54-zend-abi', 'php54(api)', 'php54(zend-abi)', 'php54-bz2', 'php54-calendar', 'php54-ctype', 'php54-curl', 'php54-date', 'php54-exif', 'php54-fileinfo', 'php54-pecl-Fileinfo', 'php54-pecl(Fileinfo)', 'php54-ftp', 'p hp54-gettext', 'php54-gmp', 'php54-hash', 'php54-mhash', 'php54-iconv', 'php54-json', 'php54-pecl-json', 'php54-pecl(json)', 'php54-libxml', 'php54-openssl', 'php54-pecl -phar', 'php54-pecl(phar)', 'php54-pcre', 'php54-reflection', 'php54-session', 'php54-shmop', 'php54-simplexml', 'php54-sockets', 'php54-spl', 'php54-tokenizer', 'php54- filter', 'php54-filter(x86-64)', 'php-api', 'php-zend-abi', 'php-pecl-Fileinfo', 'php-pecl(Fileinfo)', 'php-json', 'php-pecl-json', 'php-pecl(json)', 'php-pecl-phar', 'p hp-pecl(phar)', 'php54-zip', 'php54-pecl-zip', 'php-pecl-zip', 'php54-pecl(zip)', 'php-pecl(zip)', 'php54-zlib', 'php54-common', 'php54-common(x86-64)', 'php54-cgi', 'ph p54-pcntl', 'php54-readline', 'php-cli', 'php54-cli', 'php54-cli(x86-64)', 'php54-zts', 'mod_php54', 'php54', 'libphp5.so()(64bit)', 'php54', 'php54(x86-64)', 'php54-pdo ', 'php54-pdo-abi', 'php54-sqlite3', 'php54-pdo_sqlite', 'php54-pdo', 'php54-pdo(x86-64)', 'php54-mysql', 'php54_database', 'php54-mysqli', 'php54-pdo_mysql', 'php54-mys ql', 'php54-mysql(x86-64)', 'php54-mbstring', 'php54-mbstring', 'php54-mbstring(x86-64)', 'php54-mcrypt', 'php54-mcrypt', 'php54-mcrypt(x86-64)', 'php54-xml', 'php-xml', 'php54-dom', 'php54-xsl', 'php54-domxml', 'php54-wddx', 'php54-xmlreader', 'php54-xmlreader(x86-64)', 'php54-xmlwriter', 'php54-xmlwriter(x86-64)', 'php54-xml', 'php54- xml(x86-64)', 'php54-gd', 'php54-gd', 'php54-gd(x86-64)'] This may be normal depending on the package. Continue? [y/N] y ======================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================== Installing: php55u x86_64 5.5.7-1.ius.el6 ius 2.6 M php55u-cli x86_64 5.5.7-1.ius.el6 ius 2.5 M php55u-common x86_64 5.5.7-1.ius.el6 ius 1.1 M php55u-gd x86_64 5.5.7-1.ius.el6 ius 173 k php55u-gmp x86_64 5.5.7-1.ius.el6 ius 52 k php55u-mbstring x86_64 5.5.7-1.ius.el6 ius 967 k php55u-mcrypt x86_64 5.5.7-1.ius.el6 ius 49 k php55u-mysqlnd x86_64 5.5.7-1.ius.el6 ius 271 k php55u-pdo x86_64 5.5.7-1.ius.el6 ius 119 k php55u-pear noarch 1:1.9.4-20.ius.el6 ius 370 k php55u-process x86_64 5.5.7-1.ius.el6 ius 64 k php55u-xml x86_64 5.5.7-1.ius.el6 ius 215 k Removing: php54 x86_64 5.4.22-1.ius.el6 @ius 9.1 M php54-cli x86_64 5.4.22-1.ius.el6 @ius 7.7 M php54-common x86_64 5.4.22-1.ius.el6 @ius 6.9 M php54-gd x86_64 5.4.22-1.ius.el6 @ius 663 k php54-mbstring x86_64 5.4.22-1.ius.el6 @ius 2.5 M php54-mcrypt x86_64 5.4.22-1.ius.el6 @ius 86 k php54-mysql x86_64 5.4.22-1.ius.el6 @ius 452 k php54-pdo x86_64 5.4.22-1.ius.el6 @ius 348 k php54-pear noarch 1:1.9.4-2.ius.el6 @ius 2.2 M php54-xml x86_64 5.4.22-1.ius.el6 @ius 622 k Installing for dependencies: libvpx x86_64 0.9.0-8.el6_0 base 161 k Removing for dependencies: roundcubemail noarch 0.9.5-1.el6 @epel 12 M websvn noarch 2.3.3-2.el6 @epel 787 k Transaction Summary ======================================================================================================================================================================== Install 13 Package(s) Remove 12 Package(s) Is this ok [y/N]: N Exiting on user Command
はい。
今回は試しでやっているので、「N」でキャンセルして終了しています。
WARNING: Unable to resolve all providers:
この警告に関して考慮します。
This may be normal depending on the package.
とあるとおり、「これは対象のパッケージによっては通常の動作です」。続けますか?と聞かれるので、自信をもって「y」としましょう。この警告に関してはこちら(英語)のページに以下の記述があります。
As you can see there is a WARNING that the ‘replace’ operation was unable to resolve all providers. This means that the ‘php53’ package doesn’t provide everything that the ‘php’ packages did. This is normal, and should be expected when upgrading major versions of software.
The yum-plugin-replace is new, and therefore small issues like this will be resolved in the near future as they are discovered.
上記内容を私なりに解釈すると以下の通りになります。
みてわかるとおり”replace”の利用結果として全てのパッケージの提供元を見つけることができないという警告が出ます。これは、”php53″パッケージが”php”パッケージが提供するすべてのパッケージを網羅していないという事を意味しています。これは通常動作で、ソフトウェア(この場合PHP)のメジャーバージョンをアップデートする時には起きると想定される警告です。
yum-plugin-replaceは新しい機能なので、このような小さな問題はありますが近い将来このような問題は解消されるでしょう。
なので、無視して自信と責任をもって「y」しちゃってください。
Installing: と Removing:
ここに列挙されるパッケージは「yum -q replace php54 –replace-with=php55u」によって、つまり、php54からphp55uへの変更においてインストールされるパッケージ、及び削除されるパッケージです。
なんと便利な機能なのでしょう。この機能に関してもこちら(英語)に記載があります。
You will notice that the ‘replace’ plugin determines all the required sub packages that are required to resolve the deps provided by the stock versions package set. Additionally, the plugin will attempt to install any external packages that might need to be replaced as well. For example, the ‘php-pear’ package is not part of the ‘php’ package set. Therefore, it needs to be replaced by ‘php53-pear’ … another example would be with any PECL sub packages that might be installed (assuming the php53-pecl-xxxxxx package is available in IUS).
“replace”が対象となるPHPが依存しているサブパッケージに関しても考慮していることがわかると思います。さらに、replaceプラグインは必要とされるほかのパッケージに関してもインストールを試みます。例えば、”php-pear”パッケージは”php”パッケージセットの一部ではありませんが、”php-pear”パッケージは”php53-pear”パッケージに入れ替えられます。またPECLサブパッケージに関しても”php53-pecl-xxxxx”パッケージがIUSレポジトリに存在する場合は同時にインストールされます。
なんということでしょう!(ビフォアアフ○ー的な驚きww)
わざわざ沢山のパッケージを指定しなくても、根っことなるパッケージをreplaceすればそれに関わるパッケージも入れ替えてくれるなんて、さいこうですね!
Removing for dependencies:
これが気を付けないといけない部分です。上記の例では以下のようになっています。
Removing for dependencies: roundcubemail noarch 0.9.5-1.el6 @epel 12 M websvn noarch 2.3.3-2.el6 @epel 787 k
この場合、単純にreplaceすると、roundcubemailとwebsvnがアンインストールされます。
このような場合選択肢は2つ。
- とにかくreplaceして、そのあとに削除されたパッケージを再インストールする
- こちらの記事を参考に、replaceを使わない方法でphpのバージョンをあげる
どちらがいいかはご自身で判断してください。
以上です!
コメント
さっそく書いたんですね!!
調べてみるとapcはphp5.5に対応しないみたいことも書いてありました。
私自身はapcとopcacheを検証していませんが、opcacheの方がapcより早いと書いてある所も
確認方法は
[redadmin@www ~]$ php -i |grep opcache
opcache.enable => On => On
大掃除して体が筋肉痛になりそ・・・。
早速かきましたよ~
apcuってのがありますけど、こちらで代替が利くような気がします。
(CentOS5.10のWebtaticレポジトリの場合)
php55w-pecl-apcu.i386 : APCu – APC User Cache
あれ?php -i | grep -i opcacheで
Opcode Caching => Disabled
Startup Failed => Opcode Caching is disabled for CLI
となると思ったら、rootだからだったようです。 phpinfoファイルでの確認と一般ユーザーでの確認ができました(・v・)
大掃除ご苦労様です!自分は今日で仕事納めですが大掃除はしれっと参加してませんwwww