Apache aus den Quellen kompilieren
Als Erstes alle Sources (httpd-2.4.27.tar.gz, apr-1.6.2.tar.gz, apr-iconv-1.2.1.tar.gz, apr-util-1.6.0.tar.gz) inklusive Patches und Hashes unter "${HOME}/download/Apache_HTTP_Server_2.4.27/Source" untergebracht.
Nach der Prüfung der Kontrollsummen (*.md5, *.sha1, *.sha256, *.asc) die .gz-Archive dort entpackt:
userid@rhel:/users/userid/download/Apache_HTTP_Server_2.4.27/Source> ls -l total 68076 -rwxr-x---. 1 userid groupid 5826560 Jun 9 14:56 apr-1.6.2.tar -rwxr-x---. 1 userid groupid 1071074 Oct 5 11:24 apr-1.6.2.tar.gz -rwxr-x---. 1 userid groupid 8683520 Nov 15 2007 apr-iconv-1.2.1.tar -rwxr-x---. 1 userid groupid 1233989 Oct 5 11:24 apr-iconv-1.2.1.tar.gz drwxr-x---. 2 userid groupid 4096 Oct 5 11:28 apr-patches -rwxr-x---. 1 userid groupid 3481600 May 4 01:20 apr-util-1.6.0.tar -rwxr-x---. 1 userid groupid 565507 Oct 5 11:24 apr-util-1.6.0.tar.gz drwxr-x---. 2 userid groupid 4096 Oct 2 17:52 httpd-2.4.27-patches -rwxr-x---. 1 userid groupid 39874560 Oct 2 17:22 httpd-2.4.27.tar -rwxr-x---. 1 userid groupid 8603417 Oct 5 10:59 httpd-2.4.27.tar.gz -rwxr-x---. 1 userid groupid 793 Oct 2 17:24 httpd-2.4.27.tar.gz.asc -rwxr-x---. 1 userid groupid 54 Oct 2 17:24 httpd-2.4.27.tar.gz.md5 -rwxr-x---. 1 userid groupid 62 Oct 2 17:24 httpd-2.4.27.tar.gz.sha1 -rwxr-x---. 1 userid groupid 86 Oct 2 17:24 httpd-2.4.27.tar.gz.sha256 userid@rhel:/users/userid/download/Apache_HTTP_Server_2.4.27/Source>
Folgende Abhängigkeiten musste ich nachinstalliert (sonst konnte ich nicht kompilieren):
- expat-devel
- pcre-devel
httpd-2.4.27.tar ins Verzeichnis apache (unterhalb von ${HOME}) verschoben und dort entpackt.
Folgende .tar-Pakete samt Patches ins Verzeichnis srclib (unterhalb von ${HOME}/apache/httpd-2.4.27) verschoben und dort entpackt:
- apr
- apr-iconf
- apr-util
Zuerst alle Patches eingespielt, danach kompiliert in der Reihenfolge:
- apr
- apr-iconf
- apr-util
- httpd
Hier der Ablauf:
cd ${HOME}/apache/httpd-2.4.27 export PREFIX_APACHE=${PWD} export PATH_SRC_APACHE=${PREFIX_APACHE} export PATH_SRC_APR=${PATH_SRC_APACHE}/srclib/apr-1.6.2 export PATH_SRC_APR_UTIL=${PATH_SRC_APACHE}/srclib/apr-util-1.6.0 export PATH_SRC_APR_ICONV=${PATH_SRC_APACHE}/srclib/apr-iconv-1.2.1 export LIB=${PATH_SRC_APR}/lib:${PATH_SRC_APR_UTIL}/lib:${PATH_SRC_APR_ICONV}/lib:${PREFIX_APACHE}/lib export LIBPATH=${LIB} export LIBRARY_PATH=${LIB} export INCLUDE=${PATH_SRC_APACHE}/include:${PATH_SRC_APR_ICONV}/include:${PATH_SRC_APR}/include:${PATH_SRC_APR_UTIL}/include cd srclib cd apr-1.6.2 ./configure --prefix=${PREFIX_APACHE} make make install cd .. cd apr-iconv-1.2.1 ./configure --prefix=${PREFIX_APACHE} --with-apr=${PATH_SRC_APR} make make install cd .. cd apr-util-1.6.0 ./configure --prefix=${PREFIX_APACHE} --with-apr=${PATH_SRC_APR} make make install cd .. cd .. ./configure --prefix=${PREFIX_APACHE} --enable-so --enable-modules="most" --enable-debugger-mode --with-apr=${PATH_SRC_APR} --with-apr-util=${PATH_SRC_APR_UTIL} make make install
Dabei werden einige Meldungen ausgegeben, unter anderem:
Während "make install" von "apr-1.6.2":
libtool: warning: remember to run 'libtool --finish /usr/local/apr/lib'
Während "make" von "apr-iconv-1.2.1":
iconv_ccs.c: In function 'apr_iconv_ccs_event': iconv_ccs.c:47:16: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] mod->im_data = mod->im_desc->imd_data; ^
Während "make install" von "apr-util-1.6.0":
libtool: warning: relinking 'libaprutil-1.la'
Ich habe diese Meldungen zunächst ignoriert.
Um ein einzelnes MPM auszuwählen, das statisch kompiliert werden soll, wird die Option –with-mpm=Name verwendet. Für UNIX stehen folgende Varianten zur Auswahl:
- prefork – für jede Client-Verbindung wird ein eigener Prozess verwendet; es werden stets einige Prozesse auf Vorrat geforkt.
- worker – eine kleine Anzahl von Prozessen verwaltet für jede Client-Verbindung einen Thread; dieses Modell ist speicherschonender als prefork.
- event – eine erweiterte Variante von worker, bei der Keepalive-Verbindungen nicht permanent einen Thread blockieren.
Um MPMs (in Apache 2.4) dynamisch laden zu können, muss die Option –enable-mpms-shared=Liste verwendet werden. Beispiel:
--enable-mpms-shared="prefork worker"
Jetzt den neuen Apache starten (vorher nur noch die conf/httpd.conf anpassen):
userid@rhel:/users/userid/apache/httpd-2.4.27> bin/httpd -k start userid@rhel:/users/userid/apache/httpd-2.4.27>
…oder beenden:
userid@rhel:/users/userid/apache/httpd-2.4.27> bin/httpd -k stop userid@rhel:/users/userid/apache/httpd-2.4.27>
…oder neu starten:
userid@rhel:/users/userid/apache/httpd-2.4.27> bin/httpd -k restart userid@rhel:/users/userid/apache/httpd-2.4.27>
Zur Kontrolle im Web-Browser auf die URL http://rhel/ (bzw. den host-Namen "rhel" durch einen korrekten DNS-Namen ersetzen) gehen, als Bestätigung soll der Browser einen einzigen String It works! zeigen.
Konfiguration von Apache.
Parameter, die beim Start angegeben werden können: https://httpd.apache.org/docs/2.4/programs/httpd.html
Für Entwicklungs- und Debug-Zwecke sind davon folgende besonders interessant:
-f config | Ein anderes KonfigurationsFile anstelle von "conf/httpd.conf" nutzen. Der Pfad soll relativ zum ServerRoot angegeben werden. |
-e level | Setzt LogLevel während des StartUps. |
-E file | Schreibt Fehlermeldungen in das File file während des StartUps. |
-X | Startet Apache im Debug-Modus. Es wird ein einziger Worker gestartet und der Server wird sich von der Konsole nicht verabschieden. |
Stand: 26.07.2018
EOF