Clonare un server WAMP in un LAMP

Nonostante il titolo possa sembrare particolarmente astruso quello che andremo a fare è cercare di utilizzare la stessa configurazione per due server (Apache e MySql) presenti sui nostri sistemi operativi in dual boot!

lamp/wamp

Perché questa faticaccia? Semplicemente per poter lavorare sullo stesso progetto da sistemi operativi diversi e sfruttare il meglio di entrambi! Io sono solito utilizzare ubuntu per le cose di ogni giorno, ma quando voglio continuare il sito che sto scrivendo mi tocca riavviare per avere tutto configurato, il che mi secca! Soprattutto a causa del fatto che Vista non mi è amico! ^^

Sunto delle puntate precedenti e preliminari:

Intanto vi rimando a leggere i post LAMP con qualcosa in più, Sviluppare siti in php e Photoshop e Dreamweaver su Ubuntu: il primo parla di XAMPP come soluzione sia sotto Windows che Linux (solo in linea teorica), il secondo tratta il mio approccio alla creazione di siti sotto Windows (ed è la configurazione che andremo ad utilizzare) e l’ultimo tratta l’installazione dei programmi per lo sviluppo web sotto Ubuntu.

Ok, riassumendo la situazione è la seguente:

  • Configurazione sotto Windows Vista:
    • Utilizzo di Dreamweaver CS3 per scrivere il codice
    • Utilizzo di Photoshop CS3 per il layout grafico
    • Utilizzo di EasyPHP come server WAMP
    • Programmi vari ed eventuali che non ci interessano
  • Configurazione sotto Ubuntu:
    • Utilizzo di Dreamweaver MX 2004 per scrivere il codice
    • Utilizzo di Photoshop CS2 per il layout grafico
    • Nessun server LAMP (è qui che agiremo)
    • Programmi vari ed eventuali che non ci interessano

LAMP sotto Ubuntu:

Intanto il primo problema che sorge è: che server LAMP utilizzare? Installiamo Apache, Php e MySql separatamente oppure ci sono altre soluzioni? Bene, io ho optato per utilizzare XAMPP (scaricabile da qui), ed ecco le motivazioni:

  • All’avvio del sistema non parte nessun server
  • Ho un pacchetto completo di programmi per il funzionamento ed il monitoraggio dei vari server (già configurati)
  • Ho tutte le configurazioni concentrate in una sola cartella (/opt/lampp)
  • In caso di problemi basta rimuovere l’unica cartella interessata
  • Unico svantaggio: apt-get è tagliato fuori! ^^

Una volta scaricato XAMPP installarlo è davvero semplice, la guida è questa ma vi riassumo i punti chiave:

  1. Scaricate XAMPP (la guida è rimasta ferma ad una versione poco recente)
  2. Date il comando:
    sudo tar xvfz xampp-linux-1.5.3a.tar.gz -C /opt
    NB: fate molta attenzione, nulla è casuale! Se non siete root il server verrà creato con permessi sballati e difficilmente funzionerà a dovere! Ed inoltre XAMPP è configurato di default per risiedere nella cartella /opt!
  3. Per controllare i server utilizzate:
    • per avviare: sudo /opt/lampp/lampp start
    • per fermare: sudo /opt/lampp/lampp stop
    • per riavviare: sudo /opt/lampp/lampp restart
    • per conoscere le opzioni disponibili: sudo /opt/lampp/lampp
  4. Per avere un’interfaccia grafica utilizzate:
    gksudo "python /opt/lampp/share/xampp-control-panel/xampp-control-panel.py"
    (leggendo la guida ci sono le istruzioni per metterla nel menu di gnome)

Ok, abbiamo i vari server, ora ci tocca utilizzare le stesse configurazioni per entrambi!

Configuriamo Apache:

Apache non ci darà alcuna noia, infatti sia sotto Windows che Linux la versione di PHP sarà la più aggiornata e non ci sarà bisogno di configurazioni particolari, l’unica modifica da fare è inserire il nostro sito in costruzione anche sotto Linux con un semplice link simbolico, esempio pratico:

sudo ln -s /media/win_vista/Program\ Files/EasyPHP\ 2.0b1/www/sito_in_costruzione/ /opt/lampp/htdocs/sito_in_costruzione

Ora potremo accedere al nostro sito andando sulla pagina: http://localhost/sito_in_costruzione!

Configuriamo MySQL:

Putroppo MySql darà non poche rogne! La versione Linux (sotto XAMPP) ha i file di configurazione in  /opt/lampp/var/mysql/, mentre quella Windows (sotto EasyPHP) li ha in C:\Program Files\Easy PHP 2.0b1\mysql\data\, e sono leggermente incompatibili tra di loro, il che ci impedisce di utilizzare i link simbolici! :(

Quello che vogliamo fare è avere lo stesso database disponibile su entrambe le piattaforme, sapendo che è presente sotto forma di cartella tra i file di configurazione di MySql! Per capirsi: se abbiamo un database chiamato db_sito allora ci sarà una cartella /opt/lampp/var/mysql/db_sito sotto Linux ed una C:\Program Files\Easy PHP 2.0b1\mysql\data\db_sito sotto Windows (i file presenti all’interno di queste cartelle sono le tabelle)!

I problemi che avremo copiando ed incollando la cartella con il database del sito sono due:

  • Dobbiamo cambiare proprietario e gruppo d’appartenenza: sotto Linux dobbiamo assegnare il DB e tutti i file in esso contentuti all’utente nobody ed al gruppo root, con privilegi 600 (bisogna utilizzare in accoppiata i comandi chown e chmod)
  • Dobbiamo rinominare i file, perché la versione sotto Linux è case sensitive: se una tabella ha il nome TabellaDiProva nel DB sotto Windows verrà salvata con il nome tabelladiprova (con le varie estensioni), mentre sotto Linux va rinominata come TabellaDiProva (con le varie estensioni)!

Queste due modifiche rendono impraticabile l’uso del link simbolico e ci costringono alla creazione di uno script ad hoc che non fa altro che rinominare singolarmente le tabelle ogni qual volta eseguiamo un copia & incolla per sincronizzare i dati! ^^ L’alternativa definitiva (che non ho provato) potrebbe essere creare un link per ogni file presente con il nome rivisto, anche se poi bisogna far attenzione ai permessi!

Configurazione di Dreamweaver e Photoshop:

Per quanto riguarda Dreamweaver basta esplorare il filesystem ed inserire il progetto nella sua gestione siti, mentre per Photoshop non è previsto nessuno di questi problemi, essendo ogni lavoro presente su un solo file!

5 Risposte a “Clonare un server WAMP in un LAMP”

  1. Luca Dice:

    Ciao,
    Ho trovato l’articolo molto interessante e vorrei provare a metterlo in pratica ma, essendo abbastanza ignorante in fatto di linux, mi chiedevo se fosse per te possibile pubblicare lo “script ad hoc” di cui hai parlato per sincronizzare i due db.
    Mi chiedevo anche se fosse possibile fare lo script in modo che all’esecuzione dello stesso venisse anche copiato tutto il contenuto della cartella mysql/data di windows in opt/lampp/var/mysql/ in modo da evitare l’operazione di copia/incolla manuale.
    Spero di aver detto qualcosa di sensato, grazie per l’eventuale aiuto.

  2. pierpytom Dice:

    Lo script ad hoc è una soluzione assai poco elegante ma forse l’unica per avere un minimo di automazione! Facendo direttamente un esempio pratico ecco il problema per una fantomatica tabella UtentiLoggati:

    Sotto Windows, con EasyPhp (quindi nella cartella C:\Program Files\Easy PHP 2.0b1\mysql\data\db_esempio\), sarà descritta dai seguenti files:
    - utentiloggati.frm
    - utentiloggati.MYD
    - utentiloggati.MYI

    Sotto Linux, con XAMPP (quindi nella cartella /opt/lampp/var/mysql/db_esempio/), dovrà essere descritta invece dai seguenti files (nota le maiuscole):
    - UtentiLoggati.frm
    - UtentiLoggati.MYD
    - UtentiLoggati.MYI

    Questa leggera differenza fa sì che sia impossibile copiare & incollare semplicemente i files, quindi vanno rinominati uno ad uno, e lo script deve fare:
    # mv utentiloggati.frm UtentiLoggati.frm ; mv utentiloggati.MYD UtentiLoggati.MYD ; mv utentiloggati.MYI UtentiLoggati.MYI

    E successivamente, una volta modificati tutti i files:
    # chown nobody:root *
    # chmod 660 *

    (nota il simbolo #, significa che sono tutte operazioni da root)

    Quindi per ad hoc intendo che in tutte quelle operazioni di mv devi inserirci i tuoi nomi di files! Inoltre, ogni volta che le tabelle verranno modicate (sia sotto Windows che sotto Linux) dovrai modificare a mano i files sostituendo i meno aggiornati con quelli più aggiornati!

    La soluzione definitiva potrebbe essere (e ti spiego perché ‘potrebbe essere’ e non ‘è’ più avanti) utilizzare i link, ovvero lasciare il vero file sotto Windows e fare in modo che Linux ci acceda in maniera trasparente, ad esempio:
    # ln -s /media/win_vista/Program\ Files/EasyPHP\ 2.0b1/mysql/data/db_esempio/UtentiLoggati.frm /opt/lampp/var/mysql/db_esempio/UtentiLoggati.frm

    Questo approccio ci garantisce dei files sempre aggiornati (non sto copiando nulla, è un collegamento), ma dopo si deve sottostare alle regole del file originale, il che si traduce nell’impossibilità di assegnare come utente/gruppo nobody:root e come privilegi rw-rw—-! Se utilizzi Ubuntu infatti ti accorgerai che i files del sistema Windows saranno sempre di root:root e con privilegi rwxrwxrwx, questo perché il filesystem sottostà sempre a queste regole!

    In definitiva penso che questi due vincoli (utente:gruppo e permessi) impediscano a MySql di accedere correttamente alle tabelle! Probabilmente, se installato manualmente, MySql permette di cambiare il metodo di accesso ai files, ma questo non te lo so dire con certezza!

    Spero di averti aiutato in qualche modo e di non essere stato troppo macchinoso e/o incomprensibile, se hai problemi contattami personalmente per vedere di risolverli insieme e più rapidamente! :)

  3. Luca Dice:

    Ok, grazie per la risposta veramente esaustiva.
    Mi hai chiarito un sacco di cose e mi hai convinto che probabilmente per ora è meglio continuare col vecchio metodo del dump (da windows faccio un dump del db e lo importo succcessivamente in linux e viceversa) almeno finchè non avrò una conoscenza più approfondita del tutto (da questo punto di vista la tua risposta è un ottimo punto di partenza).
    In compenso l’idea del link simbolico tra le due cartelle htdocs (uso xampp anche sotto windows) mi farà risparmiare comunque un pò di copia/incolla tra i due sitemi operativi.
    Grazie ancora, alla prossima!

  4. pierpytom Dice:

    Son davvero contento di esserti stato utile! :) Il problema del dump sono i vari (odiosi) riavvii per mantenere sincronizzate le informazioni, fossi in te proverei comunque la strada dello script (due in tutto, da Windows verso Linux e viceversa)!
    Nonostante ti uscirà lunghetto (tante operazioni monotone in cascata) la difficoltà è comunque bassa, e potresti imparare un pò di cosette! ;)

  5. Luca Dice:

    Anch’io odio i riavvii (non puoi capire quanto), è per questo che cercavo da tempo una soluzione come quella da te proposta.
    Comunque appena avrò un pò di tempo libero ci proverò sicuramente!

Lascia una Risposta