Today I successfully learned how to compile and run multiple custom php installations for a DreamHost account, and to get it working I came upon a simple shell script that I made a couple changes to.
This script downloads the correct files, php extensions, and source code that you will need to get a custom php5 environment set up on DH. Its a rather dangerous file though if you don't know what you are doing, because compiling your own custom php-cgi for your web sites isn't exactly a common thing. This file will delete a couple of your directories if you aren't careful, I just posted it here because I enjoyed hacking this out and this is a pretty cool example of some of the things you can do with the unix shell.
Its fun to rotate between languages like that, although shell programming isn't exactly the most exciting thing compared to python, ruby, and other great Object->Oriented languages taking over. But they do all run in the shell :)
These are alternative PHP 5 install scripts created by Charles Wiltgen, who created them to work around problems he was having with the "main" PHP 5 install script.
Discussed in more detail on the DreamHost Customer Wiki.
Two changes I made were adding some functionality to the code with these two tiny gunctions, one downloads compressed files, the other decompresses them.
function aa_unpack () { # compressed, tar and gzip files to DISTDIR if [ -f $DISTDIR/$1* ] ; then echo Extracting "$1"; zcat ${DISTDIR}/$1* | tar -xvf - &>/dev/null; echo Done.; echo; wait fi } function askapache_grab () { #saves file to SRCDIR echo `basename $1` curl -L --retry 20 --max-time 1800 --retry-delay 30 -# -f --max-redirs 4 --remote-name "$1" }
#!/bin/sh # Version 0.6, 2007-12-16 # # - Updated 2007-12-16 by AskApache (www.askapache.com) # - Implemented functions to fetch the URI and decompress it # - Added a couple more error-checks # - Replaced wget with cURL # - Added more to help keep it from getting killed # - Updated to php-5.2.3, curl-7.17.1, freetype-2.3.5 # - Updated 2007-01-15 by Charles Wiltgen (charles@wiltgen.net) # - Make "nicer" to help keep it from getting killed by DreamHost # - Make less verbose to keep signal-to-noise level high # - Updated 2006-12-25 by Carl McDade (hiveminds.co.uk) # - Allow memory limit and freetype # Abort on any errors set -e # The domain in which to install the PHP CGI script. export DOMAIN="askapache.com" # Where do you want all this stuff built? I'd recommend picking a local filesystem. # ***Don't pick a directory that already exists!*** SRCDIR=${HOME}/source # And where should it be installed? INSTALLDIR=${HOME}/php5 # Set DISTDIR to somewhere persistent, if you plan to muck around with this # script and run it several times! DISTDIR=${HOME}/dist # Update version information here. PHP5="php-5.2.3" LIBICONV="libiconv-1.11" LIBMCRYPT="libmcrypt-2.5.7" LIBXML2="libxml2-2.6.27" LIBXSLT="libxslt-1.1.18" MHASH="mhash-0.9.7.1" ZLIB="zlib-1.2.3" CURL="curl-7.17.1" LIBIDN="libidn-0.6.8" CCLIENT="imap-2004g" CCLIENT_DIR="imap-2004g" FREETYPE="freetype-2.3.5" # Push the install dir's bin directory into the path export PATH=${INSTALLDIR}/bin:$PATH function aa_unpack () { # compressed, tar and gzip files to DISTDIR if [ -f $DISTDIR/$1* ] ; then echo Extracting "$1"; zcat ${DISTDIR}/$1* | tar -xvf - &>/dev/null; echo Done.; echo; wait fi } function askapache_grab () { #saves file to SRCDIR echo `basename $1` curl -L --retry 20 --max-time 1800 --retry-delay 30 -# -f --max-redirs 4 --remote-name "$1" } echo echo -------------------------------------------------- echo -- Run this script before php5-install.sh -- echo -------------------------------------------------- echo echo - Downloads and unpacks all prerequisite packages echo - **SRCDIR and DISTDIR will be deleted** echo read -p " (Press any key to continue)" temp; echo;echo # cleanup to remove source and dist directories if present if [ -d "$SRCDIR" ] || [ -d "$DISTDIR" ];then echo echo --- Cleaning up any previous attempts --- rm -rf $SRCDIR $DISTDIR &>/dev/null echo Done. echo wait fi #setup directories mkdir -p ${SRCDIR} ${INSTALLDIR} ${DISTDIR} &>/dev/null # Get all the required packages echo;echo echo --- Downloading all required packages --- echo cd ${DISTDIR} askapache_grab http://us.php.net/distributions/${PHP5}.tar.gz askapache_grab http://mirrors.usc.edu/pub/gnu/libiconv/${LIBICONV}.tar.gz askapache_grab http://umn.dl.sourceforge.net/sourceforge/mcrypt/${LIBMCRYPT}.tar.gz askapache_grab ftp://xmlsoft.org/libxml2/${LIBXML2}.tar.gz askapache_grab ftp://xmlsoft.org/libxml2/${LIBXSLT}.tar.gz askapache_grab http://umn.dl.sourceforge.net/sourceforge/mhash/${MHASH}.tar.gz askapache_grab http://www.zlib.net/${ZLIB}.tar.gz askapache_grab http://curl.askapache.com/download/${CURL}.tar.gz askapache_grab http://easynews.dl.sourceforge.net/sourceforge/freetype/${FREETYPE}.tar.gz askapache_grab ftp://alpha.gnu.org/pub/gnu/libidn/${LIBIDN}.tar.gz askapache_grab ftp://ftp.cac.washington.edu/imap/old/${CCLIENT}.tar.Z wait echo Done. # Extract the files from the required packages. echo;echo;echo echo --- Unpacking downloaded archives. This process may take several minutes! --- echo cd ${SRCDIR} aa_unpack ${PHP5} aa_unpack ${LIBICONV} aa_unpack ${LIBMCRYPT} aa_unpack ${LIBXML2} aa_unpack ${LIBXSLT} aa_unpack ${MHASH} aa_unpack ${ZLIB} aa_unpack ${CURL} aa_unpack ${LIBIDN} aa_unpack ${CCLIENT} aa_unpack ${FREETYPE} wait echo -------------------------------------------------- echo -- Done downloading and unpacking prerequisites -- echo -------------------------------------------------- exit 0;
[root@~/.^*][~/dm/e] $ ./php5-install-prep.sh -------------------------------------------------- -- Run this script before php5-install.sh -- -------------------------------------------------- - Downloads and unpacks all prerequisite packages - **SRCDIR and DISTDIR will be deleted** (Press any key to continue) --- Cleaning up any previous attempts --- Done. --- Downloading all required packages --- php-5.2.3.tar.gz ######################################################################## 100.0% libiconv-1.11.tar.gz ######################################################################## 100.0% libmcrypt-2.5.7.tar.gz ######################################################################## 100.0% libxml2-2.6.27.tar.gz ######################################################################## 100.0% libxslt-1.1.18.tar.gz ######################################################################## 100.0% mhash-0.9.7.1.tar.gz ######################################################################## 100.0% zlib-1.2.3.tar.gz ######################################################################## 100.0% curl-7.17.1.tar.gz ######################################################################## 100.0% freetype-2.3.5.tar.gz ######################################################################## 100.0% libidn-0.6.8.tar.gz ######################################################################## 100.0% imap-2004g.tar.Z ######################################################################## 100.0% Done. --- Unpacking downloaded archives. This process may take several minutes! --- Extracting php-5.2.3 Done. Extracting libiconv-1.11 Done. Extracting libmcrypt-2.5.7 Done. Extracting libxml2-2.6.27 Done. Extracting libxslt-1.1.18 Done. Extracting mhash-0.9.7.1 Done. Extracting zlib-1.2.3 Done. Extracting curl-7.17.1 Done. Extracting libidn-0.6.8 Done. Extracting imap-2004g Done. Extracting freetype-2.3.5 Done. -------------------------------------------------- -- Done downloading and unpacking prerequisites -- --------------------------------------------------