Search code examples
apacheapache2redhatrhel

Apache 2.4.x manual build and install on RHEL 6.4


OS: Red Hat Enterprise Linux Server release 6.4 (Santiago)

The current yum installation of apache on this OS is 2.2.15. I require the latest 2.4.x branch so have gone about installing it manually. I have noted the complete procedure I undertook, including unpacking apr and apr-util sources into the apache sources beforehand, but I guess the following is the most important part of the procedure:

GATHER LATEST APACHE AND APR
$ cd ~
$ mkdir apache-src
$ cd apache-src
$ wget http://apache.insync.za.net//httpd/httpd-2.4.6.tar.gz
$ tar xvf httpd-2.4.6.tar.gz
$ cd httpd-2.4.6
$ cd srclib
$ wget http://apache.insync.za.net//apr/apr-1.5.0.tar.gz
$ tar -xvzf apr-1.5.0.tar.gz
$ mv apr-1.5.0 apr
$ rm -f apr-1.5.0.tar.gz
$ wget http://apache.insync.za.net//apr/apr-util-1.5.3.tar.gz
$ tar -xvzf apr-util-1.5.3.tar.gz 
$ mv apr-util-1.5.3 apr-util

INSTALL DEVEL PACKAGES
yum update --skip-broken (There is a dependency issue with the latest Chrome needing the latest libstdc++, which is not available for RHEL and CentOS)
yum install apr-devel
yum install apr-util-devel
yum install pcre-devel

INSTALL
$ cd ~/apache-src/httpd-2.4.6
$ ./configure --prefix=/etc/httpd --enable-mods-shared="all" --enable-rewrite --with-included-apr
$ make
$ make install

NOTE: At the time of running the above, /etc/http is empty.

This seems to have gone fine until I attempt to start the httpd service. It seems that every module include in httpd.conf fails with a message similar to this one for mod_rewrite:

httpd: Syntax error on line 148 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_rewrite.so into server: /etc/httpd/modules/mod_rewrite.so: undefined symbol: ap_global_mutex_create

I've gone right through the list of enabled modules in httpd.conf and commented them out one at a time. All trigger an error as above, however the "undefined symbol: value" is often different (so not always ap_global_mutex_create).

Am I missing a step? Although I find a some portion of that error on Google, most of the solutions centre around the .so files not being reachable. That doesn't seem to be an issue here and the modules are present in /etc/http/modules.

NOTE: At the time of running the above, /etc/http is empty.


Solution

  • You have the correct procedure but it's incomplete.

    After the installation you have to enable SSL in httpd.conf. and generate server.crt and server.key file. Below the complete procedure :

    1. Download Apache

    cd /usr/src
    wget http://www.apache.org/dist/httpd/httpd-2.4.23.tar.gz
    tar xvf httpd-2.4.23.tar.gz
    

    2. Download APR and APR-Util

    cd /usr/src
    wget -c http://mirror.cogentco.com/pub/apache/apr/apr-1.5.2.tar.gz
    wget -c http://mirror.cogentco.com/pub/apache/apr/apr-util-1.5.4.tar.gz
    tar xvf apr-1.5.2.tar.gz
    tar xvf apr-util-1.5.4.tar.gz
    

    Now put the APR and APR-Util you downloaded into your apache source files.

    mv apr-1.5.2 /usr/src/httpd-2.4.23/srclib/apr
    mv apr-util-1.5.4 /usr/src/httpd-2.4.23/srclib/apr-util
    

    3.Compile

    cd /usr/src/httpd-2.4.23
    ./configure --enable-so --enable-ssl --with-mpm=prefork --with-included-apr --with-included-apr-util
    make
    make install
    

    As you can see in the ./configure command we specify command line options to include apr and apr-utils.

    4. Enable SSL in httpd.conf

    Apache configuration file httpd.conf is located under /usr/local/apache2/conf.

    nano /usr/local/apache2/conf/httpd.conf
    

    Uncomment the httpd-ssl.conf Include line and the LoadModule ssl_module line in the /usr/local/apache2/conf/httpd.conf file :

    # LoadModule ssl_module modules/mod_ssl.so
    # Include conf/extra/httpd-ssl.conf
    

    View the httpd-ssl.conf to review all the default SSL configurations.
    For most cases, you don’t need to modify anything in this file.

    nano /usr/local/apache2/conf/extra/httpd-ssl.conf
    

    The SSL certificate and key are required before we start the Apache.
    The server.crt and server.key file mentioned in the httpd-ssl.conf needs to be created before we move forward.

    cd /usr/local/apache2/conf/extra
    egrep 'server.crt|server.key' httpd-ssl.conf
    
    SSLCertificateFile "/usr/local/apache2/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
    

    5. Generate server.crt and server.key file

    First, Generate the server.key using openssl.

    cd /usr/src
    openssl genrsa -des3 -out server.key 1024
    

    The above command will ask for the password. Make sure to remember this password. You need this while starting your Apache later.

    Next, generate a certificate request file (server.csr) using the above server.key file.

    openssl req -new -key server.key -out server.csr
    

    Finally, generate a self signed ssl certificate (server.crt) using the above server.key and server.csr file.

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    

    Copy the server.key and server.crt file to appropriate Apache configuration directory location.

    cp server.key /usr/local/apache2/conf/
    cp server.crt /usr/local/apache2/conf/
    

    6. Start Apache

    /usr/local/apache2/bin/apachectl start
    

    If you are getting the below error message :

    AH00526: Syntax error on line 51 of /usr/local/apache2/conf/extra/httpd-ssl.conf:
    Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the server configuration
    

    Make sure to uncomment the line shown below in httpd.conf :

    vi /usr/local/apache2/conf/httpd.conf
    
    # LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
    

    Finally, this will prompt you to enter the password for your private key before starting up the apache. Verify that the Apache httpd process is running in the background.

    ps -ef | grep http
    

    You should see something like that :

    root    29529 1     0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
    antoine 29530 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
    antoine 29531 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
    antoine 29532 29529 0 13:08 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
    root    29616 18260 0 13:09 pts/0 00:00:00 grep http
    

    By default Apache SSL runs on 443 port. Open a web browser and verify that you can access your Apache using https://{your-ip-address}

    I hope this help, else I advise you to go see : http://jasonpowell42.wordpress.com/2013/04/05/install-apache-2-4-4-on-centos-6-4/