— Summary —

Simple facts:

  • WordPress rewrite works well on hosting server but not works well on my home computer.
  • Ubuntu 12.04 LTS was released on 2012-04-26 and Apache httpd 2.4.2 was Released on 2012-04-17.
  • Check http://packages.ubuntu.com/precise/web/, you will see that Package: apache2 (2.2.22-1ubuntu1).
  • No available package for you to simply apt-get install yet.
  • To compile and install manually is fun and educational. To verify your knowledge on operation system. If you actually check source code and you will respect Open Source more.

What to achieve?

  • to compile and to install workable Apache httpd 2.4.2 to directory /usr/local/apache2.4.2
  • to have 2 Apache server, old one in version 2.2.22 listening to port 80, and new one in version 2.4.2 listening to port 8080

— Preparation —

Check list

  • to get source code of Apache at http://httpd.apache.org/docs/2.4
  • to get source code of Apr and Apr-Util at http://apr.apache.org
  • Put unpacked Apache source code under /home/mark/prja
  • Put unpacked Apr source code under /home/mark/prja/httpd-2.4.2/srclib/apr
  • Put unpacked Apr-Util source code under /home/mark/prja/httpd-2.4.2/srclib/apr-util

Check source code directory

mark@ubuntu:~$ pwd
/home/mark
mark@ubuntu:~$ cd prja
mark@ubuntu:~/prja$ ls
httpd-2.4.2
mark@ubuntu:~/prja$ cd httpd-2.4.2/
mark@ubuntu:~/prja/httpd-2.4.2$ ls
ABOUT_APACHE     buildmark.o    httpd           Makefile.in    README.platforms
acinclude.m4     CHANGES        httpd.dsp       Makefile.win   ROADMAP
Apache-apr2.dsw  config.layout  httpd.spec      modules        server
Apache.dsw       config.log     include         modules.c      srclib
apache_probes.d  config.nice    INSTALL         modules.lo     support
ap.d             config.status  InstallBin.dsp  modules.o      test
build            configure      LAYOUT          NOTICE         VERSIONING
BuildAll.dsp     configure.in   libhttpd.dsp    NWGNUmakefile
BuildBin.dsp     docs           LICENSE         os
buildconf        emacs-style    Makefile        README
mark@ubuntu:~/prja/httpd-2.4.2$ cd srclib
mark@ubuntu:~/prja/httpd-2.4.2/srclib$ ls
apr  apr-util  Makefile  Makefile.in
mark@ubuntu:~/prja/httpd-2.4.2/srclib$ cd ..
mark@ubuntu:~/prja/httpd-2.4.2$

— Step by Step —

1. Perform configure

mark@ubuntu:~/prja/httpd-2.4.2$ ./configure --prefix=/usr/local/apache2.4.2 --with-included-apr > ../prja-log1.txt
rm: cannot remove `conftest*': No such file or directory
rm: cannot remove `conftest*': No such file or directory
rm: cannot remove `libtoolT': No such file or directory
configure: WARNING: apr/apr-util is compiled without ldap support
configure: WARNING: apr/apr-util is compiled without ldap support
configure: WARNING: Your APR does not include SSL/EVP support.
mark@ubuntu:~/prja/httpd-2.4.2$

2. Perform make

mark@ubuntu:~/prja/httpd-2.4.2$ sudo make > ../prja-log2.txt
[sudo] password for mark: 
mark@ubuntu:~/prja/httpd-2.4.2$

Just in case, if you try more than one time, you might need to run “make clean” before “make” again.

3. Perform make install

mark@ubuntu:~/prja/httpd-2.4.2$ sudo make install> ../prja-log3.txt
libtool: install: warning: relinking `libaprutil-1.la'
mkdir /usr/local/apache2.4.2/modules
mkdir /usr/local/apache2.4.2/conf
mkdir /usr/local/apache2.4.2/conf/extra
mkdir /usr/local/apache2.4.2/conf/original
mkdir /usr/local/apache2.4.2/conf/original/extra
mkdir /usr/local/apache2.4.2/htdocs
mkdir /usr/local/apache2.4.2/error
mkdir /usr/local/apache2.4.2/icons
mkdir /usr/local/apache2.4.2/logs
mkdir /usr/local/apache2.4.2/cgi-bin
mkdir /usr/local/apache2.4.2/man
mkdir /usr/local/apache2.4.2/man/man1
mkdir /usr/local/apache2.4.2/man/man8
mkdir /usr/local/apache2.4.2/manual
mark@ubuntu:~/prja/httpd-2.4.2$

Several directories were created and we know where Apache was installed.

4. To start web server

mark@ubuntu:~/prja/httpd-2.4.2$ cd /usr/local/apache2.4.2
mark@ubuntu:/usr/local/apache2.4.2$ ls
bin    cgi-bin  error   icons    lib   man     modules
build  conf     htdocs  include  logs  manual
mark@ubuntu:/usr/local/apache2.4.2$ cd bin
mark@ubuntu:/usr/local/apache2.4.2/bin$ ls
ab            apu-1-config  dbmmanage    fcgistarter   htdigest  httxt2dbm
apachectl     apxs          envvars      htcacheclean  htpasswd  logresolve
apr-1-config  checkgid      envvars-std  htdbm         httpd     rotatelogs
mark@ubuntu:/usr/local/apache2.4.2/bin$ ./apachectl -v
Server version: Apache/2.4.2 (Unix)
Server built:   Jun 25 2012 10:27:49
mark@ubuntu:/usr/local/apache2.4.2/bin$

Now, this new Apache 2.4.2 is ready to tune up.
You might want to try to start it, to expect error message and to study it accordingly.

mark@ubuntu:/usr/local/apache2.4.2/bin$ ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
mark@ubuntu:/usr/local/apache2.4.2/bin$

Permission problem. So we should add sudo and try it again.

mark@ubuntu:/usr/local/apache2.4.2/bin$ sudo ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
mark@ubuntu:/usr/local/apache2.4.2/bin$

Now, we have option, either to stop current running Apache or to let new Apache listen to alternative port. Stick to our plan, carry out the second solution.

Change directory to locate configuration file and make a backup first

mark@ubuntu:/usr/local/apache2.4.2/bin$ cd ..
mark@ubuntu:/usr/local/apache2.4.2$ ls
bin    cgi-bin  error   icons    lib   man     modules
build  conf     htdocs  include  logs  manual
mark@ubuntu:/usr/local/apache2.4.2$ cd conf
mark@ubuntu:/usr/local/apache2.4.2/conf$ ls
extra  httpd.conf  magic  mime.types  original
mark@ubuntu:/usr/local/apache2.4.2/conf$ sudo cp httpd.conf httpd.conf.backup
mark@ubuntu:/usr/local/apache2.4.2/conf$ ls
extra  httpd.conf  httpd.conf.backup  magic  mime.types  original
mark@ubuntu:/usr/local/apache2.4.2/conf$

Then, to use default text editor to modify configuration file,

mark@ubuntu:/usr/local/apache2.4.2/conf$ sudo gedit httpd.conf

You will see something like this,
gedit httpd.conf

Ctrl+F to Find the lines

#Listen 12.34.56.78:80
Listen 80

And change it to be

Listen 127.0.0.1:8080
#Listen 80

Save and exit editor. Run command to start it again

mark@ubuntu:/usr/local/apache2.4.2/conf$ sudo /usr/local/apache2.4.2/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
mark@ubuntu:/usr/local/apache2.4.2/conf$

Ignore warning message for a while.

5. Check result and it’s done

It works!

— Further Study —

  • Log files are here for future reference: prja-log1.txt,prja-log2.txt and prja-log3.txt.
  • You may compile and install Apr and Apr-Util first. However it’s easier to put them to proper location and to have configuration option –with-included-apr.

— Useful Command —

/usr/local/apache2.4.2/bin/apachectl -v
sudo /usr/local/apache2.4.2/bin/apachectl start
sudo /usr/local/apache2.4.2/bin/apachectl stop
sudo gedit /usr/local/apache2.4.2/conf/httpd.conf