Source compilation of Apache is a part Apache server administration. Let us see the steps,
Basics of Compilation of Apache with PHP
Here we are going to install apache using the source only. The choice of Operating System here is Linux (distro: Centos). The procedure we follow here will lead to a simple apache installation for dynamic loading of php. PHP will be installed as a module to apache. With a little bit of patience and time, all the necessary modules can be installed with apache. I will be giving a brief idea about the installation of the other modules later.
The basics of installation from the source involves mainly three simple steps (assuming you are lucky):
./configure make make install
./configure creates the MAKEFILE on the fly. We can provide the necessary options to configure. To list the available options in the configuring step use
./configure --help
–prefix=/path/… mentions where the executable and its files are installed. If not mentioned it takes the default values.
–enable-[Feature] will enable the specified Feature in apache as it is being built. We are only interested in the DSO capability and hence we enable it with: –enable-so
As a convention we always keep the source code tar ball inside a directory in /usr/src/, thus source installation begins in this directory.
Apache Compilation
Download the required source tar ball of the apache you would like to compile. Here I am installing httpd-2.0.63 from http://httpd.apache.org/download.cgi#apache20. I save it in the /usr/src/ folder.
cd /usr/src/ wget http://www.bizdirusa.com/mirrors/apache/httpd/httpd-2.0.63.tar.gz
This will result in the generation of the file httpd-2.0.63.tar.gz
tar -xzf httpd-2.0.63.tar.gz
This will result in the creation of the directory httpd-2.0.63. Next enter inside this directory and execute the ./configure command.
cd httpd-2.0.63 ./configure --prefix=/usr/local/webserver --enable-so
We are installing apache inside /usr/local/webserver and enable DSO to run php as a module to apache. During this process we may get a lot of errors. We resolve these by manually installing the unresolved dependencies either by obtaining their rpms or by using yum. Normally the first dependency we will get to resolve are:
gcc glibc libxml and their corresponding devel packages
In the days where there were no package management tools like yum, pirut, apt-get etc. The old rpms served the installation of these packages with some effort. The task of determining the required rpm package for the required architecture and resolving the other dependencies which arise due to the installation of this rpm may be a tedious task. Some sites which helped in obtaining the necessary rpm suited for our installation and its other dependancies are:
http://rpm.pbone.net/ http://www.rpmfind.net/linux/RPM/ http://ftp.freshrpms.net/ http://dries.ulyssis.org/rpm/packages.html http://apt.sw.be/ http://rpms.famillecollet.com/ (Remi RPM Repository)
Once everything goes well (we do the ./configure step again to determine this), the make command is executed.
make
If errors are encountered in this stage, We resolve them by installing the unresolved dependencies (Same as the previous step) and then do:
make clean
After this we repeat the make command and then issue:
make install
This process installs the package finally within the system. Modify the init script ( /etc/rc.d/init.d/httpd or /etc/init.d/httpd they are symbolic links) Or sometimes you may even have to create one from the apache site.
The following is the content of one such init script I have used. The line beginning with apachectl/some/path/here and httpd=/some/path/here have to replaced with the appropriate line we have used in the –prefix portion of ./configure.
#!/bin/bash # # Startup script for the Apache Web Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # processname: httpd # pidfile: /usr/local/apache2/logs/httpd.pid # config: /usr/local/apache2/conf/httpd.conf # Source function library. . /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi # This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS="" # Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/local/webserver/bin/apachectl httpd=/usr/local/webserver/bin/httpd pid=$httpd/logs/httpd.pid prog=httpd RETVAL=0 # The semantics of these two functions differ from the way apachectl does # things -- attempting to start while running is a failure, and shutdown # when not running is also a failure. So we just do it the way init scripts # are expected to behave here. start() { echo -n $"Starting $prog: " daemon $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd $pid } reload() { echo -n $"Reloading $prog: " killproc $httpd -HUP RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $httpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f $pid ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|reload|status" echo $"|fullstatus|graceful|help|configtest}" exit 1 esac exit $RETVAL
Next we add the daemon name to the list of services and run it. For this follow the below steps.
chkconfig --add httpd chkconfig --level 2345 httpd on chkconfig --list httpd /etc/init.d/httpd start lynx http://localhost/ will display the default apache page which means success.
PHP Compilation
Now we are going to install PHP 5.2.13 from source!
Go to /usr/src/
cd /usr/src/
Download the PHP source tarball and extract it
wget http://in3.php.net/get/php-5.2.13.tar.gz/from/in.php.net/mirror tar -xzf php* cd php*
Just like in the previous apache installation, we are going to do the ./configure step with the required setting which are displayed using
./configure --help
We are only interested in enabling php as a module (–with-apxs2) support for mysql (–with-mysql) and prefix line. So we go for:
./configure --with-apxs2=/usr/local/webserver/bin/apxs --with-mysql --prefix=/usr/local/webserver/php
The long command can be written in a shorter, more clearer format with:
./configure --with-apxs2=/usr/local/webserver/bin/apxs \ --with-mysql \ --prefix=/usr/local/webserver/php
The same instructions go for the errors here.
Once everything goes smooth:
make make install
We can provide the recommeneded php.ini setting in the path /usr/local/webserver/php/lib (what ever is the –prefix + /lib) or just copy the recommended settings to /usr/local/webserver/php/lib (This file may have the name php.ini-recommended or php.ini-production)
cp php.ini-recommended /usr/local/webserver/php/lib/php.ini
From now on we can have php’s index page to be the default index page. For this in the apache’s config file append index.php to the directive – DirectoryIndex
The line would thus look like:
DirectoryIndex index.html index.html.var index.php
To make make apache call modular php to execute the php script when encountered, add the following lines to the conf file.
AddType application/x-httpd-php .php DirectoryIndex index.html index.html.var index.php
Next to test your installation.
In the default document root, create a phpinfo file with the file name index.php an d the contents as:
<? phpinfo(); ?>
Now we will test the apache configuration for any syntax errors and then reload the apache webserver:
apachectl configtest (No errors should be reported) /etc/init.d/httpd reload
Open a browser window and load the localhost as URL, we will be viewing the phpinfo page in here. In the phpinfo page, the portion Configure Command shows the actual compilation time options used while ./configure is used. The row corresponding to Server API mentions how the php is loaded. ‘Apache 2.0 Handler’ means that php was loaded as a module of apache. The rest of the values can be globally changed by making the required changes in php.ini or locally in .htaccess (which is possible only because it is loaded as an apache module).
Tips on installing PHP as a CGI
Here we do not require installing apache with the –enable-so option. A normal installation will do. The installation of php will not require the option –with-apxs2. However we will have to mention the location of apache source directory with –with-apache=../apache_1.3.14
In the httpd.conf file you will require adding:
ScriptAlias /php/ [path where your php folder is located] AddType application/x-httpd-php .php AddType application/x-httpd-php .php3 AddType application/x-httpd-php .phtml Action application/x-httpd-php /php/php5
For further assistance you can contact our Apache server administration team