Discussioni old:Installazione Qemu con supporto accelerazione Kqemu: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
nessun oggetto della modifica
(Chiarimento)
Nessun oggetto della modifica
Riga 1: Riga 1:
=Introduzione=
==Installazione QEMU con qvm86/kqemu per Debian/Ubuntu==
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.
=== Qemu con supporto qvm86 (libero, ma sperimentale) ===


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.
====1. Fase Preliminare====
Assicuratevi di aver installato i pacchetti necessari a scaricare e compilare il tutto:
* '''ssh''' e '''cvs''' (per scaricare qvm86 occorre andare via cvs remoto)
* '''patch''' (per usare qvm86 con qemu occorre effettuare una piccola patch ai sorgenti di qemu)
* '''gcc-3.3''' oppure '''gcc-3.4''' (qemu non � ancora compilabile col gcc 4.0)
* '''libsdl1.2-dev'''
* '''zlib1g-dev'''
* '''make'''
* '''kernel-headers-'''''versione_del_kernel_in_uso'' (oppure '''linux-headers-'''''versione_del_kernel_in_uso'' se avete una Ubuntu od usate una Debian unstable con un kernel recente). La versione pu� essere individuata eseguendo il comando <code>uname -r</code>.


Buona lettura!
====2. Recupero file QEMU====
Scaricate da [http://fabrice.bellard.free.fr/qemu/download.html http://fabrice.bellard.free.fr/qemu/download.html] gli archivi dei codici sorgenti di QEMU, e come '''utente diverso da root''' scompattateli in una directory e poi entrateci.
$ tar zxvf qemu-0.8.0.tar.gz
$ cd qemu-0.8.0


=Il server http=
====3. Recupero file qvm86====
==Apache==
Scaricate via cvs i sorgenti di qvm86, in modo che siano all'interno della directory dei sorgenti di qemu, sempre con un utente '''diverso da root'''.
[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:
$ export CVS_RSH=ssh
* � software libero;
$ export CVSROOT=:ext:anoncvs@savannah.nongnu.org:/cvsroot/qvm86
* gira sulle pi� svariate piattaforme (*nix, Windows, ec...);
$ cvs -z3 co qvm86
* � sviluppato in accordo con le pi� recenti specifiche per i servizi http.
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.


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".
====4. Applicazione patch====
Applicate dalla directory dei sorgenti di qemu la patch provvista da qvm86.
$ patch -p0 < qvm86/patch.qvm86


La pronuncia corretta di Apache suona grossomodo come "APACI".
====5. Configurazione====
Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>.
Verificate che sia tutto ok, poi compilate il tutto ed installate.
$ ./configure --cc=gcc-3.3
$ make</pre>
Se avviando <code>./configure</code> avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root. Leggete meglio sopra e ricominciate da capo.


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).
Se dopo aver avviato <code>make</code> ci sono errori di compilazione, ci si pu� limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione <code>--target-list=i386-softmmu</code> al comando <code>./configure</code>.  
  $ make clean
===Apache 1.3===
  $ ./configure --cc=gcc-3.3 --target-list=i386-softmmu
====Installazione====
$ make
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 '''ps''':
<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 '''pstree''':
<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====
Se non ci sono errori, ora potete diventare root ed installare qemu.
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.
$ su
Password:
# make install


I files di configurazione di Apache risiedono nella directory '''/etc/apache''' al cui interno troviamo svariati files. 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.
A questo punto qemu � installato in <code>/usr/local/bin/qemu</code>, ed il modulo qvm86 si trova in <code>/lib/modules/''versione_del_kernel''/misc/qvm86.ko</code>.


'''server-pool size'''
====6. Caricamento modulo====
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:
Prima di eseguire qemu va caricato il modulo del kernel <code>qvm86</code>, va eventualmente creato <code>/dev/qvm86</code> (usato per interagire col kernel) e gli vanno dati permessi adeguati.
<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'''
Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):'''
Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default �:
# Queste due operazioni sono da fare come root una volta sola:
<pre>StartServers 5</pre>
# mknod /dev/qvm86 c 222 0
che noi cambieremo in:
# chmod 666 /dev/qvm86
<pre>StartServers 1</pre>
#
# Questa operazione va eseguita come root ad ogni avvio del sistema per usare qemu
# modprobe qvm86


'''Listen'''
Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev):
Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' 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.
# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
# modprobe qvm86
# chmod 666 /dev/qvm86


'''BindAddress'''
Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato):
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.
* diventate root (<code>su -</code>)
* modificate il file <code>/etc/modules</code> aggiungendo la riga <code>qvm86</code>, in modo che il modulo venga automaticamente caricato al boot.
* create il file <code>/etc/modprobe.d/qvm86</code> contenente le seguenti righe:
** per chi '''non ha''' installato il pacchetto udev:
install qvm86 /sbin/modprobe --ignore-install qvm86 \
&& (test -c /dev/qvm86 || mknod /dev/qvm86 c 222 0) \
&& chmod 666 /dev/qvm86
:* per chi '''ha''' installato il pacchetto udev:
install qvm86 /sbin/modprobe --ignore-install qvm86 && chmod 666 /dev/qvm86


'''ServerName'''
Una volta caricato il modulo e dati i permessi di lettura a /dev/qvm86 siamo pronti per eseguire il nuovo qemu.
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 [[Server Web Casalingo]]).


'''DocumentRoot'''
Accertatevi che il qemu che andrete ad eseguire '''sia quello compilato in <code>/usr/local/bin/qemu</code>''': potete farlo eseguendo <code>type qemu</code>.
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 files che volete pubblicare sul server http dovranno risiedere in '''/var/www''' o in una sua sotto-directory.


{{Warningbox|� fondamentale per il funzionamento di Apache che i files che devono essere visibili via Web siano leggibili da parte dell' utente '''www-data''' e che le sotto-directory di /var/www siano raggiunbili dallo stesso utente}}
=== Qemu col supporto kqemu (proprietario) ===
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 httpd.conf c'� un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo �a riga incriminata scopro che:
<pre>ServerType is either inetd, or standalone.  Inetd mode is only supported on</pre>
Noto subito che manca il commendo (#) 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:
====1. Fase Preliminare====
[[Immagine:Apache_installazione.png|thumb|center|Pagina di Benvenuto di Apache]]
Assicuratevi di aver installato i pacchetti necessari a compilare il tutto:
* '''gcc-3.3''' oppure '''gcc-3.4''' (qemu non � ancora compilabile col gcc 4.0)
* '''libsdl1.2-dev'''
* '''zlib1g-dev'''
* '''make'''
* '''kernel-headers-'''''versione_del_kernel_in_uso'' (oppure '''linux-headers-'''''versione_del_kernel_in_uso'' se avete una Ubuntu od usate una Debian unstable con un kernel recente). La versione pu� essere individuata eseguendo il comando <code>uname -r</code>.


{{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 /home/pippo l' utente dovr� semplicemente creare la directory '''public_html''' per poter accedere ai files in essa contenuti attraverso l' indirizzo '''http://127.0.0.1/~pippo/'''}}
====2. Recupero file QEMU/KQEMU====
Scaricate archivi dei codici sorgenti di [http://fabrice.bellard.free.fr/qemu/download.html QEMU e KQEMU], e come '''utente diverso da root''' scompattateli in modo che la directory di kqemu venga estratta all'interno della directory di qemu. Quindi entrate nella directory dei sorgenti.
$ tar zxvf qemu-0.8.0.tar.gz
$ tar zxvf kqemu-0.7.2.tar.gz -C qemu-0.8.0
$ cd qemu-0.8.0


Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache!
====3. Configurazione====
Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>.
Verificate che sia tutto ok e che il supporto kqemu sia attivato, in modo che venga compilato
il modulo corretto per il vostro kernel. Poi compilate il tutto ed installate.
$ ./configure --cc=gcc-3.4
$ make
Se avviando <code>./configure</code> avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root invece che come utente comune. Leggete meglio sopra e ricominciate da capo.


====Supporto SSL====
Se dopo aver avviato <code>make</code> ci sono errori di compilazione, ci si pu� limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione <code>--target-list=i386-softmmu</code> al comando <code>./configure</code>.
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.
$ make clean
$ ./configure --cc=gcc-3.4 --target-list=i386-softmmu
$ make


Tra i vantaggi in termini di sicurezza che l' uso di SSL comporta, segnalo:
Se non ci sono errori, ora potete diventare root ed installare qemu.
* transito di informazioni sensibili (passwords, dati personali, ecc...) in internet attraverso un canale crittografato sicuro;
$ su
* accertamento dell' identit� del server e/o del client web tramite certificati digitali.
Password:
# make install


Il supporto SSL per Apache pu� essere abilitato in due modi distinti:
A questo punto qemu � installato in <code>/usr/local/bin/qemu</code>, ed il modulo kqemu si trova in <code>/lib/modules/''versione_del_kernel''/misc/kqemu.ko</code>.
* 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'''.
====4. Caricamento modulo====
Prima di eseguire qemu va caricato il modulo del kernel <code>kqemu</code>, va eventualmente creato <code>/dev/kqemu</code> (usato per interagire col kernel) e gli vanno dati permessi adeguati.  


Procediamo con l' installazione del pacchetto:
Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):'''
<pre>
# Queste due operazioni sono da fare come root una volta sola:
# apt-get install libapache-mod-ssl
# mknod /dev/kqemu c 250 0
</pre>
# chmod 666 /dev/kqemu
#
# Questa operazione va eseguita come root ad ogni avvio del sistema
# modprobe kqemu


===Apache 2.0===
Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev):
====Installazione====
# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
L'installazione di Apache2 � perfettamente uguale a quella precedentemente illustrata per Apache:
# modprobe kqemu major=0
<pre>
# chmod 666 /dev/kqemu</pre>
# apt-get install apache2-mpm-prefork
</pre>


Il [[metapacchetto]] ''apache2'' � presente, ma installa '''apache2-mpm-worker''', che risulta non essere compatibile con '''libapache2-mod-php4'''.
Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato):
* diventate root (<code>su -</code>)
* modificate il file <code>/etc/modules</code> aggiungendo la riga <code>kqemu</code>, in modo che il modulo venga automaticamente caricato al boot.
* create il file <code>/etc/modprobe.d/kqemu</code> contenente le seguenti righe:
** per chi '''non ha''' installato il pacchetto udev:
install kqemu /sbin/modprobe --ignore-install kqemu \
&& (test -c /dev/kqemu || mknod /dev/keqmu c 250 0) \
&& chmod 666 /dev/kqemu</pre>
:* per chi '''ha''' installato il pacchetto udev:
options kqemu major=0
install kqemu /sbin/modprobe --ignore-install kqemu && chmod 666 /dev/kqemu


======I diversi pacchetti======
Una volta caricato il modulo e dati i permessi di lettura a /dev/kqemu siamo pronti per eseguire il nuovo qemu.
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'');
; 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.
Accertatevi che il qemu che andrete ad eseguire '''sia quello compilato in <code>/usr/local/bin/qemu</code>''': potete farlo eseguendo <code>type qemu</code>.


====Verifica====
== Utilizzo QEMU ==
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====
===Creazione immagine===
Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.<br />
(facoltativo) Creazione di un file immagine per il disco (facoltativo)
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''.
$ qemu-img create hd.img 5G


=====Organizzazione dei file=====
===Esecuzione QEMU===
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:
''(cambiare il boot per fare l'installazione da cd etc..)''


======File di Configurazione======
Per semplicita` qui avviamo qemu da root (gli utenti comuni in Debian solitamente non possono leggere direttamente /dev/cdrom), tuttavia qemu puo` tranquillamente essere eseguito come utente comune (consigliato).
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 quando � un file di transizione, e in futuro potrebbe venir rimosso da apache2.
# qemu -boot c -cdrom /dev/cdrom -hda /home/rob/hd.img \
-user-net -pci -m 256 -k it -localtime


======Moduli======
Le principali opzioni di qemu sono:
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 caricameto 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 canfigurazione presentano un link in questa directory.
* '''-m ''megabyte'' ''' --> memoria per l'emulatore = 256MB
* '''-k it''' --> tastiera italiana
* '''-localtime''' --> usa ora locale (default UTC)
* '''-pci''' --> emula scheda di rete rtl8029 PCI
* '''-boot c''' --> avvia dal dico rigido emulato (usare '''-boot d''' per il boot dal cdrom emulato)
* '''-user-net''' --> Il sistema GUEST deve essere configurato in DHCP. Qemu assegna un indirizzo dinamico "10.0.2.15" al SO guest, il quale sar� in grado di pingare solo il suo GW che � "10.0.2.2". Per testare la rete quindi avviare le applicazioni di rete, visto che il ping ''host'' non funziona.


======Siti======
=== QEMU Networking ===
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:
'''Sezione da revisionare per i cambiamenti nella versione 0.8.0'''
* 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.
Con la soluzione indicata qui sopra, il sistema Guest riesce a navigare in Internet, ma non riesce ad accedere alle risorse del proprio host. La maniera pi� facile per configurare qemu in modo che possa fare entrambe le cose, quella di installare vde e usare tun/tap con un bridge.


=====Supporto SSL=====
Prima di iniziare, dovete verificare che il vostro kernel supporti i seguenti moduli:
Per Apache2, a differenza di Apache1, non esiste un pacchetto '''apache-ssl''' per attivare il supporto [[Glossario:ssl | ssl]]. Per attivare il supporto ssl � necessario modificare la configurazione di apache.
  tun: "Network device support" -> "Universal TUN/TAP device driver support"
  IP masquerade: "Networking options" -> "IP: Netfilter Configuration"
  bridging: "Networking options" -> "802.1d Ethernet Bridging"


Per abilitare il supporto, e creare i certificati necessari al funzionamento dell'ssl, bisogna installare openssl:
e dovete installare il pacchetto bridge-utils:
<pre>
apt-get install bridge-utils
# apt-get install openssl
</pre>


Oltre a questo, deve essere abilitato il modulo ''ssl'', con il comando prima descritto per la gestione dei moduli in Apache2:
[http://vde.sourceforge.net Vde] sta per Virtual Distributed Ethernet ed � un programma open source che vi permette di creare un network virtuale. Noi lo utilizzeremo per far fare in modo che il sistema Guest veda se stesso come un'unit� distinta dal sistema host e possa colloquiare con questi.
<pre>
# a2enmod ssl
</pre>


Per la generazione del certificato, apache2 offre il comando:
Per quel che ne so io, non esiste (ancora) un pacchetto deb gi� pronto per l'uso, ma per installare vde sono sufficenti poche righe:
<pre>
wget http://puzzle.dl.sourceforge.net/sourceforge/vde/vde-1.5.9.tar.gz
# apache2-ssl-certificate
tar -xvzf vde-1.5.9.tar.gz
</pre>
cd vde-1.5.9
che, tramite una serie di domande, creer� nella direcotry '''/etc/apache2/ssl/''' due file: ''apache.pem'' ed il certificato.
./configure
make
make install


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'''):
Una volta fatto questo, siete pronti per configurare tun e il bridge:
<pre>
vde_switch -tap tun0 -daemon
<VirtualHost *:443>
chmod 777 /tmp/vde.ctl
    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.pem
ifconfig eth0 down
    SSLCertificateKeyFile /etc/apache2/ssl/apache.pem
brctl addbr br0
 
ifconfig eth0 0.0.0.0 promisc up
    ServerAdmin admin@dominio.org
ifconfig tun0 0.0.0.0 promisc up
    ServerName server.dominio.org
#l'IP qui sotto � quello del computer host; modificatelo per adeguarlo alle vs esigenze
 
ifconfig br0 192.168.0.200 netmask 255.255.255.0 broadcast 192.168.0.255 up
    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">
brctl stp br0 off
        AllowOverride None
brctl setfd br0 1
        Options None
brctl sethello br0 1
        Order allow,deny
brctl addif br0 eth0
        Allow from all
brctl addif br0 tun0
    </Directory>
#questo invece � l'indirizzo IP del gateway
 
  route add default gw 192.168.0.1
    <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>
 
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:
<pre>
Listen 443
</pre>
 
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
<pre>
# a2ensite default-ssl
</pre>
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>
# /etc/init.d/apache2 restart
</pre>
 
=====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:
<pre>
Listen 8080
</pre>
 
=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.
===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 (/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 �:
<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>
# apt-get install libapache2-mod-php4
</pre>
 
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:
<pre>$ whoami
keltik
$ su
Password:
# 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 '''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:
<pre><?php phpinfo(); ?></pre>
 
{{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...).
 
=Il Database Server=
==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.
 
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'''.
{{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>
$ 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>
Se ora proviamo a loggarci nuovamente, dovremmo vederci negato l' accesso in questo modo:
<pre>
$ mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
</pre>
Riproviamo usando la password che abbiamo scelto in precedenza:
<pre>
$ mysql -u root -pla_tua_password
Welcome to the MySQL monitor. Commands end with ; or \g.
</pre>
{{box|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!<br> 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):
<pre>
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)
</pre>
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:
<pre>
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>
ed assegnamo all' utente che abbiamo creato in precedenza piena diritti di amministrazione al database:
<pre>
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)
</pre>
Se ora ci logghiamo con il nostro utente e chiediamo una lista dei database, vedremo unicamente quelli su cui abbiamo privilegi:
<pre>
mysql> show databases;
+----------+
| Database |
+----------+
| prova    |
+----------+
1 row in set (0.00 sec)
</pre>
Selezioniamo il database su cui operare col comando:
<pre>
mysql> USE prova;
</pre>
Ora creiamo una tabella all' interno del database ''prova'', giusto per verificare che sia tutto a posto:
<pre>
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)
</pre>
 
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 installareil modulo '''php4-mysql''' e riavviare Apache:
<pre>
# apt-get install php4-mysql
# apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted
</pre>


Ora possiamo verificare se siamo effettivamente in grado di accedere a MySQL.<br>
NB: Una volta verificato che tutto funziona, queste istruzioni vanno inserite in uno script in modo da essere eseguite automaticamente all'accensione del computer qui ne trovate uno piuttosto grezzo: [http://www.itaca.coopsoc.it/download/sources/vde_qemu vde_qemu], che va salvato in /etc/init.d. Dopodich�:
La procedura � simile a quella vista in precedenza per testare la corretta installazione di PHP:
chmod u+x /etc/init.d/vde_qemu
* logghiamoci come utente root oppure spostiamoci nella nostra directory '''public_html''';
update-rc.d -n vde_qemu defaults 90
* creaimo il file mysql.php che conterr� questo codice:
<pre><nowiki>
<?php


// si collega al database, altrimenti esce e ritorna un errore
Ora tutto � pronto per lanciare qemu, con l'ultima avvertenza che dovete usare l'apposito wrapper vdeqemu:
vdeqemu -hda disk.img -localtime


mysql_connect('localhost','utente','la_tua_password') or die(mysql_error());
Potete utilizzare tutte le opzioni di qemu, fuorch� -user-net, che disattiverebbe tun.


?></nowiki>
Ora il sistema guest dovrebbe accedere a tutte le porte del sistema host, in maniera totalmente trasparente: da risorse di rete dovreste vedere il vostro server samba con le sue partizioni; dal browser dovreste accedere alle pagine del vostro server web, etc. etc.
</pre>
* 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==
=== Patch per Windows ===
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:
Per quanto riguarda l'utilizzo della CPU, a quanto pare Windows 9x non fa un uso corretto della istruzione CPU HLT e quindi spara la cpu a 100% quando � in idle (non fa nulla) e invece la usa regolarmente quando � sotto "sforzo", paradossalmente infatti, se viene utilizzata la cpu di qemu l'utilizzo di cpu si abbassa su linux in proporzione.
<pre>
# apt-get install phpmyadmin php4 php4-gd
</pre>
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'''.


Al termine della configurazione scegliamo di riavviare Apache e cominciamo subito ad utilizzare PhpMyAdmin puntando il browser all'indirizzo http://localhost/phpmyadmin/
La patch puo' essere scaricata [http://klingon.homelinux.net/files/amnhltm.zip qui], va installata sul Win9x GUEST.


[[Immagine:Phpmyadmin_table.png|thumb|center|Schermata di esempio di PhpMyAdmin]]
==Collegamenti esterni==
*[http://ubuntuforums.org/showthread.php?t=39513 http://ubuntuforums.org/showthread.php?t=39513]
*[http://fabrice.bellard.free.fr/qemu/index.html http://fabrice.bellard.free.fr/qemu/index.html]
*[http://fabrice.bellard.free.fr/qemu/qemu-doc.html http://fabrice.bellard.free.fr/qemu/qemu-doc.html]
*[http://www.debian-administration.org/?article=40 http://www.debian-administration.org/?article=40]
*[http://oui.com.br/n/content.php?article.21 http://oui.com.br/n/content.php?article.21]
*[http://www.carlsonhome.net/computer_help_log.php http://www.carlsonhome.net/computer_help_log.php]
*[http://savannah.nongnu.org/projects/qvm86/ http://savannah.nongnu.org/projects/qvm86/]


=Conclusioni=
==Conributi==
Ora si ha a disposizione un sistema completo per l'utilizzo di script in php (ed anche per il loro sviluppo).
[[Utente:Themonkey|Themonkey]] 20:31, Ago 19, 2005 (EDT) The_monk_ey ( skype: the_monk_ey )


[[Utente:ianezz|ianezz]] 17:40, Nov 25, 2005 (CET) ''(per la parte di compilazione ed installazione)''


----
[[Utente:Paulox|Paulox]] 11:13, Dic 21, 2005 (EST) ''(aggiornamento alla versione 0.8.0 e riformattazione della pagina)''
Autore: [[Utente:Keltik|Keltik]] 07:20, Giu 20, 2005 (EDT)<br/>
[[Utente:MaXeR|MaXeR]] 07:59, Lug 18, 2005 (EDT)
1 760

contributi

Menu di navigazione