LAMP: Linux, Apache, MySQL e PHP: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
 
(33 versioni intermedie di 15 utenti non mostrate)
Riga 1: Riga 1:
==Introduzione==
{{Versioni compatibili|ONLY|Sarge|Etch|}}
Questa guida � dedicata all'installazione dei modem USB contenenti il chipset Conexant su Debian Sarge, ma pu� essere utile anche per l'installazione in release diverse (o, con opportune modifiche di configurazione, in distribuzioni diverse).
__TOC__
I driver utilizzti provengono dal progetto [http://accessrunner.sourceforge.net/ Accessrunner], sono stati rilasciati con licenza GPL e recentemente inclusi nell'albero principale del kernel Linux (dalla versione 2.6.13).


I modem con questo chipset necessitano per funzionare di un modulo del kernel (prima chiamato driver) di nome cxacru che � stato scritto per versioni del kernel Linux dalla 2.6.10 in poi.
{{Warningbox | Questa guida contiene informazioni ormai obsolete come, ad esempio, l'installazione di PHP4.<br /> Per installare un ambiente LAMP in una Debian più recente, si prega di fare riferimento alla seguente guida: [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]}}
Esistono versioni precedenti dello stesso progetto funzionanti per kernel della serie 2.4 e anche qualche adattamento per kernel della serie 2.6 precedenti al 2.6.10, ma non sono pi� mantenuti e pertanto se ne consiglia l'utilizzo solo ad utenti esperti o molto coraggiosi.


Oltre al driver, questi modem necessitano per funzionare anche di un firmware, che in questo caso non � altro che un sistema operativo real-time (si, potrebbe funzionare anche linux, esiste un progetto a riguardo, ma al momento nessuno ha avuto successo con esso. Trovate qualche riferimento alla homepage gi� citata).
== Introduzione ==
A complicare il tutto c'� il fatto che sono state rilasciate, sotto forma di binari gi� compilati, due versioni differenti di questo firmware: una usa "celle ATM impacchettate in frame USB" mentre l'altra usa "frame ethernet su USB". Il progetto Accessrunner supporta solo il primo di questi protocolli.
LAMP è l'acronimo di Linux Apache Mysql Php e indica l'ambiente libero (e anche gratuito in questo caso) di programmazione di applicazioni Web che è possibile costruire dalla somma delle parti di queste eccezionali applicazioni a sorgente aperto.
Se vi capitasse di avere un modem che viene equipaggiato solo con il firmware del secondo tipo (di solito nei CD di installazione ci sono tutti e due), allora per usare il driver accessrunner dovete procurarvi un firmware del primo tipo da qualche parte in rete (eventualmente provate a postare nel forum).


==Verificare se il modem � supportato==
Questa guida non fornisce alcun elemento per la configurazione ottimale dei server presi in esame (Apache e MySQL). Essa non è intesa ad amministrare tali servizi su macchine in produzione, ma solo a fornire all'utente domestico e allo sviluppatore web un ambiente correttamente configurato senza introdurre sensibili rischi per la sicurezza del computer usato.
Prima di iniziare l'installazione � necessario verificare che il modem in possesso sia supportato dal progetto. Per fare questo � necessario collegare il modem ad una porta usb. In un terminale digitiamo


<pre>$ less /proc/bus/usb/devices </pre>
Per il dettaglio sulla configurazione di quanto preso in esame Vi invitiamo pertanto a visitare in primo luogo i siti [http://httpd.apache.org Httpd Apache], [http://www.php.net PHP.net] e [http://www.mysql.org MySQL.org] e, quando presenti, le guide specifiche messe a disposizione da questa Community.


si otterr� una serie di informazioni su tutte le periferiche usb che avete nel pc.  
Buona lettura!
La parte che ci interessa � questa:
 
<pre>
== Il server http ==
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
=== Apache ===
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1  
[http://httpd.apache.org/ Apache] è il frutto del lavoro della [http://www.apache.org/ Apache Software Foundation]. Tra le caratteristiche che ne fanno il server HTTP più diffuso evidenziamo che:
P: Vendor=0572 ProdID=cb00 Rev= 0.01   
* è software libero;
S: Manufacturer=-  
* gira sulle più svariate piattaforme (*nix, Windows, ecc.);
S: Product=ADSL USB MODEM
* è sviluppato in accordo con le più recenti specifiche per i servizi http.
S: SerialNumber=55473201
Secondo [http://news.netcraft.com/archives/web_server_survey.html Netcraft] Apache, con una percentuale del 68% (febbraio 2005), è il server http più usato in assoluto.
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
 
I: If#= 0 Alt= 0 #EPs= 7 Cls=00(>ifc ) Sub=00 Prot=00 Driver=none
Apache deve il suo nome all'omonima tribù di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto però che il software è stato inizialmente sviluppato come una serie di patches ad un altro server http, nell'uso comune Apache significa anche "A Patchy Server".
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
 
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
La pronuncia corretta di Apache suona grossomodo come "APACI".
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
 
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
Il progetto Apache è suddiviso principalmente in due rami distinti (ne esiste un terzo, ma è nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente).
E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
==== Apache 1.3 ====
E: Ad=84(I) Atr=03(Int.) MxPS= 8 Ivl=200ms
===== Installazione =====
</pre>
L'installazione nuda e cruda di Apache 1.3 in Debian è di una semplicità disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando:
<pre># apt-get install apache</pre>
al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No".
===== Verifica =====
A questo punto il nostro server web è già attivo, ma possiamo anche verificarlo tramite il comando <code>'''ps'''</code>:
<pre>$ ps aux |grep apache
root      7378  0.0  0.4  4592  2228 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data 7379  0.0  0.4  4592  2364 pts/1    S    12:01  0:00 /usr/sbin/apache
www-data  7380  0.0  0.4  4592  2364 pts/1    S   12:01  0:00 /usr/sbin/apache
www-data  7381  0.0  0.4  4592  2204 pts/1    S    12:01  0:00 /usr/sbin/apache
www-data  7382  0.0  0.4  4592  2204 pts/1    S   12:01  0:00 /usr/sbin/apache
www-data  7383  0.0  0.4  4592  2204 pts/1    S   12:01  0:00 /usr/sbin/apache</pre>
Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo proprietà dell'utente root e ben 5 processi di proprietà dell'utente www-data, come possiamo vedere con il comando <code>'''pstree'''</code>:
<pre>$ pstree -uc |grep apache
    ├─apache─┬─apache(www-data)
    │        ├─apache(www-data)
    │        ├─apache(www-data)
    │        ├─apache(www-data)
    │        └─apache(www-data)</pre>
Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell'utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati.
 
===== Configurazione =====
La configurazione di Apache è un compito estremamente delicato e può richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione.
 
I file di configurazione di Apache risiedono nella directory <code>'''/etc/apache'''</code> al cui interno troviamo svariati file. Quello di cui ci occuperemo qui è il file di controllo principale e cioè <code>'''httpd.conf'''</code>. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo.
 
'''server-pool size'''
Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodiché viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva:
<pre>MinSpareServers 5
MaxSpareServers 10</pre>
Come default Apache genera 5 processi, ma se il carico aumenta può arrivare fino a 10 figli simultanei. Per un sistema domestico è sicuramente eccessivo ed io consiglio di porre queste limitazioni:
<pre>MinSpareServers 1
MaxSpareServers 2</pre>
 
'''Number of servers to start initially'''
Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell'avvio del server. Il default è:
<pre>StartServers 5</pre>
che noi cambieremo in:
<pre>StartServers 1</pre>
 
'''Listen'''
Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. È anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sarà in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema.
 
'''BindAddress'''
Alla riga 199 abbiamo la direttiva che specifica a quale specifico indirizzo IP associare Apache. Come per il punto precedente, lasciamo pure il valore di default.
 
'''ServerName'''
Con questa direttiva (alla linea 276) diciamo ad Apache quale è il suo nome. Questo è particolarmente utile nel caso abbiamo a disposizione un [[FQDN]] (a questo proposito puoi consultare la guida [[DNS dinamici: come ottenerli e configurarli]]).
 
'''DocumentRoot'''
Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va più che bene: ricordatevi quindi che tutti i vostri file che volete pubblicare sul server http dovranno risiedere in <code>'''/var/www'''</code> o in una sua sotto-directory.
 
{{Warningbox|è fondamentale per il funzionamento di Apache che i file che devono essere visibili via Web siano leggibili da parte dell'utente '''www-data''' e che le sotto-directory di <code>/var/www</code> siano raggiungibili dallo stesso utente}}
Questo è il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti:
* metodo standard <pre><nowiki># apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted</nowiki></pre>
* metodo debian init.d <pre><nowiki># /etc/init.d/apache restart
Restarting apache.</nowiki></pre>
Senza dubbio '''apachectl''' è il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente può risultare più comodo consiste nel controllo della sintassi del file di configurazione.<br>
Facciamo un esempio:
<pre># apachectl configtest
Syntax error on line 49 of /etc/apache/httpd.conf:
ServerType takes one argument, 'inetd' or 'standalone'</pre>
lo script mi avvisa che alla riga 49 di <code>httpd.conf</code> c'è un errore di sintassi: la direttiva <code>ServerType</code> supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo la riga incriminata scopro che:
<pre>ServerType is either inetd, or standalone.  Inetd mode is only supported on</pre>
Noto subito che manca il commendo (<code>#</code>) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione:
<pre># apachectl configtest
Syntax OK</pre>
 
Se non abbiamo fatto pasticci, una volta riavviato il server Apache, basterà puntare il nostro browser all'indirizzo '''http://127.0.0.1''' per vedere la pagina di default installata dal manutentore del pacchetto Debian:
[[Immagine:Apache_installazione.png|thumb|center|Pagina di Benvenuto di Apache]]
 
{{box|Nota Bene: Directory home degli utenti|Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l'esempio dell'utente '''pippo''': all'interno di <code>/home/pippo</code> l'utente dovrà semplicemente creare la directory <code>'''public_html'''</code> per poter accedere ai file in essa contenuti attraverso l'indirizzo '''http://127.0.0.1/~pippo/'''}}
 
Ora non ci resta che inserire i nostri file in <code>/var/www</code> o nella nostra <code>public_html</code> per poter cominciare ad usare Apache!
 
===== Supporto SSL =====
Abilitando il supporto a SSL (Secure Socket Layer) è possibile instaurare un canale di comunicazione crittografato tra il nostro server web ed i browser che richiedono le pagine.
 
Tra i vantaggi in termini di sicurezza che l'uso di SSL comporta, segnalo:
* transito di informazioni sensibili (passwords, dati personali, ecc.) in internet attraverso un canale crittografato sicuro;
* accertamento dell'identità del server e/o del client web tramite certificati digitali.
 
Il supporto SSL per Apache può essere abilitato in due modi distinti:
* realizzazione di un nuovo server Apache con supporto SSL (vedi: <code>'''apt-cache show apache-ssl'''</code>);
* implementazione di Apache e Apache SSL nel medesimo server grazie a <code>mod_ssl</code>.


Prendiamo nota dalla riga <tt>P:</tt> dei campi <tt>Vendor</tt> e <tt>ProdID</tt> che identificano il chipset del modem e notiamo che alla voce <tt>Driver</tt> c'� scritto <tt>none</tt>, segno che in effetti state seguendo questa guida per qualcosa ;-).
In questa guida vedremo l'installazione e configurazione di '''mod_ssl'''.
Controllate se Vendor e Product ID del vostro modem corrispondono ad uno dei [http://accessrunner.sourceforge.net/modems.shtml modem supportati].
Se corrispondono ad un modem non supportato, provate a fare una ricerca nella [http://sourceforge.net/mailarchive/forum.php?forum_id=43894 mailing list del progetto] per vedere se (ed eventualmente come) qualcun altro � riuscito a risolvere il vostro problema.  


==L'occorrente per l'installazione==
Procediamo con l'installazione del pacchetto:
Se il � modem supportato possiamo procedere, ma saranno necessarie ancora alcune cose:
*Il compilatore gcc funzionante. Se non l'avete installatelo (� presente nel primo cd di installazione, non vi serve internet):
<pre>
<pre>
aptitude install gcc
# apt-get install libapache-mod-ssl
</pre>
</pre>
*Il driver per Wi.. (mi spiace non riesco a scriverlo ;-)) che dovreste avere in dotazione al modem. Se non l'avete cercate in rete un firmware compatibile per esempio alla Hamlet e saltate il prossimo punto.  
 
*L'utility per estrarre il firmware dal driver Wi... (� pi� forte di me :-D). Se avete una connessione ad internet funzionante potete mettervi in una directory in cui avete diritto di scrittura e digitate
==== Apache 2.0 ====
===== Installazione =====
L'installazione di Apache2 è perfettamente uguale a quella precedentemente illustrata per Apache:
<pre>
<pre>
$ cvs -z3 -d:server:anonymous@cvs.sourceforge.net:/cvsroot/accessrunner co -P utils
# apt-get install apache2-mpm-prefork
</pre>
</pre>
altrimenti dovrete usare un'altro computer connesso ad internet, aprire [http://cvs.sourceforge.net/viewcvs.py/accessrunner/ questa pagina] (che � la simulazione web del cvs) e scaricare i quattro file contenuti nella cartella <tt>utils</tt>.  
 
Ad ogni modo dopo esserci procurati le utils dobbiamo compilarle:
Il [[metapacchetto]] ''apache2'' è presente, ma installa '''apache2-mpm-worker''', che risulta non essere compatibile con '''libapache2-mod-php4'''.
 
===== I diversi pacchetti =====
La pacchettizzazione Debian, però, è leggermente diversa, per poter gestire le nuove caratteristiche introdotte in Apache2: esistono quattro diversi pacchetti di Apache2, ognuno con delle caratteristiche diverse (relativamente alla gestione dei thread e dei child):
; apache2-mpm-perchild : la soluzione adottata in questo pacchetto fa in modo che vengano avviati un numero definito di processi, i quali possono creare dei thread in base al carico della macchina. Una peculiarità è la possibilità di assegnare dei permessi diversi ad ogni processo, vincolarlo ad un singono ''virtual host'', così da gestire facilmente la redistribuzione delle risorse e/o personalizzare il servizio offerto;
; apache2-mpm-prefork : i thread sono disabilitati, e la gestione dei '''pool di processi''' viene gestita come per Apache1 (<code>''MinSpareServers''</code> e <code>''MaxSpareServers''</code> -vedi <code>/etc/apache2/apache2.conf</code>-);
; apache2-mpm-threadpool : pacchetto di transizione;
; apache2-mpm-worker : la soluzione è intermedia rispetto a perchild e prefork.
 
Quello che a noi interessa è '''apache2-mpm-prefork''', visto che è l'unico ad essere compatibile con le librerie che offrono il supporto per php4.
 
===== Verifica =====
Per verificare la corretta installazione di Apache2, è sufficiente aprire un browser ed inserire l'indirizzo http://localhost/.
Se Apache è stato installato correttamente, apparirà una schermata simile a questa:
[[Immagine:Apache2_installazione.png|thumb|center|Schermata di benvenuto di Apache2]]
 
===== Configurazione =====
Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.<br />
Sono però presenti delle sostanziali differenze a livello strutturale, per quanto riguarda la struttura della directory <code>'''/etc/apache2'''</code>, che riguardano l'organizzazione dei file e la gestione dei <code>''VirtualHost''</code> e dei ''moduli''.
 
====== Organizzazione dei file ======
Durante il passaggio da Apache ad Apache2, sono state apportate delle modifiche ai file di configurazione, ai loro nomi e all'organizzazione delle directory contenenti le configurazione dei ''VirtualHost' e dei ''moduli'', il tutto per disporre di un sistema di gestione flessibile e facilmente gestibile:
 
====== File di Configurazione ======
Il file di configurazione di Apache2 si chiama <code>'''apache2.conf'''</code>, ed adotta la stessa sintassi del vecchio file di configurazione <code>'''httpd.conf'''</code>, che è ancora presente nella directory <code>'''/etc/apache2'''</code> e viene richiamato all'interno del file di configurazione generale, per motivi di compatibilità consiglio, comunque, di non utilizzarlo, in quanto è un file di transizione, e in futuro potrebbe venir rimosso da apache2.
 
====== Moduli ======
La gestione dei moduli ha subito una profonda modifica rispetto alla versione 1 di Apache: non è più legata ad un solo file, ma a due directory: <code>'''/etc/apache2/mods-available'''</code> e <code>'''/etc/apache2/mods-enabled'''</code>.
; <code>mods-available</code> : contiene i file che permettono il caricamento dei moduli. I file presenti all'interno di questa directory sono divisibili, tramite le loro estensioni, in due categorie: i file con estensione <code>''.load''</code> contengono le istruzioni necessarie al caricamento dei moduli; i file con estensione <code>''.config''</code>, invece, contengono le eventuali opzioni di configurazione da passare al modulo.
 
; <code>mods-enables</code> : contiene dei link ai file presenti nella directory <code>'''mods-available'''</code>. All'avvio di Apache verranno caricati i moduli i cui file di configurazione presentano un link in questa directory.
 
====== Siti ======
In apache2, a differenza di apache1, tutti i siti vengono gestiti tramite ''siti''.
La struttura utilizzata per la gestione di questi è del tutto simile a quella dei moduli: sono presenti due directory: <code>'''/etc/apache2/sites-available'''</code> e <code>'''/etc/apache2/sites-enabled'''</code> che funzionano esattamente come illustrato precedentemente.
Il concetto è semplice: ogni file presente in <code>'''sites-available'''</code> rappresenta un sito, con tutti i sottodomini associati. Per abilitarli è sufficiente un link simbolico in <code>'''sites-enabled'''</code>.
Anche in questo caso, inoltre, apache2 mette a disposizione due comodi comandi per la gestione dei siti: <code>'''a2ensite'''</code> e <code>'''a2dissite'''</code>, che hanno la funzione, rispettivamente, di attivare e disattivare un sito.
 
L'utilizzo di questi due tool è semplicissimo:
* se si lancia il comando senza parametri, verrà mostrata la lista di tutti i siti disponibili
* se si indica il sito su cui effettuare l'operazione, questa verrà eseguita.
 
Per rendere effettive le modifiche è necessario riavviare apache2.
 
===== Supporto SSL =====
Per Apache2, a differenza di Apache1, non esiste un pacchetto '''apache-ssl''' per attivare il supporto [[ssl]]. Per attivare il supporto ssl è necessario modificare la configurazione di apache.
 
Per abilitare il supporto, e creare i certificati necessari al funzionamento del protocollo ssl, bisogna installare openssl:
<pre>
<pre>
$ cd utils  # o dovunque avete messo i file
# apt-get install openssl
$ make
</pre>
</pre>
*Nel caso in cui il modem si identifichi con il'ID <tt>0xcafe</tt> (<tt>0x</tt> sta per esadecimale), vi serve anche la ROM di boot che scaricate ad esempio cos�
 
Oltre a questo, deve essere abilitato il modulo ''ssl'', con il comando prima descritto per la gestione dei moduli in Apache2:
<pre>
<pre>
$ wget http://www.olitec.com/pub/USBADSLV151-1008fr.tar.gz
# a2enmod ssl
</pre>
</pre>
ora estraete il file WBoot.hex
 
Per la generazione del certificato, apache2 offre il comando:
<pre>
<pre>
$ tar xvfz USBADSLV151-1008fr.tar.gz && cp USBADSL/WBoot.hex .
# apache2-ssl-certificate
</pre>
</pre>
e poi create un programmino C per convertire il file esadecimale in binario, che chiamiamo "programmino.c", fatto cos�:
che, tramite una serie di domande, creerà nella direcotry <code>'''/etc/apache2/ssl/'''</code> due file: <code>''apache.pem''</code> ed il certificato.
{{ Warningbox | In Debian Etch è presente un bug (http://www.mail-archive.com/debian-apache@lists.debian.org/msg08109.html) che riguarda il comando precedente. E' stato suggerito un workaround:
<pre>
<pre>
int main(int argc, char ** argv)
# apt-get install ssl-cert
{
# mkdir /etc/apache2/ssl
unsigned int bp[] = {
# /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
#include "WBoot.hex"
</pre> }}
};
Ora aggiungiamo un ''sito'' con supporto ssl: con il nostro editor preferito creiamo un file di testo in <code>'''/etc/apache2/sites-available'''</code> come nel seguente esempio (il nome del file può essere, ad esempio, <code>'''default-ssl'''</code>):
write(1, bp, sizeof(bp));
}
</pre>
oppure, con un solo comando da copiare e incollare in una shell:
<pre>
<pre>
$ echo "int main(int argc, char ** argv)
NameVirtualHost *:443
{
<VirtualHost *:443>
unsigned int bp[] = {
    SSLEngine on
#include \"WBoot.hex\"
    SSLCertificateFile    /etc/apache2/ssl/apache.pem
};
    SSLCertificateKeyFile /etc/apache2/ssl/apache.pem
write(1, bp, sizeof(bp));
 
}
    ServerAdmin admin@dominio.org
" > programmino.c
    ServerName server.dominio.org
 
    ErrorLog /var/log/apache2/error_ssl.log
    LogLevel warn
    CustomLog /var/log/apache2/access_ssl.log combined
    ServerSignature On
    DocumentRoot /var/www/apache2-default
 
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/apache2-default>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
 
    ScriptAlias /cgi-local/ /var/www/apache2-default/cgi-bin/
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/var/www/apache2-default/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>
 
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>
 
    Alias /icons/ "/usr/share/apache2/icons/"
    Alias /manual/ "/usr/share/doc/apache2-doc/manual/"
 
    <Directory "/usr/share/apache2/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
</pre>
</pre>
compilatelo e rendetelo eseguibile:
<pre>
$ gcc programmino.c -o programmino
$ chmod +x programmino
</pre>
ed eseguitelo in questo modo:
<pre>
./programmino > cxacru-bp.bin
</pre>
*Purtroppo nella attuale stable (sarge) trovate il kernel 2.6.8 quindi, a meno che non abbiate gi installato un kernel 2.6.13 o superiore dovrete usare un PC connesso ad internet per scaricare uno dei seguenti pacchetti:
**il sorgente di un kernel >=2.6.10 nella forma di un pacchetto kernel-source (o linux-source, nella nomenclatura pi recente)
**un pacchetto linux-image >=2.6.13 da installare direttamente
*Nel caso si decida per la compilazione di un kernel <2.6.13 (ma, ribadisco, sempre >=2.6.10) necessario scaricare la patch usbatm che trovate [http://sourceforge.net/project/showfiles.php?group_id=47406 qui]. Conviene sempre prendere l'ultima versione disponibile, che al momento il file usbatm-20050216.tar.bz2.


Da questo punto in avanti supporremo di aver messo tutti i file necessari all'installazione in una directory di lavoro all'interno della vostra home: ~/work/
Molte delle opzioni contenute nell'esempio sono prese pari pari dal file <code>'''/etc/apache2/sites-available/default'''</code>.


==Installazione di linux-image==
Mancano due modifiche, prima di avere il supporto ssl attivo: Apache non è in ascolto sulla porta 443, quella normalmente utilizzata da apache-ssl, e quindi lo dobbiamo istruire modificando il file <code>'''/etc/apache2/ports.conf'''</code> aggiungendo la riga:
Nel caso abbiate optato per l'installazione di un pacchetto linux-image non vi resta altro da fare che installarlo (da root):
<pre>
<pre>
# dpkg -i ~/work/linux-image-2.6.x-xx-xxx.deb
Listen 443
</pre>
</pre>
Verificate che il bootloader, lilo o grub, punti alle giuste immagine del kernel e dell'initrd (vedi  [[Debian_Kernel_Howto#Installazione_nuovo_kernel | installazione nuovo kernel]]) e fate un reboot con il nuovo kernel.
Se tutto andato bene potete saltare il paragrafo sulla compilazione e passare all'installazione del firmware.


==Compilazione e installazione del kernel==
Come ultima cosa, importantissima, bisogna attivare il sito che abbiamo appena creato (sempre utilizzando i comodi comandi che Apache2 ci mette a disposizione). Sarà quindi sufficiente un
Nel caso abbiate deciso di compilare un nuovo kernel installate il pacchetto <tt>kernel-source</tt> (<tt>linux-source</tt>).
Qui supporremo che un utente non privilegiato non abbia diritto di scrittura nella directory <tt>/usr/src</tt> (come imho dovrebbe essere), quindi tutti i comandi successivi devono essere dati da root oppure usando un programma che vi dia pari diritti per queste azioni (per es. <tt>sudo</tt>).
<pre>
<pre>
# dpkg -i ~/work/linux-source-2.6.x-xx-xxx.deb
# a2ensite default-ssl
</pre>
</pre>
questo installer� un archivio compresso contenente il kernel nella directory <tt>/usr/src/</tt>. Andiamo a scompattarlo e applichiamo la patch:
questo se si è scelto di creare un file separato per i siti che avranno il supporto ssl. Un'altra pratica molto diffusa è quella di gestire ogni singolo sito come un file, quindi le direttive per l'abilitazione del supporto ssl vengono scritte all'interno del file ''generale'' di quel sito (in questo caso il file '''default''').
 
Per rendere effettive tutte le modifiche, riavviamo apache:
<pre>
<pre>
# cd /usr/src
# /etc/init.d/apache2 restart
# tar xvfj linux-source-2.6.x-xx-xxx.tar.bz2
# cd linux-source-2.6.x-xx-xxx
# tar xvfj ~/work/usbatm-20050216.tar.bz2
</pre>
</pre>
'''nota bene''': mentre sperimentate con la compilazione del kernel <u>non usate mai</u> la directory <tt>/usr/src/linux</tt> che dovrebbe essere un link simbolico (<tt>man ln</tt>) ai sorgenti del kernel attualmente in uso. Se tutto il nostro procedimento funzioner, alla fine cambierete il link in modo che punti ai sorgenti giusti. Per approfondimenti sull'argomento vedere il [[Debian_Kernel_Howto | debian kernel howto]]


Invece di compilare un kernel da zero (impresa a dir poco titanica) conviene recuperare il config relativo al kernel che state usando, che dovrebbe essere presente nella directory <tt>/boot</tt>, e dovrebbe chiamarsi <tt>config-<versione del kernel></tt> o simili: sempre dalla directory principale dei sorgenti del kernel digitate
==== Far convivere Apache e Apache2 ====
Alcune volte può essere utile far convivere Apache1 e Apache2 sulla stessa macchina (magari durante un periodo di migrazione); a tale proposito, è buona norma modificare il numero della porta su cui uno dei due server è in ascolto.
Normalmente si ''sposta'' Apache2 dalla porta '''80''' alla '''8080''' (sempre se su questa non è configurato un server proxy).
 
Per modificare la porta su cui Apache2 è in ascolto è sufficiente modificare il file <code>'''/etc/apache/ports.conf'''</code> sostituendo al numero '''80''', '''8080'''. Nel file <code>'''ports.conf'''</code> avremo, quindi, una riga come la seguente:
<pre>
<pre>
# cp /boot/config<qualcosa> .config
Listen 8080
</pre>
</pre>
in questo modo avrete un albero dei sorgenti configurato esattamente come il vostro attuale kernel, e da qui potete fare solo le modifiche che vi servono.


A questo punto prima di compilare dobbiamo abilitare alcune opzioni del kernel. Digitate
== Il processore PHP ==
PHP è un [[acronimo ricorsivo]] per "PHP: Hypertext Preprocessor" e cioè "PHP: preprocessore ipertestuale". Questo significa che i nostri script non vengono elaborati dai client (in questo caso dai browser) come ad esempio nel caso di javascript, ma che vengono eseguiti direttamente sul server il quale fornisce ai clients semplici pagine html. Un linguiaggio di questo tipo viene chiamato anche '''server-side''' (lato server), in contrapposizione ai linguaggi '''client-side''' (lato client).
 
La cosa più interessante nell'uso di PHP è che si tratta di un linguaggio estremamente semplice per il principiante, ma che, tuttavia, offre molte prestazioni avanzate al programmatore di professione.
 
Con PHP non siete limitati soltanto ad un output in HTML. Le possibilità di PHP, infatti, includono l'abilità di generare immagini, files PDF e perfino filmati Flash al volo (utilizzando libswf e Ming). Sarete in grado di generare facilmente qualsiasi testo, come XHTML e qualsiasi altro file XML. PHP può autogenerare questi file, e salvarli nel file system, piuttosto che eseguire un printing esterno, o creare server-side cache per contenuti dinamici.
 
Una delle caratteristiche più importanti e significative di PHP è la possibilità di supportare una completa gamma di databases. Scrivere una pagina web collegata ad un database è incredibilmente semplice.
 
PHP fa anche da supporto per dialogare con altri servizi utilizzando i protocolli del tipo LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (in Windows) e innumerevoli altri. Potete anche aprire network sockets ed interagire usando qualsiasi altro protocollo. Inoltre supporta l'interscambio di dati complessi WDDX tra, virtualmente, tutti i linguaggi di programmazione web. A proposito di interconessioni, PHP supporta l'installazione dei JavaObjects e l'utilizzo di questi come oggetti PHP in modo trasparente. Si può anche usare la nostra estensione CORBA per accedere ad oggetti remoti.
{{box|Nota Bene:|Questo elenco delle funzionalità offerte da PHP è tratto dal manuale online di PHP e precisamente dal capitolo [http://it2.php.net/manual/it/intro-whatcando.php Che cosa può fare PHP?]}}
 
=== Installazione ===
Anche installare PHP non è un compito per nulla complesso.
{{Box | Installare PHP5 al posto di PHP4 |Per installare la versione 5 di php è sufficiente sostituire il numero '''4''' con '''5''' ogni volta che compare un pacchetto php4* nel seguito della guida}}
==== PHP e Apache 1.3 ====
Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale:
<pre># apt-get install libapache-mod-php4</pre>
Apt scaricherà il modulo per Apache, le eventuali dipendenze e aggiornerà anche il file di configurazione dei moduli (<code>/etc/apache/modules.conf</code>).
 
Tutto quello che dovremo fare manualmente è di riavviare Apache, altrimenti non ci fornirà gli script Php elaborati, ma ci permetterà unicamente di scaricarli. Come abbiamo già visto nella sezione relativa all'installazione di Apache il comando è:
<pre># apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted</pre>
 
Ora, anche se a livello minimale, Apache è in grado fornire al nostro browser l'output degli script elaborati dal motore PHP. Non ci resta altro da fare che [[#Test|testarne]] il funzionamento.
 
==== PHP e Apache 2.0 ====
Per abilitare il Php in Apache2 bisogna installare il modulo apposito:
<pre>
<pre>
# make menuconfig
# apt-get install libapache2-mod-php4
</pre>
</pre>


Andate alla voce <tt>Device Drivers -> USB support -> USB DSL modem support</tt> ed attivate <tt>USB DSL modem support</tt> e <tt>Conexant AccessRunner USB support</tt>.
Durante l'installazione verrà aggiornata la configurazione di Apache2 per attivare il supporto a php4, inoltre verrà automaticamente riavviato il server Web.


'''Nota''': il driver cxacru deve essere compilato come modulo perch�, probabilmente a causa di un bug, se compilato nel kernel in molti casi viene inizializzato prima che il firmware sia disponibile, e restituisce l'errore "<tt>firmware not found</tt>" anche se in realt� l'avete messo nel posto giusto. Il fatto � che non potendo fare "<tt>rmmod cxacru && modprobe cxacru</tt>", per farlo reinizializzare non vi resterebbe che staccare fisicamente il modem dalla porta usb e riattaccarlo, dopo ogni reboot, e questo pu� essere parecchio seccante!
=== Test ===
Il modo più semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser.


Il resto della configurazione dovrebbe essere gi� a posto, ma controllate per sicurezza.
Possiamo procedere in due modi fondamentalmente: creare uno script nella '''DocumentRoot''' del server web, e cioè <code>'''/var/www'''</code> (se non l'avete modificata in <code>ahttpd.conf</code>) oppure nella nostra '''public_html'''.
Alla voce <tt>Device Drivers -> Networking support </tt>
 
<pre>
Nel caso vogliate creare o spostare files all'interno della DocumentRoot di Apache è indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files!
<M> PPP support
 
<M>  PPP support for async serial ports
Un consiglio personale consiste nell'agire sempre come utente '''www-data''' quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data è sufficiente operare in questo modo:
<M>   PPP support for sync tty ports
<pre>$ whoami
<M>   PPP deflate compression
keltik
<M>   PPP BSD-Compress compression
$ su
<M>   PPP over ATM
Password:
</pre>
# whoami
root
# su - www-data
$ whoami
www-data</pre>
Siamo così passati dal nostro utente normale all'utente root e da questo siamo diventati l'utente www-data (il passaggio tramite l'utente root ci evita di dover fornire la password per www-data). Avendo usato il comando <code>'''su - '''</code> abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data.
 
Ora possiamo operare in tranquillità nella DocumentRoot (che è anche la <code>$HOME</code> dell'utente www-data).


Ala voce <tt>Networking options</tt>
Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale.
<pre>
<M> Asyncronous Transfer Mode
<M>  Classical IP over ATM
[*]    Do NOT send ICMP if no neighbour
</pre>


A questo punto uscite salvando la configurazione attuale e costruite il pacchetto <tt>kernel-source-2.6.x-xx-xxx-Custom.deb</tt> (per approfondimenti vedere [[Debian_Kernel_Howto#Compilazione_del_kernel | Compilazione del kernel]] nel Debian kernel howto):
Usiamo il nostro editor preferito e creiamo il file <code>prova.php</code> che conterrà questo codice:
<pre>
<pre><?php phpinfo(); ?></pre>
# make-kpkg clean
# make-kpkg --initrd kernel-image
</pre>
e installate il pacchetto ottenuto:
<pre>
# dpkg -i ../kernel-image-2.6.x.xx.xxx-Custom.deb
</pre>


Ora verificate che il bootloader (lilo o grub) punti alle immagini giuste di kernel e initrd e poi riavviate.
{{box|Nota Bene|Aldilà di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di '''vi''': questo editor testuale infatti è presente nella quasi totalità dei sistemi operativi *nix, è molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice}}


Se tutto è andato bene, puntando il browser all'indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc).


'''Aggiornamento''': solo recentemente (23/11/2005) sono riuscito nell'intento di far funzionare correttamente il driver cxacru anche se � compilato all'interno del kernel :-D. Questo permette di costruire un kernel monolitico e di disabilitare il supporto per i moduli, cosa senz'altro desiderabile nelle situazioni in cui � necessario un certo grado di sicurezza (PC che fanno da firewall-router, ip fisso, ecc.).
== Il Database Server ==
Poich� la cosa non � per niente banale, e comporta la compilazione di un kernel recente (minimo 2.6.12, ma io ho testato il 2.6.14) e la creazione di un initramfs personalizzato (oltre a qualche configurazione minore in udev), consiglio la cosa solo ad utenti particolarmente avventurosi. Chi vuole cimentarsi mi pu� contattare sul forum.
=== MySQL ===
Passiamo adesso ad installare il server di database MySQL.
<pre># apt-get install mysql-server</pre>
che, oltre al server MySQL, installerà per noi anche il client, alcuni tools e le librerie indispensabili.


==Installazione del firmware==
A questo punto il server MySQL dovrebbe essere installato ed avviato automaticamente. Possiamo controllare usando il solito comando '''ps''' oppure <code>'''/etc/init.d/mysql status'''</code>.
Qualunque metodo abbiate seguito, dopo il reboot dovreste trovare disponibile il modulo <tt>cxacru</tt>, verificate con
{{Warningbox|MySQL inizialmente è accessibile unicamente all'utente '''root''' senza alcuna password.}}
{{box|Nota Bene:|Negli esempi seguenti ho digitando i comandi mysql su righe diverse per renderli più leggibili, ma nulla vieta di scrivere tutto di seguito sulla medesima linea.}}
La nostra prima preoccupazione dovrebbe essere senz'altro quella di impostare una passowrd per l'utente root. Ecco come fare:
<pre>
<pre>
# modprobe -l |grep cxacru
$ mysql -u root
mysql> SET PASSWORD
    -> FOR root@localhost
    -> =
    -> PASSWORD('la_tua_password')
    -> ;
Query OK, 0 rows affected (0.08 sec)
 
mysql> exit
Bye
$
</pre>
</pre>
il comando dovrebbe restituire un output simile a:
{{box|Nota Bene:|Se non funziona il comando <code>'''mysql -u root'''</code> provare con <code>'''mysql -u root -p'''</code> e se richiede la password lasciarla vuota e premere invio.}}
Se ora proviamo a loggarci nuovamente, dovremmo vederci negato l'accesso in questo modo:
<pre>
<pre>
/lib/modules/2.6.x/kernel/drivers/usb/atm/cxacru.ko
$ mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
</pre>
</pre>
se non restituisce nulla significa che c'� stato un errore nei precedenti passaggi.
Riproviamo usando la password che abbiamo scelto in precedenza:
 
Se tutto � andato per il meglio proseguiamo andando a recuperare il CD dei driver per w... ehm, quell'altro S.O.
Cercate nel CD il file <tt>CnxEtU.sys</tt> e copiatelo nella Cartella di lavoro. Ora estraete il firmware e copiatelo nella directory dove hotplug (o udev se usate un sistema pi� recente) si aspetta di trovarlo:
<pre>
<pre>
# cd ~/work
$ mysql -u root -pla_tua_password
# ./utils/cxacru-fw CnxEtU.sys cxacru-fw.bin
Welcome to the MySQL monitor. Commands end with ; or \g.
# cp ~/work/cxacru-fw.bin /lib/firmware
</pre>
</pre>
Se il vostro modem ha il chipset <tt>0xcafe</tt> copiate nella stessa directory anche la ROM di boot, cio� il file <tt>cxacru-bp.bin</tt>.
{{box|Nota Bene:|Lo switch <code>-p</code> usato nel comando <code>''mysql''</code> prevede che la password venga digitata '''senza spazi tra il <code>-p</code> e la password effettiva'''. Non si tratta di un mio errore di battitura!<br> Se invece usiamo lo switch <code>-p</code> senza specificare alcuna password, questa ci verrà richiesta interattivamente.}}
Usare utenti con privilegi alti non è mai una buona idea, per cui provvediamo a creare un utente a cui concederemo i privilegi minimi (ma al quale potremo dare privilegi più alti per database specifici):
<pre>
mysql> GRANT USAGE ON *.*
    -> TO 'utente'@'localhost'
    -> IDENTIFIED BY 'la_tua_password'
    -> ;
Query OK, 0 rows affected (0.02 sec)


A questo punto togliete il modulo <tt>cxacru</tt>, nel caso sia caricato:
mysql> FLUSH PRIVILEGES;
<pre>
Query OK, 0 rows affected (0.04 sec)
# rmmod cxacru
</pre>
</pre>
staccate il modem dalla porta USB nel caso sia attaccato, e poi riattaccate il modem alla porta usb e ricaricate il driver. Tutto questo perche � sempre megio togliere il modulo dal kernel prima di staccare il modem.
Se ora proviamo a loggarci con il nuovo utente, dovremmo riuscire ad autenticarci usando le credenziali specificate con il comando GRANT.
Ora controllate che sia stato trovato il firmware:
 
Ora creiamo un database nuovo:
<pre>
<pre>
$ dmesg | tail
mysql> CREATE DATABASE prova;
Query OK, 1 row affected (0.00 sec)
 
mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| prova    |
| test    |
+----------+
3 rows in set (0.02 sec)
</pre>
</pre>
il comando dovrebbe restituire qualcosa di simile a
ed assegnamo all'utente che abbiamo creato in precedenza piena diritti di amministrazione al database:
<pre>
<pre>
usbcore: registered new driver cxacru
mysql> GRANT ALL PRIVILEGES
cxacru 1-1:1.0: found firmware cxacru-fw.bin
    -> ON prova.*
    -> TO 'utente'@'localhost'
    -> ;
Query OK, 0 rows affected (0.02 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.04 sec)
</pre>
</pre>
Nel caso, una volta caricato il firmware, riceviate, sempre in <tt>dmesg</tt>, il messaggio:
Se ora ci logghiamo con il nostro utente e chiediamo una lista dei database, vedremo unicamente quelli su cui abbiamo privilegi:
<pre>
<pre>
cxacru 1-1:1.0: poll status: error -5
mysql> show databases;
+----------+
| Database |
+----------+
| prova    |
+----------+
1 row in set (0.00 sec)
</pre>
</pre>
significa che occorre una versione pi� recente del vostro firmware. In effetti non � assolutamente detto che i driver forniti dal produttore del modem siano aggiornati, ma potete senz'altro trovare un firmware aggiornato in rete (o eventualmente postando nel forum).
Selezioniamo il database su cui operare col comando:
 
Ora il driver del modem dovrebbe gi� essere in funzione e il led relativo alla linea ADSL dovrebbe lampeggiare, segno che sta cercando la sincronizzazione con la linea. Mentre il led lampeggia avrete che:
<pre>
<pre>
$ cat /proc/net/atm/cxacru\:0
mysql> USE prova;
ADSL USB MODEM (usb-0000:00:07.2-1)
MAC: xx:yy:zz:bla bla bla
AAL5: tx 9363 ( 0 err ), rx 14299 ( 0 err, 0 drop )
Line down
</pre>
</pre>
e anche:
Ora creiamo una tabella all'interno del database ''prova'', giusto per verificare che sia tutto a posto:
<pre>
<pre>
$ tail /var/log/messages
mysql> CREATE TABLE tabella (colonna1 VARCHAR(20), colonna2 VARCHAR(20));
Oct 5 08:06:00 muretto kernel: ATM dev 0: ADSL line: attempting to activate
Query OK, 0 rows affected (0.42 sec)
Oct 5 08:06:10 muretto kernel: ATM dev 0: ADSL line: down
 
Oct 5 08:06:15 muretto kernel: ATM dev 0: ADSL line: attempting to activate
mysql> DESCRIBE tabella;
Oct 5 08:06:35 muretto kernel: ATM dev 0: ADSL line: down
+----------+-------------+------+-----+---------+-------+
Oct 5 08:06:40 muretto kernel: ATM dev 0: ADSL line: attempting to activate
| Field    | Type        | Null | Key | Default | Extra |
Oct 5 08:08:00 muretto kernel: ATM dev 0: ADSL line: channel analysis
+----------+-------------+------+-----+---------+-------+
Oct 5 08:08:05 muretto kernel: ATM dev 0: ADSL line: up (4832 kb/s down | 320 kb/s up)
| colonna1 | varchar(20) | YES  |    | NULL    |      |
| colonna2 | varchar(20) | YES  |    | NULL    |      |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)
</pre>
</pre>
qui alle 8.08.00 il modem si sincronizzato con il segnale ADSL .


Una volta agganciato il segnale ADSL si avr�:
Se non abbiamo ottenuto errori passiamo al punto successivo, altrimenti verifichiamo tutti i passaggi precedenti.
 
=== MySQL e PHP ===
Per poter usare MySQL attraverso pagine PHP dobbiamo installare il modulo '''php4-mysql''' e riavviare Apache:
<pre>
<pre>
$ cat /proc/net/atm/cxacru\:0
# apt-get install php4-mysql
appariranno di seguito queste informazioni
# apachectl graceful
ADSL USB MODEM (usb-0000:00:07.2-1)
/usr/sbin/apachectl graceful: httpd gracefully restarted
MAC: xx:yy:zz:bla bla bla
AAL5: tx 9363 ( 0 err ), rx 14299 ( 0 err, 0 drop )
Line up
</pre>
</pre>
Ci siamo: il driver del modem perfettamente funzionante.


==Impostazione della connessione==
Ora possiamo verificare se siamo effettivamente in grado di accedere a MySQL.<br>
Prima di iniziare dovete sapere:
La procedura è simile a quella vista in precedenza per testare la corretta installazione di PHP:
*userid e password forniti dal provider (di solito per Telecom Alice l'userid e la password sono entrambi uguali a <tt>aliceadsl</tt>)
* logghiamoci come utente root oppure spostiamoci nella nostra directory <code>'''public_html'''</code>;
*VPI e VCI del provider (nel caso di Telecom Alice sono 8 e 35).
* creaimo il file <code>mysql.php</code> che conterrà questo codice:
*IP e DNS del nostro provider nel caso di una connessione con IP statico.
<pre><nowiki>
<?php


Iniziamo con la configurazione.
// si collega al database, altrimenti esce e ritorna un errore
Create il file <tt>/etc/ppp/peers/adsl</tt> in questo modo:
 
<pre>
mysql_connect('localhost','utente','la_tua_password') or die(mysql_error());
# echo "noauth
 
noipdefault
?></nowiki>
usepeerdns
defaultroute
persist
plugin pppoatm.so 8.35
user \"userid\"
" > /etc/ppp/peers/adsl
</pre>
</pre>
oppure copiate nella directory <tt>/etc/ppp/peers/</tt> il file <tt>/usr/share/doc/ppp/examples/peers-pppoa</tt>
* apriamo un browser e puntiamolo alla pagina appena creata (http://localhost/mysql.php oppure http://localhost/~utente/mysql.php);
** se quello che vediamo è una pagina bianca, significa che PHP è in grado di dialogare con MySQL;
** se otteniamo l' errore <code>'''Fatal error: call to undefined function - mysql_connect()'''</code> significa che il modulo php4-mysql non è stato installato correttamente o che non abbiamo riavviato Apache;
** se otteniamo l' errore <code>'''Warning: mysql_connect(): Access denied for user: xxxxxxxx'''</code> significa che abbiamo scritto male le credenziali da utilizzare.
 
=== PhpMyAdmin ===
Questo software è un validissimo alleato nel lavoro quotidiano di manutenere un server MySQL, anche se in locale e/o domestico: tra i suoi pregi segnalo l'ottima usabilità e l' interfaccia web.
 
Questo pacchetto si installa con il comando:
<pre>
<pre>
# cp /usr/share/doc/ppp/examples/peers-pppoa /etc/ppp/peers/
# apt-get install phpmyadmin php4 php4-gd
</pre>
</pre>
In entrambi i casi modificate la riga <tt>user "userid"</tt> mettendo il vostro userid ;-), con o senza le virgolette: non ha importanza.
Ci verrà quindi chiesto quale server http dovrà essere riconfigurato automaticamente. In base alla versione di Apache che abbiamo installato in precedenza possiamo scegliere '''apache''' oppure '''apache2'''.
 
Aggiungiamo una riga al file di configurazione Apache:


Inserite userid e password nei file <tt>/etc/ppp/pap-secrets</tt> e <tt>/etc/ppp/chap-secrets</tt>:
<pre>
<pre>
# echo "userid  *  password" >> /etc/ppp/pap-secrets
# phpMyAdmin Configuration
# echo "userid  *  password" >> /etc/ppp/chap-secrets
Include /etc/phpmyadmin/apache.conf
</pre>
</pre>


A questo punto fate partire la connessione con il comando
Al termine della configurazione scegliamo di riavviare Apache e cominciamo subito ad utilizzare PhpMyAdmin puntando il browser all'indirizzo http://localhost/phpmyadmin/
<pre>
 
# pon adsl
[[Immagine:Phpmyadmin_table.png|thumb|center|Schermata di esempio di PhpMyAdmin]]
</pre>
ed il gioco � fatto.  


Controllate in <tt>/var/log/messagges</tt> se tutto funziona regolarmente:
== Conclusioni ==
<pre>
Ora si ha a disposizione un sistema completo per l'utilizzo di script in php (ed anche per il loro sviluppo).
# tail /var/log/messagges
Jun 3 00:07:40 localhost pppd[5101]: Plugin /usr/lib/pppd/2.4.2/pppoatm.so loaded.
Jun 3 00:07:40 localhost kernel: PPP generic driver version 2.4.2
Jun 3 00:07:40 localhost pppd[5101]: PPPoATM plugin_init
Jun 3 00:07:40 localhost pppd[5101]: PPPoATM setdevname_pppoatm - SUCCESS:8.35
Jun 3 00:07:40 localhost pppd[5126]: pppd 2.4.2 started by root, uid 0
Jun 3 00:07:40 localhost pppd[5126]: Using interface ppp0
Jun 3 00:07:40 localhost pppd[5126]: Connect: ppp0 <--> 8.35
Jun 3 00:07:43 localhost pppd[5126]: PAP authentication succeeded
Jun 3 00:07:43 localhost pppd[5126]: local IP address 82.59.0.222
Jun 3 00:07:43 localhost pppd[5126]: remote IP address 192.168.100.1
Jun 3 00:07:43 localhost pppd[5126]: primary DNS address 80.17.212.208
Jun 3 00:07:43 localhost pppd[5126]: secondary DNS address 151.99.125.1
</pre>


Controllate in <tt>/etc/resolv.conf</tt> se i DNS sono corretti altrimenti li dovrete inserire a mano. Per esempio un <tt>/etc/resolv.conf</tt> con i DNS di libero sarebbe:
{{Autori
<pre>
|Autore = [[Utente:Keltik|Keltik]] 07:20, Giu 20, 2005 (EDT)
$ cat /etc/resolv.conf
|Estesa_da =
search libero.it
:[[Utente:MaXeR|MaXeR]] 07:59, Lug 18, 2005 (EDT)
nameserver 193.70.192.25
}}
nameserver 193.70.152.25
</pre>


Buona navigazione!
[[Categoria:Database server]]
----
[[Categoria:Web server]]
: [[Utente:Tindal|Tindal]]
[[Categoria:PHP]]

Versione attuale delle 16:00, 17 apr 2017

Debian-swirl.png Versioni Compatibili

soltanto:
Debian 3.1 "sarge"
Debian 4 "etch"
Warning.png ATTENZIONE
Questa guida contiene informazioni ormai obsolete come, ad esempio, l'installazione di PHP4.
Per installare un ambiente LAMP in una Debian più recente, si prega di fare riferimento alla seguente guida: Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5


Introduzione

LAMP è l'acronimo di Linux Apache Mysql Php e indica l'ambiente libero (e anche gratuito in questo caso) di programmazione di applicazioni Web che è possibile costruire dalla somma delle parti di queste eccezionali applicazioni a sorgente aperto.

Questa guida non fornisce alcun elemento per la configurazione ottimale dei server presi in esame (Apache e MySQL). Essa non è intesa ad amministrare tali servizi su macchine in produzione, ma solo a fornire all'utente domestico e allo sviluppatore web un ambiente correttamente configurato senza introdurre sensibili rischi per la sicurezza del computer usato.

Per il dettaglio sulla configurazione di quanto preso in esame Vi invitiamo pertanto a visitare in primo luogo i siti Httpd Apache, PHP.net e MySQL.org e, quando presenti, le guide specifiche messe a disposizione da questa Community.

Buona lettura!

Il server http

Apache

Apache è il frutto del lavoro della Apache Software Foundation. Tra le caratteristiche che ne fanno il server HTTP più diffuso evidenziamo che:

  • è software libero;
  • gira sulle più svariate piattaforme (*nix, Windows, ecc.);
  • è sviluppato in accordo con le più recenti specifiche per i servizi http.

Secondo Netcraft Apache, con una percentuale del 68% (febbraio 2005), è il server http più usato in assoluto.

Apache deve il suo nome all'omonima tribù di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto però che il software è stato inizialmente sviluppato come una serie di patches ad un altro server http, nell'uso comune Apache significa anche "A Patchy Server".

La pronuncia corretta di Apache suona grossomodo come "APACI".

Il progetto Apache è suddiviso principalmente in due rami distinti (ne esiste un terzo, ma è nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente).

Apache 1.3

Installazione

L'installazione nuda e cruda di Apache 1.3 in Debian è di una semplicità disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando:

# apt-get install apache

al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No".

Verifica

A questo punto il nostro server web è già attivo, ma possiamo anche verificarlo tramite il comando ps:

$ ps aux |grep apache
root      7378  0.0  0.4   4592  2228 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7379  0.0  0.4   4592  2364 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7380  0.0  0.4   4592  2364 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7381  0.0  0.4   4592  2204 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7382  0.0  0.4   4592  2204 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7383  0.0  0.4   4592  2204 pts/1    S    12:01   0:00 /usr/sbin/apache

Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo proprietà dell'utente root e ben 5 processi di proprietà dell'utente www-data, come possiamo vedere con il comando pstree:

$ pstree -uc |grep apache
     ├─apache─┬─apache(www-data)
     │        ├─apache(www-data)
     │        ├─apache(www-data)
     │        ├─apache(www-data)
     │        └─apache(www-data)

Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell'utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati.

Configurazione

La configurazione di Apache è un compito estremamente delicato e può richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione.

I file di configurazione di Apache risiedono nella directory /etc/apache al cui interno troviamo svariati file. Quello di cui ci occuperemo qui è il file di controllo principale e cioè httpd.conf. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo.

server-pool size Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodiché viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva:

MinSpareServers 5
MaxSpareServers 10

Come default Apache genera 5 processi, ma se il carico aumenta può arrivare fino a 10 figli simultanei. Per un sistema domestico è sicuramente eccessivo ed io consiglio di porre queste limitazioni:

MinSpareServers 1
MaxSpareServers 2

Number of servers to start initially Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell'avvio del server. Il default è:

StartServers 5

che noi cambieremo in:

StartServers 1

Listen Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. È anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sarà in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema.

BindAddress Alla riga 199 abbiamo la direttiva che specifica a quale specifico indirizzo IP associare Apache. Come per il punto precedente, lasciamo pure il valore di default.

ServerName Con questa direttiva (alla linea 276) diciamo ad Apache quale è il suo nome. Questo è particolarmente utile nel caso abbiamo a disposizione un FQDN (a questo proposito puoi consultare la guida DNS dinamici: come ottenerli e configurarli).

DocumentRoot Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va più che bene: ricordatevi quindi che tutti i vostri file che volete pubblicare sul server http dovranno risiedere in /var/www o in una sua sotto-directory.

Warning.png ATTENZIONE
è fondamentale per il funzionamento di Apache che i file che devono essere visibili via Web siano leggibili da parte dell'utente www-data e che le sotto-directory di /var/www siano raggiungibili dallo stesso utente


Questo è il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti:

  • metodo standard
    # apachectl graceful

/usr/sbin/apachectl graceful: httpd gracefully restarted

  • metodo debian init.d
    # /etc/init.d/apache restart

Restarting apache.

Senza dubbio apachectl è il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente può risultare più comodo consiste nel controllo della sintassi del file di configurazione.
Facciamo un esempio:

# apachectl configtest
Syntax error on line 49 of /etc/apache/httpd.conf:
ServerType takes one argument, 'inetd' or 'standalone'

lo script mi avvisa che alla riga 49 di httpd.conf c'è un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo la riga incriminata scopro che:

ServerType is either inetd, or standalone.  Inetd mode is only supported on

Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione:

# apachectl configtest
Syntax OK

Se non abbiamo fatto pasticci, una volta riavviato il server Apache, basterà puntare il nostro browser all'indirizzo http://127.0.0.1 per vedere la pagina di default installata dal manutentore del pacchetto Debian:

Pagina di Benvenuto di Apache
Info.png Nota Bene: Directory home degli utenti
Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l'esempio dell'utente pippo: all'interno di /home/pippo l'utente dovrà semplicemente creare la directory public_html per poter accedere ai file in essa contenuti attraverso l'indirizzo http://127.0.0.1/~pippo/


Ora non ci resta che inserire i nostri file in /var/www o nella nostra public_html per poter cominciare ad usare Apache!

Supporto SSL

Abilitando il supporto a SSL (Secure Socket Layer) è possibile instaurare un canale di comunicazione crittografato tra il nostro server web ed i browser che richiedono le pagine.

Tra i vantaggi in termini di sicurezza che l'uso di SSL comporta, segnalo:

  • transito di informazioni sensibili (passwords, dati personali, ecc.) in internet attraverso un canale crittografato sicuro;
  • accertamento dell'identità del server e/o del client web tramite certificati digitali.

Il supporto SSL per Apache può essere abilitato in due modi distinti:

  • realizzazione di un nuovo server Apache con supporto SSL (vedi: apt-cache show apache-ssl);
  • implementazione di Apache e Apache SSL nel medesimo server grazie a mod_ssl.

In questa guida vedremo l'installazione e configurazione di mod_ssl.

Procediamo con l'installazione del pacchetto:

# apt-get install libapache-mod-ssl

Apache 2.0

Installazione

L'installazione di Apache2 è perfettamente uguale a quella precedentemente illustrata per Apache:

# apt-get install apache2-mpm-prefork

Il metapacchetto apache2 è presente, ma installa apache2-mpm-worker, che risulta non essere compatibile con libapache2-mod-php4.

I diversi pacchetti

La pacchettizzazione Debian, però, è leggermente diversa, per poter gestire le nuove caratteristiche introdotte in Apache2: esistono quattro diversi pacchetti di Apache2, ognuno con delle caratteristiche diverse (relativamente alla gestione dei thread e dei child):

apache2-mpm-perchild
la soluzione adottata in questo pacchetto fa in modo che vengano avviati un numero definito di processi, i quali possono creare dei thread in base al carico della macchina. Una peculiarità è la possibilità di assegnare dei permessi diversi ad ogni processo, vincolarlo ad un singono virtual host, così da gestire facilmente la redistribuzione delle risorse e/o personalizzare il servizio offerto;
apache2-mpm-prefork
i thread sono disabilitati, e la gestione dei pool di processi viene gestita come per Apache1 (MinSpareServers e MaxSpareServers -vedi /etc/apache2/apache2.conf-);
apache2-mpm-threadpool
pacchetto di transizione;
apache2-mpm-worker
la soluzione è intermedia rispetto a perchild e prefork.

Quello che a noi interessa è apache2-mpm-prefork, visto che è l'unico ad essere compatibile con le librerie che offrono il supporto per php4.

Verifica

Per verificare la corretta installazione di Apache2, è sufficiente aprire un browser ed inserire l'indirizzo http://localhost/. Se Apache è stato installato correttamente, apparirà una schermata simile a questa:

Schermata di benvenuto di Apache2
Configurazione

Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.
Sono però presenti delle sostanziali differenze a livello strutturale, per quanto riguarda la struttura della directory /etc/apache2, che riguardano l'organizzazione dei file e la gestione dei VirtualHost e dei moduli.

Organizzazione dei file

Durante il passaggio da Apache ad Apache2, sono state apportate delle modifiche ai file di configurazione, ai loro nomi e all'organizzazione delle directory contenenti le configurazione dei VirtualHost' e dei moduli, il tutto per disporre di un sistema di gestione flessibile e facilmente gestibile:

File di Configurazione

Il file di configurazione di Apache2 si chiama apache2.conf, ed adotta la stessa sintassi del vecchio file di configurazione httpd.conf, che è ancora presente nella directory /etc/apache2 e viene richiamato all'interno del file di configurazione generale, per motivi di compatibilità consiglio, comunque, di non utilizzarlo, in quanto è un file di transizione, e in futuro potrebbe venir rimosso da apache2.

Moduli

La gestione dei moduli ha subito una profonda modifica rispetto alla versione 1 di Apache: non è più legata ad un solo file, ma a due directory: /etc/apache2/mods-available e /etc/apache2/mods-enabled.

mods-available
contiene i file che permettono il caricamento dei moduli. I file presenti all'interno di questa directory sono divisibili, tramite le loro estensioni, in due categorie: i file con estensione .load contengono le istruzioni necessarie al caricamento dei moduli; i file con estensione .config, invece, contengono le eventuali opzioni di configurazione da passare al modulo.
mods-enables
contiene dei link ai file presenti nella directory mods-available. All'avvio di Apache verranno caricati i moduli i cui file di configurazione presentano un link in questa directory.
Siti

In apache2, a differenza di apache1, tutti i siti vengono gestiti tramite siti. La struttura utilizzata per la gestione di questi è del tutto simile a quella dei moduli: sono presenti due directory: /etc/apache2/sites-available e /etc/apache2/sites-enabled che funzionano esattamente come illustrato precedentemente. Il concetto è semplice: ogni file presente in sites-available rappresenta un sito, con tutti i sottodomini associati. Per abilitarli è sufficiente un link simbolico in sites-enabled. Anche in questo caso, inoltre, apache2 mette a disposizione due comodi comandi per la gestione dei siti: a2ensite e a2dissite, che hanno la funzione, rispettivamente, di attivare e disattivare un sito.

L'utilizzo di questi due tool è semplicissimo:

  • se si lancia il comando senza parametri, verrà mostrata la lista di tutti i siti disponibili
  • se si indica il sito su cui effettuare l'operazione, questa verrà eseguita.

Per rendere effettive le modifiche è necessario riavviare apache2.

Supporto SSL

Per Apache2, a differenza di Apache1, non esiste un pacchetto apache-ssl per attivare il supporto ssl. Per attivare il supporto ssl è necessario modificare la configurazione di apache.

Per abilitare il supporto, e creare i certificati necessari al funzionamento del protocollo ssl, bisogna installare openssl:

# apt-get install openssl

Oltre a questo, deve essere abilitato il modulo ssl, con il comando prima descritto per la gestione dei moduli in Apache2:

# a2enmod ssl

Per la generazione del certificato, apache2 offre il comando:

# apache2-ssl-certificate

che, tramite una serie di domande, creerà nella direcotry /etc/apache2/ssl/ due file: apache.pem ed il certificato.

Warning.png ATTENZIONE
In Debian Etch è presente un bug (http://www.mail-archive.com/debian-apache@lists.debian.org/msg08109.html) che riguarda il comando precedente. E' stato suggerito un workaround:
# apt-get install ssl-cert
# mkdir /etc/apache2/ssl
# /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem


Ora aggiungiamo un sito con supporto ssl: con il nostro editor preferito creiamo un file di testo in /etc/apache2/sites-available come nel seguente esempio (il nome del file può essere, ad esempio, default-ssl):

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.pem
    SSLCertificateKeyFile /etc/apache2/ssl/apache.pem

    ServerAdmin admin@dominio.org
    ServerName server.dominio.org

    ErrorLog /var/log/apache2/error_ssl.log
    LogLevel warn
    CustomLog /var/log/apache2/access_ssl.log combined
    ServerSignature On
    DocumentRoot /var/www/apache2-default

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/apache2-default>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-local/ /var/www/apache2-default/cgi-bin/
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 
    <Directory "/var/www/apache2-default/cgi-bin">
         AllowOverride None
         Options None
         Order allow,deny
         Allow from all
    </Directory>

    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>

    Alias /icons/ "/usr/share/apache2/icons/"
    Alias /manual/ "/usr/share/doc/apache2-doc/manual/"
   
    <Directory "/usr/share/apache2/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Molte delle opzioni contenute nell'esempio sono prese pari pari dal file /etc/apache2/sites-available/default.

Mancano due modifiche, prima di avere il supporto ssl attivo: Apache non è in ascolto sulla porta 443, quella normalmente utilizzata da apache-ssl, e quindi lo dobbiamo istruire modificando il file /etc/apache2/ports.conf aggiungendo la riga:

Listen 443

Come ultima cosa, importantissima, bisogna attivare il sito che abbiamo appena creato (sempre utilizzando i comodi comandi che Apache2 ci mette a disposizione). Sarà quindi sufficiente un

# a2ensite default-ssl

questo se si è scelto di creare un file separato per i siti che avranno il supporto ssl. Un'altra pratica molto diffusa è quella di gestire ogni singolo sito come un file, quindi le direttive per l'abilitazione del supporto ssl vengono scritte all'interno del file generale di quel sito (in questo caso il file default).

Per rendere effettive tutte le modifiche, riavviamo apache:

# /etc/init.d/apache2 restart

Far convivere Apache e Apache2

Alcune volte può essere utile far convivere Apache1 e Apache2 sulla stessa macchina (magari durante un periodo di migrazione); a tale proposito, è buona norma modificare il numero della porta su cui uno dei due server è in ascolto. Normalmente si sposta Apache2 dalla porta 80 alla 8080 (sempre se su questa non è configurato un server proxy).

Per modificare la porta su cui Apache2 è in ascolto è sufficiente modificare il file /etc/apache/ports.conf sostituendo al numero 80, 8080. Nel file ports.conf avremo, quindi, una riga come la seguente:

Listen 8080

Il processore PHP

PHP è un acronimo ricorsivo per "PHP: Hypertext Preprocessor" e cioè "PHP: preprocessore ipertestuale". Questo significa che i nostri script non vengono elaborati dai client (in questo caso dai browser) come ad esempio nel caso di javascript, ma che vengono eseguiti direttamente sul server il quale fornisce ai clients semplici pagine html. Un linguiaggio di questo tipo viene chiamato anche server-side (lato server), in contrapposizione ai linguaggi client-side (lato client).

La cosa più interessante nell'uso di PHP è che si tratta di un linguaggio estremamente semplice per il principiante, ma che, tuttavia, offre molte prestazioni avanzate al programmatore di professione.

Con PHP non siete limitati soltanto ad un output in HTML. Le possibilità di PHP, infatti, includono l'abilità di generare immagini, files PDF e perfino filmati Flash al volo (utilizzando libswf e Ming). Sarete in grado di generare facilmente qualsiasi testo, come XHTML e qualsiasi altro file XML. PHP può autogenerare questi file, e salvarli nel file system, piuttosto che eseguire un printing esterno, o creare server-side cache per contenuti dinamici.

Una delle caratteristiche più importanti e significative di PHP è la possibilità di supportare una completa gamma di databases. Scrivere una pagina web collegata ad un database è incredibilmente semplice.

PHP fa anche da supporto per dialogare con altri servizi utilizzando i protocolli del tipo LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (in Windows) e innumerevoli altri. Potete anche aprire network sockets ed interagire usando qualsiasi altro protocollo. Inoltre supporta l'interscambio di dati complessi WDDX tra, virtualmente, tutti i linguaggi di programmazione web. A proposito di interconessioni, PHP supporta l'installazione dei JavaObjects e l'utilizzo di questi come oggetti PHP in modo trasparente. Si può anche usare la nostra estensione CORBA per accedere ad oggetti remoti.

Info.png Nota Bene:
Questo elenco delle funzionalità offerte da PHP è tratto dal manuale online di PHP e precisamente dal capitolo Che cosa può fare PHP?


Installazione

Anche installare PHP non è un compito per nulla complesso.

Info.png Installare PHP5 al posto di PHP4
Per installare la versione 5 di php è sufficiente sostituire il numero 4 con 5 ogni volta che compare un pacchetto php4* nel seguito della guida

PHP e Apache 1.3

Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale:

# apt-get install libapache-mod-php4

Apt scaricherà il modulo per Apache, le eventuali dipendenze e aggiornerà anche il file di configurazione dei moduli (/etc/apache/modules.conf).

Tutto quello che dovremo fare manualmente è di riavviare Apache, altrimenti non ci fornirà gli script Php elaborati, ma ci permetterà unicamente di scaricarli. Come abbiamo già visto nella sezione relativa all'installazione di Apache il comando è:

# apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted

Ora, anche se a livello minimale, Apache è in grado fornire al nostro browser l'output degli script elaborati dal motore PHP. Non ci resta altro da fare che testarne il funzionamento.

PHP e Apache 2.0

Per abilitare il Php in Apache2 bisogna installare il modulo apposito:

# apt-get install libapache2-mod-php4

Durante l'installazione verrà aggiornata la configurazione di Apache2 per attivare il supporto a php4, inoltre verrà automaticamente riavviato il server Web.

Test

Il modo più semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser.

Possiamo procedere in due modi fondamentalmente: creare uno script nella DocumentRoot del server web, e cioè /var/www (se non l'avete modificata in ahttpd.conf) oppure nella nostra public_html.

Nel caso vogliate creare o spostare files all'interno della DocumentRoot di Apache è indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files!

Un consiglio personale consiste nell'agire sempre come utente www-data quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data è sufficiente operare in questo modo:

$ whoami
keltik
$ su
Password:
# whoami
root
# su - www-data
$ whoami
www-data

Siamo così passati dal nostro utente normale all'utente root e da questo siamo diventati l'utente www-data (il passaggio tramite l'utente root ci evita di dover fornire la password per www-data). Avendo usato il comando su - abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data.

Ora possiamo operare in tranquillità nella DocumentRoot (che è anche la $HOME dell'utente www-data).

Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale.

Usiamo il nostro editor preferito e creiamo il file prova.php che conterrà questo codice:

<?php phpinfo(); ?>
Info.png Nota Bene
Aldilà di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di vi: questo editor testuale infatti è presente nella quasi totalità dei sistemi operativi *nix, è molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice


Se tutto è andato bene, puntando il browser all'indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc).

Il Database Server

MySQL

Passiamo adesso ad installare il server di database MySQL.

# apt-get install mysql-server

che, oltre al server MySQL, installerà per noi anche il client, alcuni tools e le librerie indispensabili.

A questo punto il server MySQL dovrebbe essere installato ed avviato automaticamente. Possiamo controllare usando il solito comando ps oppure /etc/init.d/mysql status.

Warning.png ATTENZIONE
MySQL inizialmente è accessibile unicamente all'utente root senza alcuna password.


Info.png Nota Bene:
Negli esempi seguenti ho digitando i comandi mysql su righe diverse per renderli più leggibili, ma nulla vieta di scrivere tutto di seguito sulla medesima linea.

La nostra prima preoccupazione dovrebbe essere senz'altro quella di impostare una passowrd per l'utente root. Ecco come fare:

$ mysql -u root
mysql> SET PASSWORD
    -> FOR root@localhost
    -> =
    -> PASSWORD('la_tua_password')
    -> ;
Query OK, 0 rows affected (0.08 sec)

mysql> exit
Bye
$
Info.png Nota Bene:
Se non funziona il comando mysql -u root provare con mysql -u root -p e se richiede la password lasciarla vuota e premere invio.

Se ora proviamo a loggarci nuovamente, dovremmo vederci negato l'accesso in questo modo:

$ mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

Riproviamo usando la password che abbiamo scelto in precedenza:

$ mysql -u root -pla_tua_password
Welcome to the MySQL monitor.  Commands end with ; or \g.
Info.png Nota Bene:
Lo switch -p usato nel comando mysql prevede che la password venga digitata senza spazi tra il -p e la password effettiva. Non si tratta di un mio errore di battitura!
Se invece usiamo lo switch -p senza specificare alcuna password, questa ci verrà richiesta interattivamente.

Usare utenti con privilegi alti non è mai una buona idea, per cui provvediamo a creare un utente a cui concederemo i privilegi minimi (ma al quale potremo dare privilegi più alti per database specifici):

mysql> GRANT USAGE ON *.*
    -> TO 'utente'@'localhost'
    -> IDENTIFIED BY 'la_tua_password'
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.04 sec)

Se ora proviamo a loggarci con il nuovo utente, dovremmo riuscire ad autenticarci usando le credenziali specificate con il comando GRANT.

Ora creiamo un database nuovo:

mysql> CREATE DATABASE prova;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| prova    |
| test     |
+----------+
3 rows in set (0.02 sec)

ed assegnamo all'utente che abbiamo creato in precedenza piena diritti di amministrazione al database:

mysql> GRANT ALL PRIVILEGES
    -> ON prova.*
    -> TO 'utente'@'localhost'
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.04 sec)

Se ora ci logghiamo con il nostro utente e chiediamo una lista dei database, vedremo unicamente quelli su cui abbiamo privilegi:

mysql> show databases;
+----------+
| Database |
+----------+
| prova    |
+----------+
1 row in set (0.00 sec)

Selezioniamo il database su cui operare col comando:

mysql> USE prova;

Ora creiamo una tabella all'interno del database prova, giusto per verificare che sia tutto a posto:

mysql> CREATE TABLE tabella (colonna1 VARCHAR(20), colonna2 VARCHAR(20));
Query OK, 0 rows affected (0.42 sec)

mysql> DESCRIBE tabella;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| colonna1 | varchar(20) | YES  |     | NULL    |       |
| colonna2 | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

Se non abbiamo ottenuto errori passiamo al punto successivo, altrimenti verifichiamo tutti i passaggi precedenti.

MySQL e PHP

Per poter usare MySQL attraverso pagine PHP dobbiamo installare il modulo php4-mysql e riavviare Apache:

# apt-get install php4-mysql
# apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted

Ora possiamo verificare se siamo effettivamente in grado di accedere a MySQL.
La procedura è simile a quella vista in precedenza per testare la corretta installazione di PHP:

  • logghiamoci come utente root oppure spostiamoci nella nostra directory public_html;
  • creaimo il file mysql.php che conterrà questo codice:
<?php

// si collega al database, altrimenti esce e ritorna un errore

mysql_connect('localhost','utente','la_tua_password') or die(mysql_error());

?>
  • apriamo un browser e puntiamolo alla pagina appena creata (http://localhost/mysql.php oppure http://localhost/~utente/mysql.php);
    • se quello che vediamo è una pagina bianca, significa che PHP è in grado di dialogare con MySQL;
    • se otteniamo l' errore Fatal error: call to undefined function - mysql_connect() significa che il modulo php4-mysql non è stato installato correttamente o che non abbiamo riavviato Apache;
    • se otteniamo l' errore Warning: mysql_connect(): Access denied for user: xxxxxxxx significa che abbiamo scritto male le credenziali da utilizzare.

PhpMyAdmin

Questo software è un validissimo alleato nel lavoro quotidiano di manutenere un server MySQL, anche se in locale e/o domestico: tra i suoi pregi segnalo l'ottima usabilità e l' interfaccia web.

Questo pacchetto si installa con il comando:

# apt-get install phpmyadmin php4 php4-gd

Ci verrà quindi chiesto quale server http dovrà essere riconfigurato automaticamente. In base alla versione di Apache che abbiamo installato in precedenza possiamo scegliere apache oppure apache2.

Aggiungiamo una riga al file di configurazione Apache:

# phpMyAdmin Configuration
Include /etc/phpmyadmin/apache.conf

Al termine della configurazione scegliamo di riavviare Apache e cominciamo subito ad utilizzare PhpMyAdmin puntando il browser all'indirizzo http://localhost/phpmyadmin/

Schermata di esempio di PhpMyAdmin

Conclusioni

Ora si ha a disposizione un sistema completo per l'utilizzo di script in php (ed anche per il loro sviluppo).




Guida scritta da: Keltik 07:20, Giu 20, 2005 (EDT) Swirl-auth20.png Debianized 20%
Estesa da:
MaXeR 07:59, Lug 18, 2005 (EDT)
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized