Utente:Frenko/Draft: differenze tra le versioni

Pagina svuotata
Nessun oggetto della modifica
(Pagina svuotata)
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
{{Versioni compatibili|Wheezy}}
== Introduzione ==
Firefox, come Iceweasel, permette la sincronizzazione di alcuni contenuti del browser tra più installazioni degli stessi. Tramite Sync Server è possibile sincronizzare '''Bookmarks''', '''Tabs''', '''Estensioni''' e altre piccole cose. Mozilla permette la sincronizzazione gratuita su dei loro server. In questa guida installeremo e configureremo un nostro Sync Server che lavorerà sotto [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5 | Apache ]] ed useremo MySql come database per l' archiviazione (è possibile utilizzare anche SQLite).
<br />
In questa guida tratteremo la versione 1.5 del sync-server, la quale funziona con Firefox/Iceweasel 29 e successivi (presenti da Wheezy in poi). Per versioni precedenti rifarsi alla [https://docs.services.mozilla.com/howtos/run-sync.html#howto-run-sync11 seguente guida]
<br />
<br />
Nella guida supporremo che il computer sul quale andremo ad installare il sync-server avrà IP '''192.168.1.50'''


== Prerequisiti ==
Il sync-server è compatibile con le versioni di Firefox/Iceweasel 29 o maggiori
* Installazione funzionante di Firefox/Iceweasel
Se non volete usare il web-server built-in
* Apache2 con supporto SSL
* Database MySQL
== Installazione sync-server ==
Installiamo per prima cosa i pacchetti necessari alla compilazione del sync-server:
<pre>
# apt-get install python-dev git-core python-virtualenv
</pre>
Successivamente clonare il repository git di Mozilla contenente il sync-server, per fare questo ho deciso di lavorare in ''/opt'':
<pre>
# cd /opt
# git clone https://github.com/mozilla-services/syncserver
# cd syncserver
# make build
</pre>
Il comando <code>make build</code> creerà un virtualenv Python in cui verranno successivamente installate tutte le dipendenze richieste dal server.
<br />
Terminata la compilazione verrà creata una cartella ''local/bin'' in cui è presente il binario '''pserve''', utile a fini di debug poiché permette di lanciare il sync-server sfruttando un web-server built-in.
<br />
Per verificare il corretto funzionamento del sync-server sarà sufficiente dare il seguente comando:
<pre>
make test
</pre>
se tutto funziona correttamente verrà restituito a schermo un '''OK'''.
=== Configurazione ===
La configurazione del sync-server avviene tramite il file ''syncserver.ini'', di seguito un esempio di tale file:
<pre>
[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 5000
[app:main]
use = egg:syncserver
[syncserver]
# This must be edited to point to the public URL of your server,
# i.e. the URL as seen by Firefox.
public_url = url_of_server
# This defines the database in which to store all server data.
#sqluri =
# This is a secret key used for signing authentication tokens.
# It should be long and randomly-generated.
# The following command will give a suitable value on *nix systems:
#
#    head -c 20 /dev/urandom | sha1sum
#
# If not specified then the server will generate a temporary one at startup.
#secret = CHANGE_ME!!!
# Set this to "false" to disable new-user signups on the server.
# Only request by existing accounts will be honoured.
# allow_new_users = false
# Set this to "true" to work around a mismatch between public_url and
# the application URL as seen by python, which can happen in certain reverse-
# proxy hosting setups.  It will overwrite the WSGI environ dict with the
# details from public_url.  This could have security implications if e.g.
# you tell the app that it's on HTTPS but it's really on HTTP, so it should
# only be used as a last resort and after careful checking of server config.
force_wsgi_environ = true
# Uncomment and edit the following to use a local BrowserID verifier
# rather than posting assertions to the mozilla-hosted verifier.
# Audiences should be set to your public_url without a trailing slash.
#[browserid]
#backend = tokenserver.verifiers.LocalVerifier
#audiences = https://localhost:5000
</pre>
Per prima cosa andremo a modificare il parametro ''public_url'' il quale andrà settato su un URL visibile dalla tua rete. In questa prima parte della guida, a scopo di test, supporremo di eseguire il server in locale in una rete di computer con indirizzo del tipo '''192.168.1.x'''.
<br />
Apriamo quindi il file con il nostro editor preferito:
<pre>
# vim /opt/syncserver/syncserver.ini
</pre>
e modifichiamo la seguente riga inserendo l'url (quindi l' indirizzo IP) del pc che farà da Sync Server:
<pre>
[syncserver]
public_url = http://192.168.1.50:5000
</pre>
Abbiamo specificato la porta ''5000'' perché di default il web-server built-in è attivo su tale porta. Ovviamente se vogliamo eseguire il server su una differente porta basterà specificarlo all'avvio del server modificando di conseguenza la porta nel parametro ''public_url''.
<br />
<br />
Di default il sync-server utilizza un database in-memory per lo storage dei dati, questo significa che al riavvio del dispositivo tutti i dati memorizzati verranno cancellati. Per questo motivo il sync-server prevede lo storage dei dati tramite database MySql o SQLite accettando qualunque URI database di [http://www.sqlalchemy.org/ SQLAlchemy]. Per questa parte non specificheremo alcun tipo di database.
=== Lanciare il server ===
A questo punto possiamo eseguire il server ed effettuare dei test per verificarne il funzionamento
<pre>
# local/bin/pserve syncserver.ini
</pre>
se otteniamo
<pre>
Starting server in PID 29951.
serving on 0.0.0.0:5000 view at http://127.0.0.1:5000
</pre>
Un simile messaggio significa che il server è funzionante ed in ascolto sulla porta 5000 del proprio computer.
=== Configurare Firefox/Iceweasel ===
Come accennato in precedenza per poter dire a Firefox/Iceweasel di connettersi al proprio sync-server è necessario modificare la voce ''services.sync.tokenServerURI'' in '''about:config''' cambiando l' url del server di sincronizzazione con l' indirizzo del server nella propria subnet. Nel nostro caso quindi sarà necessario cambiare l'url nel seguente modo:
<pre>
services.sync.tokenServerURI: http://192.168.1.50:5000/token/1.0/sync/1.5
</pre>
Per verificare il funzionamento del server sarà sufficiente andare all' indirizzo http://192.168.1.50:5000/ e vedere se compare la scritta ''it works!''
<br />
A questo punto sarà sufficiente creare un account di sincronizzazione andando su '''Preferences''' e successivamente sul tab '''Sync'''. Se già si dispone di un account di sincronizzazione sarà sufficiente effettuare il login, altrimenti creeremo un nuovo account e successivamente effettuiamo il login. Eseguiamo il login con lo stesso account su un altra installazione di Firefox/Iceweasel, modificando anche in questo caso il parametro ''services.sync.tokenServerURI'' e controlliamo se effettivamente avviene la sincronizzazione degli oggetti selezionati nella tab ''Sync'' delle preferenze di Firefox/Iceweasel
== Sync-server dietro ad Apache2 ==
Il web-server built-in del sync-server è utile per effettuare test sul sistema oppure se utilizzato in situazioni molto ristrette, ad esempio sincronizzando solo i computer di una rete locale.
<br />
Se vogliamo utilizzare il sync-server accedendoci dall'esterno oppure condividendolo tra più utenti è consigliato far girare il server di sincronizzazione sotto ad un'istanza di un web-server come Apache2. I motivi possono essere molti, uno dei più importanti è il poter utilizzare il protocollo [[Installare_un_ambiente_LAMP:_Linux,_Apache2,_SSL,_MySQL,_PHP5#Configurazione_di_SSL | SSL]] per rendere sicure le connessioni tra client e server, un altro motivo è la possibilità di sostenere più facilmente un numero elevato di connessioni.
<br />
Nel seguito della guida supporremo che il web-server sia accessibile tramite un nome dominio valido, noi utilizzeremo, a titolo esplicativo, ffsync.example.ext.
Supporremo anche che sul web-server sia attivo e configurato il modulo SSL.
=== Configurazione Apache2 ===
Il sync-server ed Apache2 potranno comunicare tra di loro tramite il protocollo [https://wsgi.readthedocs.org/en/latest/ WSGI], quindi per prima cosa sarà necessario abilitare il modulo WSGI di Apache2:
<pre>
# a2enmod wsgi
</pre>
e quindi riavviare il server Apache2
<pre>
# service apache2 restart
</pre>
A questo punto è necessario generare un certificato SSL per il dominio che servirà il sync-server:
<pre>
# openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/ffsync.pem -keyout /etc/apache2/ssl/ffsync.pem
</pre>
dove alla voce:
<pre>
Common Name (e.g. server FQDN or YOUR name) []:
</pre>
dovremo scrivere il nome dominio che useremo per contattare il server, nel nostro caso quindi ffsync.example.ext.
A questo punto dobbiamo creare un '''VirtualHost''' per dire ad Apache2 come comportarsi alla richesta del dominio scelto.
<br />
Creiamo un nuovo file in <code>/etc/apache2/sites-available/</code> con un nome utile a ricordarci di cosa tratta:
<pre>
# touch /etc/apache2/sites-available/syncserver
</pre>
e quindi utilizzando il proprio editor di testo preferito creiamo il fie di configurazione del nuovo '''VirtualHost''':
<pre>
<Directory /opt/syncserver>
  Order deny,allow
  Allow from all
</Directory>
<VirtualHost *:443>
  ServerName ffsync.example.ext
  DocumentRoot /opt/syncserver
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/ffsync.pem
  SSLCertificateKeyFile /etc/apache2/ssl/ffsync.pem
  WSGIProcessGroup sync
  WSGIDaemonProcess sync user=ffsync group=ffsync processes=2 threads=25 python-path=/opt/syncserver/local/lib/python2.7/site-packages/
  WSGIPassAuthorization On
  WSGIScriptAlias / /opt/syncserver/syncserver.wsgi
  CustomLog /var/log/apache2/ffsync.example.ext-access.log combined
  ErrorLog  /var/log/apache2/ffsync.example.ext-error.log
</VirtualHost>
</pre>
Dove ovviamente andremo a modificare il percorso alla directory del sync-server se non installata nella stessa path utilizzata nella guida nei campi <code>DocumentRoot</code> e <code><Directory /path/to/syncserver></code>.
<br />
La direttiva <code>WSGIDaemonProcess</code> andrà modificata a seconda di cosa abbiamo fatto; nel caso del parametro <code>python-path</code> dobbiamo sostituire alla path scritta quella utilizzata nella proria installazione del sync-server. Per quanto riguarda invece i parametri <code>user</code> e <code>group</code>, successivamente vedremo che saranno riferiti all' utente e gruppo della directory <code>/opt/syncserver</code>.
<br />
Anche la direttiva <code>WSGIScriptAlias</code> andrà cambiata in caso di differente directory di installazione.
=== Creazione database MySQL ===
In questa guida abbiamo scelto di utilizzare, come storage delle informazioni da sincronizzare, un database [[Installare_un_ambiente_LAMP:_Linux,_Apache2,_SSL,_MySQL,_PHP5#Installazione_di_MySQL | MySQL]].
Per prima cosa andremo a creare il database
<pre>
# mysql -u root -p
</pre>
quindi, una volta entrati nella shell interattiva di MySQL:
<pre>
mysql> CREATE DATABASE syncserver
mysql> GRANT ALL PRIVILEGES ON syncserver.* TO sync IDENTIFIED BY "password";
</pre>
Il primo comando crea il database ''syncserver'', mentre con il secondo, in un colpo solo, creiamo l' utente ''sync'' e gli diamo pieni privilegi su tutto il database. Ovviamente il campo "password" andrà modificato inserendo una password sicura.
=== Riconfigurazione sync-server ===
Torniamo a modificare il <code>syncserver.ini</code> per comunicare al sync-server di accettare richieste provenienti dal URL https://ffsync.example.ext e soprattutto per istruirlo ad immagazzinare le informazioni sul nuovo database MySQL appena creato.
<br />
Modifichiamo nuovamente la voce <code>public_url</code> nel seguente modo:
<pre>
[syncserver]
public_url = https://ffsync.example.ext/
</pre>
e poi decommentiamo la riga relativa al database e inseriamo la path, con la notazione di SQLAlchemy del nostro database:
<pre>
# This defines the database in which to store all server data.
sqluri = pymysql://sync:password@localhost:3306/syncserver
</pre>
dove andremo a modificare utente e password con quelli scelti per la propria installazione.
A questo punto creiamo un nuovo utente che avrà come propria cartella home la directory del sync-server
<pre>
# useradd -d /opt/syncserver/ -l -r -U ffsync -G www-data
# chown -R ffsync:ffsync /opt/syncserver/
</pre>
È necessario aggiungere il nuovo utente creato al gruppo ''www-data'' per far si che il web-server possa interagire con il sync-server.
<br />
Tornando alla configurazione del '''VirtualHost''' di Apache2, se abbiamo scelto un nome utente differente da quello della guida dovremmo modificare il parametro <code>WSGIDaemonProcess</code> inserendo nome utente e gruppo scelti.
Infine sarà sufficiente abilitare il nuovo '''VirtualHost''' e riavviare Apache2 per attivare le nuove configurazioni:
<pre>
# a2ensite syncserver
# service apache2 restart
</pre>
Se tutto è stato scritto correttamente il server Apache2 verrà riavviato senza errori.
=== Riconfigurare Firefox/Iceweasel ===
Come detto in precedenza sarà ora necessario riconfigurare il proprio browser affinchè utilizzi il nostro server per sincronizzarsi.
<br />
Per prima cosa disconnettiamo il browser dall' account di sincronizzazione. Questo è necessario farlo perchè ogni volta che effettuiamo il logout dal nostro account di sincronizzazione Firefox/Iceweasel setta automaticamente la chiave <code>services.sync.tokenServerURI</code> al suo valore di default.
Entriamo in [http://about:config about:config] e cerchiamo la chiave <code>services.sync.tokenServerURI</code> e modifichiamo ancora una volta il suo contenuto inserendo l' URL del nostro sync-server:
<pre>
services.sync.tokenServerURI: https://ffsync.example.ext/token/1.0/sync/1.5
</pre>
In seguito sarà necessario far accettare il nostro certificato SSL al browser. Andiamo su '''Preferences''' -> '''Advanced''' -> '''Certificates''', clicchiamo sul bottone ''View Certificates'' ed infine sul tab ''Servers'' clicchiamo su ''Add Exception''. Inseriamo l' URL del proprio server: https://ffsync.example.ext, verificate che la checkbox ''Permanently store this exception '' sia spuntata e quindi clicchiamo su '''Confirm Security Exception''', successivamente andiamo sul tab '''Authorities''' cerchiamo il nostro server, clicchiamo su '''Edit Trust''' e spuntiamo la casella relativa alla voce ''This certificate can identify websites'' chiudiamo tutto e proviamo a navigare con il browser verso il nostro server https://ffsync.example.ext. Se il certificato è stato aggiunto correttamente tra le eccezioni di sicurezza dovremmo semplicemente vedere '''it works!'''
Non resta che prendere 2 installazioni di Firefox/Iceweasel ed accedere al proprio account e vedere se i due browser risultano sincronizzati.
<br />
É possible verificare se il server funziona consultando i log specifici nei file <code>/var/log/apache2/ffsync.example.ext-access.log</code> e <code>/var/log/apache2/ffsync.example.ext-error.log</code>.
== Aggiornare il sync-server ==
Per mantenere aggiornato il proprio sync-server sarà sufficiente clonare il repository di mozilla periodicamente:
<pre>
# cd /opt/syncserver
# git stash
# git pull
# git stash pop
# make build
</pre>
* il comando <code>git stash</code> serve per tener traccia dei cambiamenti effettuati a file nella directory.
* il comando <code>git pull</code> sincronizza il repository locale (la directory) con quello remoto.
* il comando <code>git stash pop</code> reinserisce le modifiche fatte ai file dopo la sincronizzazione con il repository remoto.
* il comando <code>make build</code> riesegue la compilazione del pacchetto aggiornato.
== Approfondimenti ==
[https://docs.services.mozilla.com/howtos/run-sync-1.5.html Sito ufficiale]
{{Autori
|Autore= [[Utente:Frenko|Frenko]] 15:11, 16 apr 2015 (CEST)
}}
[[Categoria:Web server]]
29

contributi