Instalar Apache desde el código fuente

Hace unas semanas tuve que actualizar Apache en un servidor RHEL 5. Apache funcionaba como proxy y SSL offloading de Tomcat. Por motivos de consolidación de instancias de Atlassian Confluence y Atlassian Jira se precisaba que Apache pudiera gestionar multiples certificados SSL.

En los repositorios de RHEL 5 la última versión disponible es la versión httpd-2.2.3-91.el5, liberada en 2006-07-27. Dicha versión no cuenta con soporte para SNI (RFC-3546 Sección “3.1. Server Name Indication”), ya que el soporte para SNI no se añadió hasta httpd-2.2.12. Más información en SSL with Virtual Hosts Using SNI.

Al final decidí compilar desde las fuentes, es decir, un mal menor hasta que se migré el servicio de forma definitiva a una versión actual de RHEL.

A continuación el procedimiento que seguí para compilar e instalar la última versión de Apache en una RHEL 5.

Descargar el código fuente…

Para compilar Apache fue necesario cumplir las siguientes dependencias:

Apache

Descargar las fuentes de la última versión de Apache (Downloading Apache)

1
wget http://apache.uvigo.es//httpd/httpd-2.4.23.tar.bz2 -O /opt/install/httpd-2.4.23.tar.bz2

APR (Apache Portable Runtime)

Descargar el código de la última versión de APR (Downloading Apache Portable Runtime

1
2
wget http://apache.uvigo.es/apr/apr-1.5.2.tar.bz2 -O /opt/install/apr-1.5.2.tar.bz2
wget http://apache.uvigo.es/apr/apr-util-1.5.4.tar.bz2 -O /opt/install/apr-util-1.5.4.tar.bz2

Perl Compatible Regular Expressions (PCRE)

Descargar el código de la última versión de PCRE (PCRE SourceForge)

1
wget https://sourceforge.net/projects/pcre/files/pcre/8.39/pcre-8.39.tar.bz2/download -O /opt/install/pcre-8.39.tar.bz2

OpenSSL

Descargar el código de la última versión de OpenSSL (OpenSSL Downloads)

1
wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz -O /opt/install/openssl-1.0.2j.tar.gz

Compilar

Preparar las fuentes

1
2
3
4
5
6
7
tar -xjf /opt/install/httpd-2.4.23.tar.bz2 -C /opt/install/
tar -xjf /opt/install/apr-1.5.2.tar.bz2 -C /opt/install/httpd-2.4.23/srclib/
tar -xjf /opt/install/apr-util-1.5.4.tar.bz2 -C /opt/install/httpd-2.4.23/srclib/
mv /opt/install/httpd-2.4.23/srclib/apr-1.5.2/ /opt/install/httpd-2.4.23/srclib/apr
mv /opt/install/httpd-2.4.23/srclib/apr-util-1.5.4/ /opt/install/httpd-2.4.23/srclib/apr-util
tar -xzf /opt/install/openssl-1.0.2j.tar.gz -C /opt/install/
tar -xjf /opt/install/pcre-8.39.tar.bz2 -C /opt/install/

Compilar OpenSSL

1
2
3
4
5
6
7
8
mkdir /opt/openssl-1.0.2j
cd /opt/install/openssl-1.0.2j
./config \
--prefix=/opt/openssl-1.0.2j/ \
--openssldir=/opt/openssl-1.0.2j/
make depend
make
make install

Comprobar que está disponible la nueva versión de OpenSSL y que no se ha modificado la versión de OpenSSL del sistema:

1
2
3
4
5
6
7
8
[root@SRVMAD25 openssl-1.0.2j]# /opt/openssl-1.0.2j/bin/openssl
OpenSSL> version
OpenSSL 1.0.2j 26 Sep 2016
OpenSSL> exit
[root@SRVMAD25 openssl-1.0.2j]# openssl
OpenSSL> version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
OpenSSL> exit

Compilar PCRE

1
2
3
4
5
6
7
mkdir /opt/pcre-8.39
cd /opt/install/pcre-8.39
./configure \
--prefix=/opt/pcre-8.39 \
--enable-unicode-properties
make
make install

Comprobar que está disponible la nueva versión de PCRE y que no se ha modificado la versión de PCRE del sistema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@SRVMAD25 pcre-8.39]# /opt/pcre-8.39/bin/pcretest -C
PCRE version 8.39 2016-06-14
Compiled with
8-bit support
UTF-8 support
Unicode properties support
No just-in-time compiler support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Parentheses nest limit = 250
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack
[root@SRVMAD25 pcre-8.39]# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
UTF-8 support
Unicode properties support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack

Compilar Apache

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir /opt/httpd-2.4.23
cd /opt/install/httpd-2.4.23
./configure \
--enable-ssl \
--enable-so \
--with-included-apr \
--with-mpm=worker \
--with-pcre=/opt/pcre-8.39/ \
--prefix=/opt/httpd-2.4.23 \
--with-ssl=/opt/openssl-1.0.2j/ \
--enable-ssl-staticlib-deps \
--enable-mods-static=ssl
make
make install

Comprobar que está disponible la nueva versión de Apache:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@SRVMAD25 httpd-2.4.23]# /opt/httpd-2.4.23/bin/httpd -V
Server version: Apache/2.4.23 (Unix)
Server built: Nov 8 2016 12:18:35
Server's Module Magic Number: 20120211:61
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/opt/httpd-2.4.23"
-D SUEXEC_BIN="/opt/httpd-2.4.23/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

Configuración final

Por último solo es necesario copiar los archivos de configuración desde /etc/httpd/conf.d/ a /opt/httpd-2.4.23/conf.d/.

Entradas de interés

Contenidos
  1. 1. Descargar el código fuente…
    1. 1.1. Apache
    2. 1.2. APR (Apache Portable Runtime)
    3. 1.3. Perl Compatible Regular Expressions (PCRE)
    4. 1.4. OpenSSL
  2. 2. Compilar
    1. 2.1. Preparar las fuentes
    2. 2.2. Compilar OpenSSL
    3. 2.3. Compilar PCRE
    4. 2.4. Compilar Apache
  3. 3. Configuración final