Building Apache and Mod Perl on Mac OS X

March 07, 2009

I’ve finally had my work laptop upgraded to Leopard!!! :)

As such, I’ve just spent the last couple of days getting things all set-up nicely so that I can get on with my work. Most of the work that I do is web development orientated, and mainly using Perl and Catalyst, so an install of Apache and mod_perl is needed.

OS X does come with a complete install of Apache (even with mod_perl!) out of the box and ready to go (info on using this set-up can be found here), but I’m also working on another project that may involve the use of Jaxer, and this requires a newer build of Apache than the one shipped with Leopard. :(

Thankfully building these tools isn’t too complicated, here’s a quick dump of my notes on getting this done. Note, I’m installing them into /usr/local so that I don’t mess with any of the OS X internals that I shouldn’t be touching - this is completely removable.

First, make a work area for building:

sudo mkdir -p /usr/local/src
sudo chgrp admin /usr/local/src
sudo chmod -R 775 /usr/local/src
cd /usr/local/src


curl -O http://apache.mirror.infiniteconflict.com/httpd/httpd-2.2.11.tar.gz
tar zxvf httpd-2.2.11.tar.gz
cd httpd-2.2.11

Now here’s the big one - the Apache configuration. This compiles a heap of modules I probably don’t need, but it’s nice to have them there in case I do ever need them…

./configure –prefix=/usr/local/apache2 \
–enable-autoindex \
–enable-cache \
–enable-cgi \
–enable-deflate \
–enable-dir \
–enable-disk_cache \
–enable-fastcgi \
–enable-file_cache \
–enable-headers \
–enable-include \
–enable-info \
–enable-log_config \
–enable-log_forensic \
–enable-logio \
–enable-mem_cache \
–enable-mime \
–enable-mime_magic \
–enable-negotiation \
–enable-perl \
–enable-proxy \
–enable-proxy-balancer \
–enable-proxy-http \
–enable-rewrite \
–enable-speling \
–enable-status \
–enable-suexec \
–enable-userdir \
–enable-usertrack \
–enable-version \
–enable-vhost_alias \
–enable-so \

Then the standard make and install:

make test
sudo make install

Now to add some configuration so that Apache starts on system boot, first we need to create a startup script:

cd /System/Library/StartupItems/
sudo mkdir Apache
cd Apache
sudo touch Apache
sudo chmod a+x Apache
mate Apache

Paste this content into the file:


## # Apache HTTP Server ##

. /etc/rc.common

StartService () { ConsoleMessage “Starting Apache web server” /usr/local/apache2/bin/apachectl start }

StopService () { ConsoleMessage “Stopping Apache web server” /usr/local/apache2/bin/apachectl stop }

RestartService () { ConsoleMessage “Restarting Apache web server” /usr/local/apache2/bin/apachectl restart }

RunService $1

Then a configuration file:

sudo touch StartupParameters.plist
mate StartupParameters.plist

Paste this content into the file:

  Description     = “Apache web server”;
  Provides        = (“Web Server”);
  Requires        = (“DirectoryServices”);
  Uses            = (“Disks”,“Network Time”);
  OrderPreference = “None”;

Then reboot and open up http://localhost to make sure things have worked.

Mod Perl

This is a lot more straight forward:

cd /usr/local/src
curl -O 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.4
perl Makefile.PL MP_AP_PREFIX=/usr/local/apache2
make test
sudo make install

Now all you have to do is add the following line to your Apache httpd.conf (/usr/local/apache2/conf/httpd.conf) with all of the LoadModule entries:

LoadModule perl_module modules/mod_perl.so

All done! :)