using ius repo to update php on rhel 5

The “IUS” in the IUS Community Project stands for “In Line with Upstream”. It grew out of the need by Rackspace Hosting for newer versions of some Red Hat Enterprise Linux (RHEL) packages. I’ve been testing it as a possible source for php 5.2.3 or later to support a new MediaWiki deployment on RHEL 5. My results after the jump.

Getting the IUS repo up and running is pretty straightforward. One important point to emphasize is that IUS is designed to work with the upstream product and EPEL repos. When using IUS, be sure that you’ve also got EPEL enabled.

In my testing I found the yum replace command to be the easiest and most reliable way to make wholesale updates to packages and package sets. This is an add-on capability provided by the yum-plugin-replace package from the IUS repo. Note: yum-plugin-replace is not installed by default on Red Hat and its clones, you need to be configured to use the IUS repo and then do a “yum install yum-plugin-replace” to get this feature.

For example, on one machine I wanted to replace the shipping php version for RHEL 5, 5.1.6, with the newer 5.2.17 version from IUS (this was a dependency to install the latest mediawiki distro). So I ran:

yum replace php --replace-with php52

My initial try failed because of an EPEL package that conflicted with the newer ones, php-pecl-json. The solution was to temporarily remove the offending package and re-run the replace command. If I really need it I can always reinstall “the old fashioned way” using pecl.

If you see an error like this:

WARNING: Unable to resolve all providers: ['config(php-common)', 'dbase.so()(64bit)', 'php-dbase',
'config(php-pdo)', 'php-pcntl', 'config(php-mysql)', 
'config(php-pgsql)', 'config(php-ldap)', 'config(php)',
'config(php-mbstring)', 'config(php-gd)']

Just enter ‘y’ to continue.

Pay careful attention to the packages removed and added. These will be summarized when the command completes. For example in my case:

Removed:
  php.x86_64 0:5.1.6-27.el5_5.3            php-cli.x86_64 0:5.1.6-27.el5_5.3     php-common.x86_64 0:5.1.6-27.el5_5.3  
  php-devel.x86_64 0:5.1.6-27.el5_5.3      php-gd.x86_64 0:5.1.6-27.el5_5.3      php-ldap.x86_64 0:5.1.6-27.el5_5.3    
  php-mbstring.x86_64 0:5.1.6-27.el5_5.3   php-mysql.x86_64 0:5.1.6-27.el5_5.3   php-pdo.x86_64 0:5.1.6-27.el5_5.3     
  php-pear.noarch 1:1.4.9-6.el5            php-pgsql.x86_64 0:5.1.6-27.el5_5.3  

Installed:
  php52.x86_64 0:5.2.17-1.ius.el5                             php52-cli.x86_64 0:5.2.17-1.ius.el5                     
  php52-common.x86_64 0:5.2.17-1.ius.el5                      php52-devel.x86_64 0:5.2.17-1.ius.el5                   
  php52-gd.x86_64 0:5.2.17-1.ius.el5                          php52-ldap.x86_64 0:5.2.17-1.ius.el5                    
  php52-mbstring.x86_64 0:5.2.17-1.ius.el5                    php52-mssql.x86_64 0:5.2.17-1.ius.el5                   
  php52-mysql.x86_64 0:5.2.17-1.ius.el5                       php52-pdo.x86_64 0:5.2.17-1.ius.el5                     
  php52-pear.noarch 1:1.9.4-1.ius.el5                         php52-pgsql.x86_64 0:5.2.17-1.ius.el5                   

Dependency Installed:
  freetds.x86_64 0:0.64-11.el5.centos                                                                                  

Complete!

Now in my case I has so much fun using yum replace that I decided to up the ante and move up from php52 to php53u (5.3.6), the latest stable release IUS has for RHEL 5 (because, after all, I get paid to know what will happen if someone tries it).

yum replace php52 --replace-with php53u

Some interesting (and unexpected) results from that operation bear highlighting here:

Removed:
  php52.x86_64 0:5.2.17-1.ius.el5                             php52-cli.x86_64 0:5.2.17-1.ius.el5                     
  php52-common.x86_64 0:5.2.17-1.ius.el5                      php52-devel.x86_64 0:5.2.17-1.ius.el5                   
  php52-gd.x86_64 0:5.2.17-1.ius.el5                          php52-ldap.x86_64 0:5.2.17-1.ius.el5                    
  php52-mbstring.x86_64 0:5.2.17-1.ius.el5                    php52-mssql.x86_64 0:5.2.17-1.ius.el5                   
  php52-mysql.x86_64 0:5.2.17-1.ius.el5                       php52-pdo.x86_64 0:5.2.17-1.ius.el5                     
  php52-pear.noarch 1:1.9.4-1.ius.el5                         php52-pgsql.x86_64 0:5.2.17-1.ius.el5                   

Installed:
  php53u.x86_64 0:5.3.6-4.ius.el5                            php53u-cli.x86_64 0:5.3.6-4.ius.el5                      
  php53u-common.x86_64 0:5.3.6-4.ius.el5                     php53u-devel.x86_64 0:5.3.6-4.ius.el5                    
  php53u-gd.x86_64 0:5.3.6-4.ius.el5                         php53u-ldap.x86_64 0:5.3.6-4.ius.el5                     
  php53u-mbstring.x86_64 0:5.3.6-4.ius.el5                   php53u-mssql.x86_64 0:5.3.6-4.ius.el5                    
  php53u-mysql.x86_64 0:5.3.6-4.ius.el5                      php53u-odbc.x86_64 0:5.3.6-4.ius.el5                     
  php53u-pdo.x86_64 0:5.3.6-4.ius.el5                        php53u-pear.noarch 1:1.9.4-2.ius.el5                     
  php53u-pgsql.x86_64 0:5.3.6-4.ius.el5                      php53u-process.x86_64 0:5.3.6-4.ius.el5                  
  php53u-pspell.x86_64 0:5.3.6-4.ius.el5                    

Dependency Installed:
  libedit.x86_64 0:20090923-3.0_1.el5.rf                         t1lib.x86_64 0:5.1.2-1.el5.rf               

(libedit is a replacement for GNU readline used by a variety of other packages, and t1lib is used for generating font bitmaps — both come from the rpmforge repo)

Oh, and what about json support? Turns out it is built in to 5.3.6 and so doesn’t need to be added via pecl.