The latest Long Term Support (LTS) release from Ubuntu has been with us for a bit over a month now, and I love it so far, on my laptop. This is Lucid Lynx 10.04, and will be supported until 2013 on the desktop, and more importantly, until 2015 on the server.
My servers are still on 8.04 though, the previous LTS, for good reason. 10.04 has PHP 5.3. While this is generally a better PHP, it has some compatibility issues with many Drupal, mainly for contributed modules, but some in core as well.
The long term solution to this is to find all PHP 5.3 compatibility issues and fix them in the code. This is a lengthy process though, and will not happen overnight.
So, in the meantime, there are several solutions for running PHP 5.2 on Lucid, some better than others.
In this post, we examine the different approaches, and the merits of each.
Approach 1: Installing Karmic's PHP 5.2 packages
The most common approach is to install Karmic 9.10's PHP 5.2 packages on 10.04. This has been reported to work for many, such as here, here and here.
The detailed instructions were originally posted here, and the following script is a refinement of that approach:
#!/bin/sh # Script to install PHP 5.2 from 9.10 on 10.04 # And pin it so it does not get updated PKGS=`dpkg -l | grep php | awk '{print $2}'` apt-get remove $PKGS sed s/lucid/karmic/g /etc/apt/sources.list | tee /etc/apt/sources.list.d/karmic.list mkdir -p /etc/apt/preferences.d/ for PACKAGE in $PKGS do echo "Package: $PACKAGE Pin: release a=karmic Pin-Priority: 991 " | tee -a /etc/apt/preferences.d/php done apt-get update apt-get install $PKGS
This is not the best solution though for many reasons, the main one is that these packages were compiled against libraries built for 9.10 and not 10.04. There is always a risk of unpredictable things happening when doing such a thing.
It also requires the packages to be "pinned" so no future security updates would be provided, unless 9.10 gets them too.
I also found no easy way to pin with aptitude, rather than with apt-get.
Approach 2: Proper PHP 5.2 packages, compiled for Lucid, installed manually
The fine folk at The Jibe took this one step further and built PHP 5.2 .deb packages for Lucid.
What this approach provides is that the packages are built against Lucid headers, and therefore solves the issue mentioned above.
What this solution suffers from is the lack of a repository. This means that the packages have to be downloaded and installed manually. Also, if you install them directly via the dpkg -i command, there may be unmet dependencies if you have not installed PHP 5.3 previously. This can be overcome by running the gdebi command instead, available in the "gdebi-core" package.
Still, the previous approach is too manual, and there is no way to check automatically for security updates for example.
Approach 3: Proper PHP 5.2 packages, compiled for Lucid, installed from a repository
So, the best solution, is to install from a repository
Ralph Janke's PHP 5.2 repository for Lucid
If you have the package "python-software-properties installed, you can easily add the repository using the command:
add-apt-repository ppa:txwikinger/php5.2
That will install the GPG key for security verification.
If you are using apt-get, then you need to create a file called /etc/apt/preferences.d/php for pinning the versions, so they remain at 5.2 and don't get upgraded to 5.3 when you run apt-get to upgrade your installation.
Put this in the file:
Package: libapache2-mod-php5 Pin: version 5.2.10* Pin-Priority: 991 Package: libapache2-mod-php5filter Pin: version 5.2.10* Pin-Priority: 991 Package: php-pear Pin: version 5.2.10* Pin-Priority: 991 Package: php5 Pin: version 5.2.10* Pin-Priority: 991 Package: php5-cgi Pin: version 5.2.10* Pin-Priority: 991 Package: php5-cli Pin: version 5.2.10* Pin-Priority: 991 Package: php5-common Pin: version 5.2.10* Pin-Priority: 991 Package: php5-curl Pin: version 5.2.10* Pin-Priority: 991 Package: php5-dbg Pin: version 5.2.10* Pin-Priority: 991 Package: php5-dev Pin: version 5.2.10* Pin-Priority: 991 Package: php5-gd Pin: version 5.2.10* Pin-Priority: 991 Package: php5-gmp Pin: version 5.2.10* Pin-Priority: 991 Package: php5-ldap Pin: version 5.2.10* Pin-Priority: 991 Package: php5-mhash Pin: version 5.2.10* Pin-Priority: 991 Package: php5-mysql Pin: version 5.2.10* Pin-Priority: 991 Package: php5-odbc Pin: version 5.2.10* Pin-Priority: 991 Package: php5-pgsql Pin: version 5.2.10* Pin-Priority: 991 Package: php5-pspell Pin: version 5.2.10* Pin-Priority: 991 Package: php5-recode Pin: version 5.2.10* Pin-Priority: 991 Package: php5-snmp Pin: version 5.2.10* Pin-Priority: 991 Package: php5-sqlite Pin: version 5.2.10* Pin-Priority: 991 Package: php5-sybase Pin: version 5.2.10* Pin-Priority: 991 Package: php5-tidy Pin: version 5.2.10* Pin-Priority: 991 Package: php5-xmlrpc Pin: version 5.2.10* Pin-Priority: 991 Package: php5-xsl Pin: version 5.2.10* Pin-Priority: 991
Then you do "apt-get update" and the right packages are either pulled in due to installing them directly or indirectly through dependencies.
That works fine for apt-get.
If you are using aptitude instead of apt-get, then skip the above pinning file, and tell aptitude to hold the version of PHP to what you have installed.
aptitude hold `dpkg -l | grep php | awk '{print $2}'`
Alternatively, you can do:
for PKG in `dpkg -l | grep php | awk '{print $2}'` do echo "$PKG hold" | dpkg --set-selections done
I am not sure if the above two commands are enough to stop aptitude from upgrading the packages to 5.3 if a new release comes by. If you find a better way to let aptitude handle this, please post it below.
Resources
Some further links that you may want to check:
- Slicehost forum post on the topic of PHP 5.2 downgrade, since PHP 5.3 breaks many applications, such as Drupal, MediaWiki and others.
- Another article on Lucid 10.04 for web development. Touches on the PHP downgrade topic.
Comments
Khalid
php5-mcrypt now available
Thu, 2010/07/22 - 10:01Ralph has made php5-mcrypt available on the PPA, so that should work fine now.
As for php5-imap, it is more complicated because of dependencies. He will work on it as his time permits.
Visitor (not verified)
mcrypt is not working
Wed, 2010/08/04 - 20:52mcrypt is not working yet.
Asking for the same dependencies.
Visitor (not verified)
php5-mcrypt and php5-imap
Sat, 2010/09/04 - 22:33I have finally managed to fix the problems with the installation of php5-mcrypt and php5-imap from my repository. However, it needs to be noted that the versions of those packages are 5.2.6, hence the pinning in the /etc/apt/preferences file must be done accordingly! ( original post)
Visitor (not verified)
xdebug
Wed, 2010/09/08 - 08:42Hi guys, thanks for the great repo.
could you add some time xdebug? it depends on a newer phpapi version and doesnt install :(
thanks so much
Tibor
Khalid
Use pecl
Wed, 2010/09/08 - 09:38You can install XDebug directly from pecl
This command should do it,
pecl install xdebug
More instructions in our other article: Setting up XDebug/DBGp on Debian/Ubuntu. Although it was written for older versions, it should work with a few modifications.
Kevin K. (not verified)
When I use Drush, I now get
Mon, 2010/10/04 - 21:47When I use Drush, I now get this error (and approximately the same thing in phpmyadmin):
PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with module API=20090626, debug=0, thread-safety=0
PHP compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
in Unknown on line 0
PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with module API=20090626, debug=0, thread-safety=0
PHP compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
in Unknown on line 0
Any ideas why anyone?
Kevin K. (not verified)
Ran into a situation where I
Wed, 2010/10/13 - 07:46Ran into a situation where I HAD to get mcrypt working properly and what do you know, installing the karmic package did the trick...until the Lucid version's fixed, I guess that is the way to go.
adrian.gibanel.... (not verified)
preferences pinning example
Fri, 2011/09/16 - 07:04For those that you do not understand what txwikinger is talking about (as he neither does not put an example in the link) here you are:
Package: php5-imap
Pin: version 5.2.6*
Pin-Priority: 991
Package: php5-mcrypt
Pin: version 5.2.6*
Pin-Priority: 991
It lets me install both packages from his repository.
I am not sure if it is actually needed but I have run:
apt-get update
after doing the change.
Adrian Gibanel
IT Manager
Visitor (not verified)
Mcrypt still not working, unmet dependencies
Tue, 2010/08/10 - 11:30Ralph seems to have added the php5-mcrypt package to the PPA but it is not working
See following errors when installing php5-imap php5-mcrypt
The following packages have unmet dependencies:
php5-imap: Depends: phpapi-20090626+lfs
E: Broken packages
I cannot install
Visitor (not verified)
"apt-get update" did not installed php5.2
Wed, 2010/07/14 - 20:39"apt-get update" did not installed php5.2
I have the package "python-software-properties" installed
after "add-apt-repository ppa:txwikinger/php5.2" I got :
robson@robson-desktop:~$ sudo add-apt-repository ppa:txwikinger/php5.2
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv F91BF66D1CA9C138944C09AF13C360CC9CC59506
gpg: requesting key 9CC59506 from hkp server keyserver.ubuntu.com
gpg: key 9CC59506: "Launchpad PPA for Ralph Janke" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
Then I created the php file on /etc/apt/preferences.d/php.
And then after "apt-get update" I got :
Hit http://br.archive.ubuntu.com lucid Release.gpg
Ign http://br.archive.ubuntu.com/ubuntu/ lucid/main Translation-en_US
Ign http://br.archive.ubuntu.com/ubuntu/ lucid/restricted Translation-en_US
Ign http://br.archive.ubuntu.com/ubuntu/ lucid/universe Translation-en_US
Ign http://br.archive.ubuntu.com/ubuntu/ lucid/multiverse Translation-en_US
Hit http://br.archive.ubuntu.com lucid-updates Release.gpg
Ign http://br.archive.ubuntu.com/ubuntu/ lucid-updates/main Translation-en_US
Ign http://br.archive.ubuntu.com/ubuntu/ lucid-updates/restricted Translation-en_US
Ign http://br.archive.ubuntu.com/ubuntu/ lucid-updates/universe Translation-en_US
Ign http://br.archive.ubuntu.com/ubuntu/ lucid-updates/multiverse Translation-en_US
Hit http://br.archive.ubuntu.com lucid Release
Hit http://br.archive.ubuntu.com lucid-updates Release
Hit http://br.archive.ubuntu.com lucid/main Packages
Hit http://br.archive.ubuntu.com lucid/restricted Packages
Hit http://br.archive.ubuntu.com lucid/main Sources
Hit http://br.archive.ubuntu.com lucid/restricted Sources
Hit http://br.archive.ubuntu.com lucid/universe Packages
Hit http://br.archive.ubuntu.com lucid/universe Sources
Hit http://br.archive.ubuntu.com lucid/multiverse Packages
Hit http://br.archive.ubuntu.com lucid/multiverse Sources
Hit http://br.archive.ubuntu.com lucid-updates/main Packages
Hit http://br.archive.ubuntu.com lucid-updates/restricted Packages
Hit http://br.archive.ubuntu.com lucid-updates/main Sources
Hit http://br.archive.ubuntu.com lucid-updates/restricted Sources
Hit http://br.archive.ubuntu.com lucid-updates/universe Packages
Hit http://br.archive.ubuntu.com lucid-updates/universe Sources
Hit http://br.archive.ubuntu.com lucid-updates/multiverse Packages
Hit http://br.archive.ubuntu.com lucid-updates/multiverse Sources
Hit http://security.ubuntu.com lucid-security Release.gpg
Ign http://security.ubuntu.com/ubuntu/ lucid-security/main Translation-en_US
Hit http://ppa.launchpad.net lucid Release.gpg
Ign http://ppa.launchpad.net/txwikinger/php5.2/ubuntu/ lucid/main Translation-en_US
Hit http://archive.canonical.com lucid Release.gpg
Ign http://archive.canonical.com/ubuntu/ lucid/partner Translation-en_US
Ign http://security.ubuntu.com/ubuntu/ lucid-security/restricted Translation-en_US
Ign http://security.ubuntu.com/ubuntu/ lucid-security/universe Translation-en_US
Ign http://security.ubuntu.com/ubuntu/ lucid-security/multiverse Translation-en_US
Hit http://security.ubuntu.com lucid-security Release
Hit http://ppa.launchpad.net lucid Release
Hit http://archive.canonical.com lucid Release
Hit http://security.ubuntu.com lucid-security/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://archive.canonical.com lucid/partner Packages
Hit http://security.ubuntu.com lucid-security/restricted Packages
Hit http://security.ubuntu.com lucid-security/main Sources
Hit http://security.ubuntu.com lucid-security/restricted Sources
Hit http://security.ubuntu.com lucid-security/universe Packages
Hit http://security.ubuntu.com lucid-security/universe Sources
Hit http://archive.canonical.com lucid/partner Sources
Hit http://security.ubuntu.com lucid-security/multiverse Packages
Hit http://security.ubuntu.com lucid-security/multiverse Sources
Reading package lists... Done
After this I restarted Apache and tried a test.php page, and the localhost gave no answer.
Did I miss something ? I'm new to Linux and this is my first LAMP instalation on Linux.
Pages