Ci sono due modi per compilare ed installare Apache 1.3 direttamente dai sorgenti:
Il primo prevede l'utilizzo del processo APACI, descritto sotto, il secondo è il metodo piu classico, che segue le procedure descritte nel file /src/INSTALL.
Entrambi i 2 metodi hanno pregi e difetti: APACI è piu nuovo e un po più grezzo, ma permette una rapida installazione, il secondo metodo è più lungo, ma può risultare più familiare a molti e permette una installazione piu minuziosa.
I requisiti di sistema sono:
- 12 Mbyte di spazio libero sull'harddisk durante l'installazione, anche se alla fine ne occuperanno generalmente 3 (dipende poi da quali e quanti moduli si desidera installare)
- ANSI-C Compiler: Prima di iniziare l'installazione bisogna essere certi di aver installato un compilatore ANSI-C. E' raccomandato il compilatore GNU GCC.
- Perl 5 Interpreter [opzionale]: Per alcuni script come 'apxs o 'dbmmanage" (scritti appunto in perl) il Perl interpreter è richiesto (se manca comunque APACI farà l'installazione, ma gli script in Perl non andranno). Se si possiedono piu interpreti Perl (esempio Perl 4 e Perl 5), si consiglia di utilizzare l'opzione --with-perl per selezionare quello giusto.
- Dynamic Shared Object (DSO) support [opzionale]: Apache ha la capacità di poter caricare moduli mentre è in esecuzione attraverso DSO utilizzando chiamate di sistema come dlopen()/dlsym(). Se in un sistema non è presente il supporto DSO, Apache non riuscirà a caricare i moduli durante l'esecuzione (c'è da dire che tanti preferiscono configurazioni statiche, ossia senza l'utilizzo dei moduli).
INSTALLARE APACHE 1.3 CON APACI
Overview:
./configure --prefix=PREFIX
make
make install
PREFIX/bin/apachectl start
Dove PREFIX è il path dove Apache viene installato, di default /usr/local/apache/
Configurare l'albero delle sorgenti:
Una corretta configurazione è essenziale per una buona installazione di Apache, in funzione della piattaforma e dei requisiti personali. Il parametro piu importante è il path dove Apache viene installato. Per una lista completa delle opzioni disponibili lanciare ./configure --help
.
Nel seguente esempio è riportata la configurazione di Apache con un particolare compilatore C e con l'installazione dei 2 moduli mod_rewrite e mod_proxy.
CC="pgcc" OPTIM="-O2" \
./configure --prefix=/usr/local/apache \
--enable-module=rewrite --enable-shared=rewrite \
--enable-module=proxy --enable-shared=proxy
Costruire il pacchetto:
Per costruire il pacchetto, compilando i sorgenti secondo le configurazioni definite, basta semplicemente lanciare il comando make
.
Se si possiede una macchina abbastanza lenta e si intende installare parecchi moduli si dovra attendere qualche minuto.
Installare il pacchetto:
Per installare il pacchetto nel path prima specificato (--prefix=...), basta lanciare il comando make install
.
Testare Apache:
Per testare se l'installazione è avvenuta correttamente avviare Apache lanciando PREFIX/bin/apachectl start
, aprire il browser, andare su http://localhost
e vedere se risponde alla richiesta.
INSTALLARE APACHE 1.3 CON IL METODO TRADIZIONALE
Il metodo tradizionale permette di installare Apache piu minuziosamente e senza dover digitare tutte le opzioni desiderate.
Configurare l'installazione:
La compilazione di Apache può essere suddivisa in 3 step: primo selezionare i moduli da includere, secondo creare la configurazione in funzione del proprio sistema operativo, terzo compilare l'eseguibile.
- Per selezionare i moduli basta scommentare le linee nel file di configurazione dell'installazione relative ai moduli desiderati o, nel caso si vogliano inserire nuovi moduli non presenti nell'installazione standard (es mod_PHP) basta aggiungerene la riga relativa.
- Per configurare Apache solitamente basta lanciare lo script, ma puo capitare di avere richieste particolari (come, per esempio delle librerie necessarie ad un modulo), per cui serve editare nel file di configurazione le seguenti opzioni: EXTRA_CFLAGS, LIBS, LDFLAGS, INCLUDES:
./configure
Using nomefile.conf as config file
+ configured for OS platform
+ setting C compiler to OS *
+ setting C compiler optimization-level to OS *
+ Adding selected modules
+ doing sanity check on compiler and options
Creating Makefile in support
Creating Makefile in main
Creating Makefile in os/unix
Creating Makefile in modules/standard
Questo è un esempio di standard output, per cui le parti commentate varieranno in funzione della piattaforma su cui si installa Apache e del file di configurazione usato. Le parti contrassegnate da '*' possono anche non essere printate, dipende sempre dal sistema operativo e dalla configurazione utilizzata. Per quanto riguarda il file di configurazione è possibile passargli un file alternativo lanciando lo script con l'opzione --file nomefile.conf.
Compilare Apache
Per compilare Apache lanciare il comando make
.
Installare Apache
Ora abbiamo il binario chiamato httpd. Apache è fatto per essere configurato ed eseguito nella stessa directory dove e' stato compilato. Ora bisogna configurare il file di configurazione principale httpd.conf.
Testare apache:
Per testare se l'installazione è avvenuta correttamente startare Apache lanciando PREFIX/bin/apachectl start
, aprire il browser, andare su http://localhost e vedere se risponde alla richiesta.
Fra i vari modi con cui è possibile installare Apache su distribuzioni RedHat based, quello più semplice è tramite pacchetti RPM.
Per farlo, innanzitutto bisogna scaricare il pacchetto apache-ver.arch.rpm appropriato per la propria distribuzione Linux, dove ver sta per versione e arch per architettura.
Una volta fatto questo andare dove si è scaricato il pacchetto e lanciare il comando (esempio per Apache 1.3):
[root@eberk diego]# rpm -ihv ./apache-1.3.9-4.i386.rpm
/etc/httpd/conf
/etc/httpd/conf/access.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/conf/srm.conf
/etc/httpd/logs
[...]
/home/httpd
/home/httpd/cgi-bin
/home/httpd/html
/home/httpd/html/index.html
[...]
/usr/sbin/httpd
/usr/sbin/logresolve
/usr/sbin/rotatelogs
/usr/sbin/suexec
[...]
Ora Apache è installato.
Attenzione, alcuni moduli per Apache non sono contenuti nell'RPM di installazione (per esempio mod_PHP, mod_PERL ecc...), e vanno installati tramite gli appositi RPM.
In genere su qualsiasi distribuzione è già inclusa, e installabile fin dall'inizio, una versione di Apache.
Per aggiornarla con una versione più recente basta il solito:
[root@eberk diego]# rpm -Uv ./apache-1.3.9-4.i386.rpm
Per gestire correttamete le dependencies, per esempio con un Apache con MOD_php con supporto MySQL e MOD_ssl seguire questo ordine: Apache, Mysql (pacchetto base + server + devel), PHP, MOD_php, php-mysql, OpenSSL, MOD_ssl.
Su RedHat, Apache 2.0 è stato introdotto di default dalla versione 8.0 (notare che il nome del pacchetto è httpd-versione.rpm e non più apache-versione.rpm). I pacchetti relativi sono:
httpd - Il server web Apache (2.0)
httpd-devel - Le librerie che permettono la compilazione di moduli addizionali (non serve se non si compilano a mano)
redhat-config-httpd - Un semplice tool di configurazione visuale (non serve se si edita a mano httpd.conf)
httpd-manual - le pagine del manuale di Apache
mod_ssl - Supporto delle criptazioni dei dati per https (richiede openssl)
mod_perl - Modulo Apache per il supporto Perl
mod_python - Modulo Apache per il supporto Python
php - Supporto PHP (come modulo Apache o standalone). Se servono moduli specifici per PHP questi vanno installati (es: php-mysql, php-imap, php-snmp...)
Notare che sui sistemi RedHat la DocumentRoot
, direcrtoty dove di default vanno inserite le pagine html di un sito), era /home/httpd/html
nelle versioni fino alla 6.2 ed è diventata /var/www/html
nelle versioni successive.
Molte opzioni di compilazione di Apache si riferiscono al path da utilizzare per varie directory (dir di base, documenti, log, configurazioni, binari ecc.).
E' possibile specificarle singolarmente oppure usare dei layout predefiniti, che presentano dei template di base, sulla posizione delle directory, che si adattano a diversi sistemi.
Nel file config.layout
all'interno del tar.gz ufficiale si trovano alcuni template predefiniti.
Fra questi segnaliamo quello di default, che mette tutto nella directory /usr/local/apache e in sue sottodirectory:
<Layout Apache>
prefix: /usr/local/apache
exec_prefix: $prefix
bindir: $exec_prefix/bin
sbindir: $exec_prefix/bin
libexecdir: $exec_prefix/libexec
mandir: $prefix/man
sysconfdir: $prefix/conf
datadir: $prefix
iconsdir: $datadir/icons
htdocsdir: $datadir/htdocs
manualdir: $htdocsdir/manual
cgidir: $datadir/cgi-bin
includedir: $prefix/include
localstatedir: $prefix
runtimedir: $localstatedir/logs
logfiledir: $localstatedir/logs
proxycachedir: $localstatedir/proxy
</Layout>
Un'altro template spesso usato è quello utilizzato da distribuzioni Linux derivate da RedHat e basate su RPM:
<Layout RedHat>
prefix: /usr
exec_prefix: $prefix
bindir: $prefix/bin
sbindir: $prefix/sbin
libexecdir: $prefix/lib/apache
mandir: $prefix/man
sysconfdir: /etc/httpd/conf
datadir: /var/www
iconsdir: $datadir/icons
htdocsdir: $datadir/html
manualdir: $datadir/manual
cgidir: $datadir/cgi-bin
includedir: $prefix/include/apache
localstatedir: /var
runtimedir: $localstatedir/run
logfiledir: $localstatedir/log/httpd
proxycachedir: $localstatedir/cache/httpd
</Layout>
Per utilizzare uno specifico layout si usa la direttiva --with-layout, per esempio:
./configure --with-layout=Solaris
Nella versione 1.3.27 sono predefiniti i seguenti layout: Apache, GNU, BinaryDistribution, Mac OS X Server, Darwin, RedHat, opt, beos, SuSE, BSDI, Solaris, FreeBSD, OpenBSD, Cygwin.
E' possibile utilizzare un layout di base e approntare modifiche su specifici path. Per esempio:
./configure --with-layout=RedHat --data-dir=/home/httpd/html
Fra le direttive che agiscono sulla posizione dei vari file le più significative sono:
--prefix=PATH
- Indica la directory di base di installazione e il valore di default della server root.
--target=NOME
- Modifica il nome di base dell'eseguibile httpd, dei file di lock e scoreboard, delle directory in cui sono contenuti i vari file. Come --prefix, è utile per far convivere 2 diverse versioni di Apache sulla stessa macchina.
Tramite l'opzione --show-layout è inoltre possibile visualizzare, senza compilare nulla, i vari path di installazione e compilazione:
./configure --with-layout=GNU --target=althttpd --show-layout
Configuring for Apache, Version 1.3.27
+ using installation path layout: GNU (config.layout)
Installation paths:
prefix: /usr/local
exec_prefix: /usr/local
bindir: /usr/local/bin
sbindir: /usr/local/sbin
libexecdir: /usr/local/libexec
mandir: /usr/local/man
sysconfdir: /usr/local/etc/althttpd
datadir: /usr/local/share/althttpd
iconsdir: /usr/local/share/althttpd/icons
htdocsdir: /usr/local/share/althttpd/htdocs
manualdir: /usr/local/share/althttpd/htdocs/manual
cgidir: /usr/local/share/althttpd/cgi-bin
includedir: /usr/local/include/althttpd
localstatedir: /usr/local/var/althttpd
runtimedir: /usr/local/var/althttpd/run
logfiledir: /usr/local/var/althttpd/log
proxycachedir: /usr/local/var/althttpd/proxy
Compilation paths:
HTTPD_ROOT: /usr/local
SHARED_CORE_DIR: /usr/local/libexec
DEFAULT_PIDLOG: var/althttpd/run/althttpd.pid
DEFAULT_SCOREBOARD: var/althttpd/run/althttpd.scoreboard
DEFAULT_LOCKFILE: var/althttpd/run/althttpd.lock
DEFAULT_ERRORLOG: var/althttpd/log/error_log
TYPES_CONFIG_FILE: etc/althttpd/mime.types
SERVER_CONFIG_FILE: etc/althttpd/althttpd.conf
ACCESS_CONFIG_FILE: etc/althttpd/access.conf
RESOURCE_CONFIG_FILE: etc/althttpd/srm.conf
Aggiornare Apache con regolarità e sopratutto in caso di patching di nuovi buchi di sicurezza è un'attività fondamentale che non richiede molto tempo.
Segue lo standard output della procedura di aggiornamenti di Apache dalla versione 1.3.26 alla versione 1.3.27. Quanto qui riportato è ovviamente fattibile anche con altre versioni (ma non con un passaggio dalla 1.3 alla 2.0).
In questo caso la compilazione viene eseguita sul server stesso su cui gira Apache e usando la base directory di default ( /usr/local/apache ).
Per sicurezza si fa un backup preventivo di tutta la basedir di Apache
[root@socrate al]# tar -zcvf backup.tar.gz /usr/local/apache
Download dei sorgenti con wget
[root@socrate al]# wget http://nagoya.apache.org/dist/httpd/apache_1.3.27.tar.gz
--09:46:37-- http://nagoya.apache.org/dist/httpd/apache_1.3.27.tar.gz
=> `apache_1.3.27.tar.gz'
Resolving nagoya.apache.org... done.
Connecting to nagoya.apache.org[192.18.49.131]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2,306,052 [application/x-tar]
100%[====================================>] 2,306,052 16.80K/s ETA 00:00
09:48:52 (16.80 KB/s) - `apache_1.3.27.tar.gz' saved [2306052/2306052]
Scompattazione del tarball
[root@socrate al]# tar -zxvf apache_1.3.27.tar.gz
apache_1.3.27/
apache_1.3.27/cgi-bin/
apache_1.3.27/cgi-bin/printenv
apache_1.3.27/cgi-bin/test-cgi
apache_1.3.27/ABOUT_APACHE
apache_1.3.27/Announcement
apache_1.3.27/INSTALL
apache_1.3.27/LICENSE
apache_1.3.27/Makefile.tmpl
apache_1.3.27/README
[...]
apache_1.3.27/src/Configuration
Si entra nella directory appena scompattata. Allo stesso livello si ha la directory apache_1.3.26 con i sorgenti della versione precedente
[root@socrate al]# cd apache_1.3.27/
Si esegue lo script config.status in apache_1.3.26 che contiene il ./configure con i parametri utilizzati nell'ultima compilazione. Ovviamente la compilazione la si fa sui sorgenti della versione 1.3.27 (trovandosi nella relativa directory).
[root@socrate apache_1.3.27]# ../apache_1.3.26/config.status
Configuring for Apache, Version 1.3.27
+ using installation path layout: Apache (config.layout)
Creating Makefile
Creating Configuration.apaci in src
Creating Makefile in src
+ configured for Linux platform
+ setting C compiler to gcc
+ setting C pre-processor to gcc -E
+ checking for system header files
+ adding selected modules
[...]
Si compilano i sorgenti...
[root@socrate apache_1.3.27]# make
===> src
make[1]: Entering directory `/home/al/apache_1.3.27'
[...]
Si installano i binari compilati. Se si vuole evitare potenziali complicazioni di conflitti sui file, a questo punto è possibile stoppare il server web. In questo caso non lo si è fatto e non si sono avuti problemi.
[root@socrate apache_1.3.27]# make install
make[1]: Entering directory `/home/al/apache_1.3.27'
===> [mktree: Creating Apache installation tree]
./src/helpers/mkdir.sh /usr/local/apache/bin
[...]
Si riavvia il server Web. Il file di configurazione non è stato cambiato e tutto torna a funzionare correttamente
[root@socrate apache_1.3.27]# /usr/local/apache/bin/apachectl restart
/usr/local/apache/bin/apachectl restart: httpd restarted
Per scrupolo si verifica la versione corrente:
[root@socrate apache_1.3.27]# httpd -V
Server version: Apache/1.3.27 (Unix)
Server built: Nov 6 2002 09:53:02
Server's Module Magic Number: 19990320:13
Server compiled with....
-D HAVE_MMAP
[...]
Le opzioni che possono essere specificate in sede di configurazione per la compilazione di Apache sono molte e possono creare confusione.
Facciamo alcuni esempi che si adattano ai casi reali più comuni.
COMPILARE UN APACHE STATICO CON ALCUNI MODULI SELEZIONATI
Se non si vuole il supporto dinamico dei moduli e si intende creare un Apache in un unico file che contiene gran parte (ma non tutti) dei moduli si può usare:
./configure --enable-module=most
Questo compila in un unico binario quasi tutti i moduli, esclusi alcuni. Se non viene specificato si compilano solo quelli che risultano abilitati ./configure --help
.
Si può sempre selezionare singolarmente i moduli da inserire o togliere rispetto alle indicazioni di base:
./configure --enable-module=most --disable-module=mod_rewrite --disable-module=mod_auth
COMPILARE UN APACHE CON SUPPORTO DI MODULI DINAMICI
Quando si compila Apache per supportare moduli caricati dinamicamente (secondo quanto indicato in httpd.conf) è sempre il caso di compilare TUTTI i moduli e selezionare da file di configurazione quali effettivamente caricare:
./configure --enable-module=all --enable-shared=max
Notare che l'opzione --enable-module deve comunque essere presente, per permettere la compilazione dei moduli indicati.
Quando si usa --enable-shared il modulo mod_so, che gestisce i moduli dinamici viene automaticamente inserito nell'httpd core.
La prima mattinata del corso sul Web Server prevede l'installazione di un Linux su tutti i PC dei partecipanti con direttamente la scelta di Apache.
L'approfondimento sulle procedure di installazione di Apache tramite sorgenti, pur essendo trattato in questo Topic, previsto nel primo capitolo, va affrontato solo dopo aver affrontato le problematiche di configurazione e di fatto i primi 3 capitoli del corso.
L'inizio del corso va quindi affrontato con questa logica:
- Introduzione al corso, e al web
- Installazione di Linux
- Mentre si installa Linux si può iniziare ad affrontare i TOPIC sui protocolli Internet e HTTP
- Il capitolo sull'installazione di Apache viene affrontato solo nella parte che riguarda l'installazione/upgrade via RPM
- Si procede con gli argomenti previsti nel secondo e terzo capitolo (gestione, monitoraggio, configurazione di Apache)
- Si ritorna (indicativamente alla fine del primo giorno o all'inizio del secondo giorno di corso) sul Topic riguardante l'installazione di Apache tramite compilazioni di sorgenti.
In questo modo, con le nozioni aquisite nella prima parte del corso, si potranno affrontare con magiore cognizione di causa le scelte relative ai parametri di installazione.
Attualmente il branch 2.0 del server web piu' utilizzato al mondo risulta di sicuro quello piu' idoneo ad essere installato,i tempi sono maturi, il vecchio branch 1.3 viene aggiornato solo in caso di "security bugfixing", molti degli applicativi che hanno reso flessibile e universale la vecchia release hanno fatto il porting per l'attuale versione, (vedi application server, moduli di terze parti etc..),le maggiori distribuzioni linux lo includono nei package di default.
Rispetto alla vecchia installazione da sorgenti, sono state apportate alcune modifiche alle opzioni di configurazione, ma la procedura di compilazione rimane la stessa.
Vediamo alcune delle nuove opzioni di configurazione:
root@eva:~/httpd-2.0.53# ./configure --help
[...]
--prefix=PREFIX
Modificato il prefix di default adesso e' /usr/local/apache2
--with-mpm=MPM
Nuova opzione che serve per specificare il tipo di multi-processing da utilizzare (worker,perchild,prefork)
--enable-mods-shared=MODULE-LIST
Opzione per specificare la lista di moduli che verranno abilitati in modalita' dinamica (DSO mode), attive due keywords all e most.
--enable-modules=MODULE-LIST
Opzione identical a --enable-mods-shared ma per la compilazione di moduli in modalita' statica.
--enable-log-forensic
Abilita i forensic log
--enable-ssl
Nuova opzione per abilitare il supporto SSL/TLS da parte di mod_ssl gia' incluso nei sorgenti base di httpd.
--enable-so
Opzione per abilitare il supporto DSO
--enable-maintainer-mode
Abilita il debugging ed eventuali time warning
Download sorgenti
root@eva:~# wget http://markoer.org/apache/httpd/httpd-2.0.53.tar.bz2
--12:41:32-- http://markoer.org/apache/httpd/httpd-2.0.53.tar.bz2
=> `httpd-2.0.53.tar.bz2'
Resolving markoer.org... 62.149.229.140
Connecting to markoer.org[62.149.229.140]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5,079,345 [application/x-bzip2]
100%[=================================================================================================================>] 5,079,345 111.06K/s ETA 00:00
12:42:29 (85.97 KB/s) - `httpd-2.0.53.tar.bz2' saved [5079345/5079345]
root@eva:~# tar -jxvf httpd-2.0.53.tar.bz2
[...]
httpd-2.0.53/build/mkconfNW.awk
httpd-2.0.53/build/mkdep.perl
httpd-2.0.53/build/mkdir.sh
httpd-2.0.53/build/nw_export.inc
httpd-2.0.53/build/nw_ver.awk
httpd-2.0.53/build/NWGNUenvironment.inc
httpd-2.0.53/build/NWGNUhead.inc
httpd-2.0.53/build/NWGNUmakefile
httpd-2.0.53/build/NWGNUtail.inc
httpd-2.0.53/build/prebuildNW.bat
httpd-2.0.53/build/PrintPath
httpd-2.0.53/build/program.mk
httpd-2.0.53/build/rpm/
httpd-2.0.53/build/rpm/httpd.init
httpd-2.0.53/build/rpm/httpd.logrotate
httpd-2.0.53/build/rpm/httpd.spec.in
httpd-2.0.53/build/rules.mk.in
httpd-2.0.53/build/special.mk
httpd-2.0.53/build/sysv_makefile
httpd-2.0.53/build/win32/
httpd-2.0.53/build/win32/apache.ico
httpd-2.0.53/build/win32/win32ver.aw
[...]
Compilazione sorgenti e installazione
root@eva:~/httpd-2.0.53# ./configure --with-mpm=worker --enable-so --enable-mods-shared=all
[...]
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
Applying APR hints file rules for i686-pc-linux-gnu
setting CPPFLAGS to "-DLINUX=2"
adding "-D_REENTRANT" to CPPFLAGS
(Default will be unix)
checking whether make sets $(MAKE)... yes
checking how to run the C preprocessor... gcc -E
[...]
root@eva:~/httpd-2.0.53# make
[...]
Making all in passwd
make[3]: Entering directory `/home/neo/httpd-2.0.53/srclib/apr/passwd'
make[4]: Entering directory `/home/neo/httpd-2.0.53/srclib/apr/passwd'
/bin/sh /home/neo/httpd-2.0.53/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -I../include -I../include/arch/unix -c apr_getpass.c && touch apr_getpass.lo
make[4]: Leaving directory `/home/neo/httpd-2.0.53/srclib/apr/passwd'
[...]
root@eva:~/httpd-2.0.53# make install
[...]
Installing configuration files
mkdir /usr/local/apache2/conf
Installing HTML documents
mkdir /usr/local/apache2/htdocs
Installing error documents
mkdir /usr/local/apache2/error
[...]