====== Configurazione di un server web ====== Appunti dalla lezione del //15 gennaio 2008//: **Configurazione di un server web su sistema Debian GNU/Linux** ===== Panoramica sulle distribuzioni Linux ===== === Debian === **[[wpit>Debian|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 === **[[wpit>Ubuntu|Ubuntu]]** è derivata da Debian, risultato dell'investimento del miliardario sudafricano **[[wpit>Mark_Shuttleworth|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 === **[[wpit>Red_Hat|Red Hat]]** è una delle prima distribuzioni commerciali di GNU/Linux, orientata al segmento enterprise, per chi vuole un prodotto con un supporto commerciale. === Fedora === **[[wpit>Fedora (distribuzione Linux)|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. ===== Debian ===== 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 **[[http://www.debian.org/CD/netinst/|netinst]]** e tutto il resto del software viene prelevato via rete. ===== Ricerca di un pacchetto ===== 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 **[[http://www.debian.org/distrib/packages|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: * **apache2-mpm-worker** l'incarnazione più performante di Apache * **apache2.2-common** file di configurazione, etc. * **apache2-utils** programmi accessori * ... ===== Installazione ===== Prima di installare un pacchetto Debian dobbiamo verificare alcune cose: - Il sistema deve sapere dove prelevare i pacchetti via rete (il repository). - Eventualmente si deve indicare il **proxy HTTP** - Bisogna prelevare l'elenco aggiornato dei pacchetti presenti sul repository Debian. 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 ===== Rimozione di un pacchetto ===== 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 ===== Apache2 ===== 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 **[[http://httpd.apache.org/docs/2.2/|httpd.apache.org]]** ===== Installazione PHP ===== 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: * **libapache2-mod-php5** il vero pacchetto che contiene il modulo per Apache * **php5-common** 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''**: Puntando un browser sull'indiritto del server web **%%http://ip_address/prova.php%%** si ottiene l'output della funzione ''**[[http://www.php.net/manual/it/function.phpinfo.php|phpinfo()]]**''.