Installing PHP5 and its dependencies on a Godaddy virtual dedicated server
I have recently developed the first version of a book price comparison website, booksmarts.co.uk. It’s fairly simple, but it does depend on the simple XML parser built into PHP5.
I wasn’t sure what version of PHP was already running on my server, so I was hoping that I would just be able to drop the PHP files in and they would work straight away. As is often the case, things turned out to be more complicated than they first appeared to be. This blog entry explains what I did to upgrade PHP and its dependencies. It is primarily a record for myself, but might prove to be useful to other people trying to achieve something similar.
(Note that what follows is the order that the steps actually need to be carried out in, not the ‘try it, find unexpected dependency, install that first’ route I actually took!)
binutils
This step might not be necessary after all, but I did do it and it shouldn’t hurt. Get the latest version of binutils, needed to build the C++ compiler.
su -
mkdir archive <i>(or whatever)</i>
cd archive
wget ftp://ftp.gnu.org/binutils/binutils-2.17.tar.gz
tar -zxvf binutils-2.17.tar.gz
cd binutils-2.17
./configure
make
make install
gcc/C++
wget ftp://mirrors.laffreycomputer.com/pub/gcc.gnu.org/gcc/releases/gcc-4.1.1/gcc-<b>core</b>-4.1.1.tar.bz2
wget ftp://mirrors.laffreycomputer.com/pub/gcc.gnu.org/gcc/releases/gcc-4.1.1/gcc-<b>g++</b>-4.1.1.tar.bz2
tar -jxvf gcc-core-4.1.1.tar.bz2
tar -jxvf gcc-g++-4.1.1.tar.bz2
cd gcc-4.1.1
export CFLAGS=-O0 <i>(turn off optimisation to save memory -- try building without this first)</i>
./configure
make <i>(had to shut down tomcat, which was still running, to free up enough memory for the compilation)</i>
make install
flex
cd ~/archive
wget http://prdownloads.sourceforge.net/flex/flex-2.5.33.tar.gz?use_mirror=superb-west
tar -zxvf flex-2.5.33.tar.gz
cd flex-2.5.33
./configure
make
make install
apache
PHP5 requires apache > 0.0.44, so build latest 2.0.* one [.so extensions aren’t compatible with later ones and I don’t want to rebuild these [in retrospect, I had to do this anyway, so might have been better off with a more recent apache]].
wget http://mirrors.dedipower.com/ftp.apache.org/httpd/httpd-2.0.59.tar.gz
tar -zxvf httpd-2.0.59.tar.gz
cd httpd-2.0.59
./configure --enable-rule=SHARED_CORE
--enable-so
--enable-suexec
--with-suexec-docroot=/home/httpd/vhosts
--with-suexec-caller=apache
--enable-rewrite
--enable-cgi
make
/usr/local/apache2/bin/apachectl stop
make install
libxml
cd ~/archive
wget ftp://ftp.xmlsoft.org/libxml2/libxml2-2.6.27.tar.gz
tar -zxvf libxml2-2.6.27.tar.gz
cd libxml2-2.6.27
./configure
make
make install
ldconfig
PHP (finally!)
cd ~/archive
wget http://uk2.php.net/get/php-5.2.0.tar.gz/from/www.php.net/mirror
tar -zxvf php-5.2.0.tar.gz
cd php-5.2.0
<i>(./configure --help to see options)</i>
./configure --with apxs2=/usr/local/apache2/bin/apxs
--enable-force-cgi-redirect
--enable-discard-path
--with-mysql
--with-pear
make
make install
ldconfig <i>(may not be necessary)</i>
edit /usr/local/apache2/conf/httpd.conf
to use PHP5 instead of PHP4.
Mail, etc. for PHP (i.e. PEAR)
cd ~/archive
lynx -source http://go-pear.org/ | php
pear install --alldeps Mail
[Hack – not the correct way to do this]
mv /usr/local/lib/php /usr/local/lib/php.old
ln -s /usr/share/pear /usr/local/lib/php
[/Hack]
mod_perl
Other sites on the same server use a small amount of perl, so need to update mod_perl.
cd ~/archive
wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
tar -zxvf mod_perl-2.0-current.tar.gz
cd mod_perl-2.0.3
perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
make
make install