Appunti dalla lezione del 15 gennaio 2008:
Configurazione di un server web su sistema Debian GNU/Linux
Debian è l'unica distribuzione interamente guidata dalla comunità, vanta una comunità di qualche migliaio di sviluppatori ed è famosa per il rigore con cui aderisce agli standard ed alla filosofia del software libero. E' la distribuzione che conta il maggior numero di pacchetti disponibili e che è stata adattata al maggior numero di piattaforme hardware.
Ubuntu è derivata da Debian, risultato dell'investimento del miliardario sudafricano Mark Shuttleworth. Orientata al settore desktop, è caratterizzata da rilasci frequenti, quindi versioni molto aggiornate del software. Installazione semplificata e riconoscimento dell'hardware automatico.
Red Hat è una delle prima distribuzioni commerciali di GNU/Linux, orientata al segmento enterprise, per chi vuole un prodotto con un supporto commerciale.
Fedora è una distribuzione derivata da Red Hat, è il risultato dello sforzo comunitario in reazione alla decisione di Red Hat di abbandonare l'utenza privata per concentrasi solo su quella commerciale di tipo enterprise.
La distribuzione Debian non ha una politica commerciale di rilasci, la nuova versione esce solo quando è pronta. Per questo motivo la versione stable non contiene in generale software di ultima generazione, ma di 6/12 mesi. La comunità garantisce per la versione stable solo aggiornamenti di sicurezza e correzione di bug gravi, ma in generale nuove versioni di un programma non entreranno in essa. Per chi ha bisogno di software più aggiornato o chi vuole comunque sperimentare esiste la versione testing che offre comunque un livello di affidabilità di tutto rispetto. Attualmente la versione stable 4.1 ha nome Etch, mentre le versione testing ha nome Lenny.
Per la versione testing non ha senso avere dei CD di installazione, si utilizza un CD minimale detto netinst e tutto il resto del software viene prelevato via rete.
La prima difficoltà nell'installare un software in Debian è la ricerca del nome del pacchetto che si desidera. Non è compito facile visto che ad oggi Debian offre oltre 20mila pacchetti software.
La pagina packages di www.debian.org offre uno strumento per la ricerca dei pacchetti. Per fortuna non bisogna preoccuparsi delle dipendenze: se un pacchetto per funzionare ha bisogno di altro software, questo verrà installato automaticamente.
La ricerca per la parola chiave apache nella distribuzione testing ha prodotto come risultato il pacchetto apache_1.3.34-4.1_i386.deb, dobbiamo invece cercare la nuova versione e quindi la parola apache2.
Notiamo che apache2 in realtà è un pacchetto fittizio. Esistono diverse incarnazioni del programma Apache 2, ognuna adatta ad uno scopo specifico, scegliendo il generico pacchetto apache2 in realtà viene installato il pacchetto apache2-mpm-worker, ed è qeusto pacchetto che contiene effettivamente l'eseguibile del programma. Questo avviene grazie al meccanismo delle dipendenze fornito dai pacchetti Debian. Sempre per via delle dipendenze altri pacchetti vengono installati automaticamente:
Prima di installare un pacchetto Debian dobbiamo verificare alcune cose:
Il repository si configura nel file /etc/apt/sources.list
, questo è il contenuto tipico:
deb http://ftp.us.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.us.debian.org/debian/ lenny main contrib non-free
La prima colonna indica il tipo di pacchetti presenti: pacchetti precompilati (deb) oppure pacchetti con i sorgenti (deb-src), quindi viene riportato l'URL. Bisogna anche indicare la versione della distribuzione desiderata per nome (lenny, come in questo caso) oppure per stato (testing). L'ultima parte indica che vogliamo attingere all'archivio principale (main), ma anche all'archivio dei pacchetti non-free e contrib, cioè quei pacchetti che non fanno propriamente parte di Debian magari per qualche restrizione sulla licenza d'uso.
Se l'accesso a internet avviene tramite proxy HTTP si esegue un comando del tipo:
export http_proxy="http://192.168.50.254:3128/
Se si usa la distribuzione testing è opportuno aggiornare periodicamente l'elenco dei pacchetti disponibili e aggiornare i pacchetti all'ultima versione. Queste operazioni andrebbero effettuate almeno una volta al mese:
apt-get update apt-get upgrade
Se invece si utilizza la distribuzione stable l'operazione di aggiornamento va fatta solo nel caso che venga annunciato sul sito www.debian.org.
Sistemati tutti i prerequisiti, è estremamente semplice installare un pacchetto da riga di comando:
apt-get install apache2
Alcuni comandi interessanti per gestire i pacchetti.
Per vedere quali pacchetti sono installati sul sistema si usa dpkg –list
dpkg --list
Vedere quali file sono stati installati da un pacchetto si usa dpkg -L nome_pacchetto:
dpkg -L apache2.2-common /. /etc /etc/default /etc/default/apache2 /etc/cron.daily /etc/cron.daily/apache2 /etc/init.d ...
Per rimuovere un pacchetto, compresi i file di configurazione, c'è il comando dpkg –purge nome_pacchetto:
dpkg --purge apache2.2-common
Terminata l'installazione del programma, il servizio è già in esecuzione, lo si controlla con il comando ps aux:
ps uax | grep apache root 9015 0.0 1.4 21780 7496 ? Ss Jan13 0:00 /usr/sbin/apache2 -k start www-data 9028 0.0 1.1 21932 5944 ? S Jan13 0:00 /usr/sbin/apache2 -k start www-data 9029 0.0 1.1 21932 5864 ? S Jan13 0:00 /usr/sbin/apache2 -k start www-data 9030 0.0 1.1 21932 5936 ? S Jan13 0:00 /usr/sbin/apache2 -k start www-data 9031 0.0 0.9 21932 4632 ? S Jan13 0:00 /usr/sbin/apache2 -k start www-data 9042 0.0 1.1 21932 5820 ? S Jan13 0:00 /usr/sbin/apache2 -k start www-data 21993 0.0 0.9 21932 4632 ? S Jan14 0:00 /usr/sbin/apache2 -k start root 30981 0.0 0.1 1636 516 pts/0 R+ 10:10 0:00 grep apache
Il programma scrive il proprio log in /var/log/apache2/access.log
, per vedere in tempo reale gli accessi fatti al server web si usa il comando tail -f:
tail -f /var/log/apache2/access.log 88.44.185.233 - - [16/Jan/2008:10:00:31 +0100] "GET /wiki/lib/tpl/sidebar/images/sidebar-border.gif HTTP/1.1" 200 34 "http://paros.rigacci.org/wiki/lib/exe/css.php" "Mozilla/5.0 (X11; U; Linux i686; it; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11"
Per fermare e far ripartire il servizio apache esiste uno script nella directory /etc/init.d/
:
/etc/init.d/apache2 stop /etc/init.d/apache2 start
Molte le opzioni disponibili: stop, start, restart, reload, … Utile l'opzione reload che rilegge il file di configurazione senza fermare il programma.
I file di configurazione sono contenuti nella directory /etc/apache2/
, la struttura di questa directory è stabilita dal pacchettizzatore Debian, non è obbligatorio seguirla, ma è altamente consigliato.
/etc/apache2/sites-available/ | Contiene un file di configurazione per ogni sito web. |
---|---|
/etc/apache2/sites-enabled/ | Se il sito web è attivo, si crea un link al corrispondente file in sites-available . |
/etc/apache2/mods-available/ | File di configurazione per i moduli aggiuntivi di Apache (es PHP). |
/etc/apache2/mods-enabled/ | Contiene dei link simbolici a mods-available per ogni modulo attivo. |
Dopo l'installazione di apache2 l'unico sito web disponibile è definito dal file /etc/apache2/sites-available/default
, il file è suddiviso in sezioni e comprende diverse direttive. La sintassi del file di configurazione è documentata sul sito httpd.apache.org
Il linguaggio PHP estende le capacità del server web, viene distribuito com un modulo per Apache.
Cercano tra i pacchetti Debian si trova il pacchetto php5, si tratta in realtà di un pacchetto fittizio che tramite il meccanismo delle dipendenze installa:
Al termine dell'installazione la configurazione di Apache è già effettuata grazie ai due file di configurazione:
/etc/apache2/mods-available/php5.conf /etc/apache2/mods-available/php5.load
I file di configurazione sono attivi grazie ai due link omonimi che si trovano nella directory /etc/apache2/mods-enabled/
. Per rendere effettiva la configurazione è sufficiente dare il comando
/etc/init.d/apache2 reload
Per testare il funzionamento del modulo è sufficiente creare un file nella DocumentRoot, ad esempio /var/www/prova.php
:
<cope php> <?php phpinfo(); ?> </code>
Puntando un browser sull'indiritto del server web http://ip_address/prova.php si ottiene l'output della funzione phpinfo()
.