Inicio > Techs > Instalar & configurar un servidor personal (custom) de Firefox Sync

Instalar & configurar un servidor personal (custom) de Firefox Sync

jueves, 6 de octubre de 2011 Dejar un comentario Ir a comentarios

Para el que no lo conoce, Firefox Sync es un servicio de Mozilla, que nos permite sincronizar entre muchos navegadores, nuestros favoritos, tabs abiertos, historial de navegación, etc.
Esto te permite poder disponer de los favoritos/contraseñas que agregas en el trabajo, en la maquina de tu casa y viceversa, entre otras cosas.

La idea es fantastica, y nadie puede negar que es muy practico .. pero al igual que con todos los otros servicios similares, a uno le pinta la paranoia de ‘le estoy dando todos mis datos a esta gente’.. o simplemente, nos molesta, como es la situacion actual, que el servidor de Mozilla esta caido hace 2 dias..

He ahi donde surge la idea de montar tu propio servidor para Firefox Sync, y de ello trata este mini – tutorial.

 

Primero .. backup.

Antes que nada, hace un backup de tus favoritos, passwords y todo lo que te interese de tu navegador. No tiene porque pasar nada.. pero por ahi le pifias a la opcion de sync y pisas todos tus datos, asi que mas vale prevenir…

Aca la internet nos da una forma rapida y simple:

«En el Firefox, vas al menu Marcadores y haces click en Administrar Marcadores. En la nueva ventana que aparece, haces click en el menu Archivo y luego en Exportar. Ahi das el nombre del archivo HTML y ya los tienes guardados.
Para recuperarlos, vas a Archivo / Importar, luego haces click en De archivo (o de fichero), buscas el archivo que guardaste anteriormente y listo.»

 

Detalles:

– Para todo el tutorial vamos a usar como nuestro propio servidor sync el dominio ‘sync.mydomain.com‘.
– Yo monte todo sobre HTTPS, con certificados customs. Si haces esto, antes que nada tenés que agregar una excepción en tu firefox, para que acepte el certificado que creaste, si no te va a tirar error «no se puede conectar al servidor». El modo mas facil de hacer esto? una vez que levantaste tu vhost e instalaste el certificado, abri tu firefox y entra directo a https://sync.mydomain.com. Ahi te va a saltar el alerta y podes agregar la excepción en el momento.
– En mi caso, la instalación la hice en /usr/local/sync-server.
– El servidor corre Debian, obviamente ;).
– Atendemos las peticiones con Apache, y las procesamos con mod_wsgi. En este tutorial estamos dando por sentado que ya tenes Apache2 instalado & funcionando.
– Como DB usamos MySQL, así que acá estamos dando por sentado también, que tenes un servidor MySQL andando. (se puede usar sqlite sin problemas)

 

Instalando el servidor

Como no existe un .deb, vamos a bajar el source desde el repositorio ‘mercury’ de Mozilla, así que debemos instalar varias tools.

# apt-get install python-dev mercurial sqlite3 python-virtualenv
# cd /usr/local/src/
# hg clone https://hg.mozilla.org/services/server-full
# mv server-full/ /usr/local/sync-server/
# cd /usr/local/sync-server/
# make build

Esto debería generarte un nuevo directorio llamado ‘bin’, con el ‘paster’ dentro.

Ya estás en condiciones de levantar el servidor de pruebas:

$ bin/paster serve development.ini
Starting server in PID 29951.
serving on 0.0.0.0:5000 view at http://127.0.0.1:5000

Si te apareció una salida similar, continuamos. (de no ser así, chequear el log del make build a ver que falló al momento de compilar)

Hasta el momento, ya tenemos listo el server, pero usando SQLite y el webserver de juguete/prueba que trae (atendiendo en el puerto 5000).

 

Configurando Apache2 para atender los pedidos…

Porqué vamos a correr un webserver de juguete, si tenemos Apache?

Lo que debemos hacer es crear un nuevo virtualhost en Apache y instalar/activar el modulo wsgi, si es que no lo tenemos.

# apt-get install apache2 libapache2-mod-wsgi
# a2enmod wsgi

Creamos el nuevo virtual host

# vim /etc/apache2/sites-available/sync.mydomain.com

Y dentro pegamos algo similar a:

### Comienzo del VirtualHost ###

<VirtualHost *:443>
    ServerAdmin [email protected]
    DocumentRoot /usr/local/sync-server/
    ServerName sync.mydomain.com
    ErrorLog  /usr/local/sync-server/weblogs/error_log
    CustomLog /usr/local/sync-server/weblogs/access_log combined
    WSGIProcessGroup sync
    WSGIDaemonProcess sync user=syncserver group=syncserver processes=2 threads=25
    WSGIPassAuthorization On
    WSGIScriptAlias / /usr/local/sync-server/sync.wsgi
    <Directory /usr/local/sync-server/>
        AllowOverride AuthConfig
    </Directory>
    <IfModule mod_ssl.c>
            SSLEngine on
            SSLCertificateFile    /etc/apache2/ssl/server.crt
            SSLCertificateKeyFile /etc/apache2/ssl/server.key
            SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
     </IfModule>
</VirtualHost>

##### Fin del VirtualHost  #####

Guardamos, salimos y activamos el nuevo dominio.

# a2ensite sync.mydomain.com

Creamos un nuevo usuario, con el cuál se ejecutara el proceso sync

# adduser --home /usr/local/sync-server/ --no-create-home --gecos 'Sync Server' --disabled-login syncserver

Creamos el direcotrio donde guardamos los logs del webserver..

# mkdir /usr/local/sync-server/weblogs/

Cambiamos los permisos del directorio donde instalamos el server.

# chown syncserver.syncserver /usr/local/sync-server/ -R

Reiniciamos Apache..

# /etc/init.d/apache2 reload

 

Configurando el server, para que use base de datos MySQL…

Antes que nada, debemos crear una base de datos y un usuario en nuestro servidor MySQL para que el servidor Sync use.

# mysqladmin create syncserver
# mysql> GRANT ALL ON syncserver.* TO 'syncserver'@'localhost' IDENTIFIED BY 'password';
# mysql> FLUSH PRIVILEGES;

La configuración del servidor esta en el archivo ‘sync.conf’ dentro del directorio ‘etc’.

Asi que vamos a editarlo:

# vim /usr/local/sync-server/etc/sync.conf

Dentro, debemos tener algo similar a…


##### COMIENZO ARCHIVO sync.conf  #####

[global]
clean_shutdown = false

#
# TENES que obtener keys del API de recaptcha
# Para eso anda a https://www.google.com/recaptcha/admin/create y genera una para tu dominio.
#

[captcha]
use = true
public_key = AAAAAAAAAAAAAAA
private_key = AAAAAAAAAAAAAAA
use_ssl = false

# Aca definis el backend para el storage. Tenes que cambiar la linea sqluri con los datos de la base de datos que creaste antes.
# El create_tables, hace que la primera vez que levantes el servidor, solo se conecte al mysql y genere todas las tablas necesarias.

[storage]
backend = syncstorage.storage.sql.SQLStorage
sqluri = mysql://USUARIO_MYSQL:CLAVE_MYSQL@SERVIDOR_MYSQL:3306/BASE_DE_DATOS
standard_collections = False
use_quota = true
quota_size = 5120
pool_size = 100
pool_recycle = 3600
create_tables = true

# Aca definis el backend para la autentificación. Tenes que cambiar la linea sqluri con los datos de la base de datos que creaste antes.
# El create_tables, hace que la primera vez que levantes el servidor, solo se conecte al mysql y genere todas las tablas necesarias.
# La linea fallback_node tiene que estar "SI o SI" en caso de que uses Apache, si no directamente no te funciona nada, da un error de 'server busy'.

[auth]
backend = services.auth.sql.SQLAuth
sqluri = mysql://USUARIO_MYSQL:CLAVE_MYSQL@SERVIDOR_MYSQL:3306/BASE_DE_DATOS
pool_size = 100
pool_recycle = 3600
create_tables = true
fallback_node = https://sync.mydomain.com/

[smtp]
host = localhost
port = 25
sender = [email protected]

[cef]
use = true
file = syslog
vendor = mozilla
version = 0
device_version = 1.3
product = weave

##### FIN DEL ARCHIVO sync.conf  #####

Guarda el archivo, y nuevamente reiniciá el Apache.

# /etc/init.d/apache2 reload

Listo, está todo configurado y preparado para funcionar!.

 

Configurando tu navegador para usar le nuevo server

Si todo esta OK, configurá tu Firefox Sync en tu navegador y todo debería funcionar.

Para ello:

– Firefox – Options – Solapa «Sync» y hace click en el boton de «configurar/setup sync».
– Elegí la opción ‘Create new account’ y en la ventana nueva, cambia donde dice «Server:» a «Use custom server».
– Ahora, completa todos los datos con tu cuenta nueva. Como server, obviamente pone https://sync.mydomain.com/.
– Deberias ver la pantalla de bienvenida diciendo que ahora estas usando Firefox Sync.

 

Debugeando ..

Bueno, es obvio que algun error o problema te va a surgir.. pero para ello están los logs:

Apache:

Hemos definido 2 logs:

/usr/local/sync-server/weblogs/access_log
/usr/local/sync-server/weblogs/error_log

Una buena idea para debugear, es hacer un tail a ambos archivos, y pulsar el boton ‘Sync Now’ del navegador.

Sync Server:

El sync server tiene un log (que se define en el archivo /usr/local/sync-server/development.ini) y por default es /tmp/sync-error.log

El navegador:

El plugin de Firefox Sync tiene una opción de logs, la cuál es muy util. Basta con abrir un nuevo tab y poner en la barra de direcciones: about:sync-log

Eso te va a mostrar todos los logs. Fijate la fecha, claro.
Si por algún motivo no ves el log o tiene fecha vieja, chequea esta página http://blog.mozilla.com/jv/2011/10/03/help-mozilla-services-operations-debug-whats-wrong-with-sync/
Ahi muestran una opción para forzar a que el log se renueve.

 

Referencia

La mayoría de la información que aparece aca,la saque de estas 3 webs:

http://docs.services.mozilla.com/howtos/run-sync.html
http://www.verboom.net/blog/index.html?single=20110714.0
http://blog.mozilla.com/jv/2011/10/03/help-mozilla-services-operations-debug-whats-wrong-with-sync/

 

Agradecimientos

A la gente de irc.mozilla.com, #sync, la mejor!

 
 

  1. jueves, 10 de mayo de 2012 a las 10:59 | #1

    Hola en estos dias e estado liado con unas tareas para la comunidad de firefox y entre ellas esta la de crear un servidor como el que propones aqui pero no he logrado resultados pues el proceso de compilacion no termina .. el proceso va bien hasta la instalación de un egg de python supongo … entre los eggs requeridos por el archivo setup.py , intenta buscar uno llamado Services el cual no aparece en ningun lugar ..aca dejo el error lanzado en la compilacion.. cualquier ayuda sera bienvenida …
    No local packages or download links found for Services>=2.0
    error: Could not find suitable distribution for Requirement.parse(‘Services>=2.0’)

  2. viernes, 11 de mayo de 2012 a las 10:18 | #2

    Que distribución de Linux usas? si usas un debian based, proba instalando los paquetes de python para soporte de mysql, apt-get install python-mysqldb

    Saludos,

  3. martes, 15 de mayo de 2012 a las 15:30 | #3

    Si bueno logre instalarlo finalmente …uso opensuse 11.4 .. ese problema lo resolví pero ahora después de unos dias de funcionando el server y solo le hice las configuraciones para mysql , pues como sabes el viene por defecto con sqlite no me sincroniza los addons todo lo demás va de maravillas pero los addons dan error…aqui te paso un extracto de los log… en los sitios de mozilla nada me ha dado respuesta sobre esto ..espero cualquier ayuda …

    1337105090422 Sync.Store.Addons WARN Failed to apply incoming record B-XGiJeum4Aw
    1337105090422 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090457 Sync.Store.Addons WARN Failed to apply incoming record ceo8GXv8_19G
    1337105090458 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090491 Sync.Store.Addons WARN Failed to apply incoming record cjezzFa9dDsy
    1337105090491 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090521 Sync.Store.Addons WARN Failed to apply incoming record GMHAaDjVJr-v
    1337105090521 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090551 Sync.Store.Addons WARN Failed to apply incoming record Nd9rmerpy2y1
    1337105090551 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090580 Sync.Store.Addons WARN Failed to apply incoming record PpVscDMYUXcs
    1337105090581 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090608 Sync.Store.Addons WARN Failed to apply incoming record QyydWO4Xte74
    1337105090608 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090636 Sync.Store.Addons WARN Failed to apply incoming record SNvnnxdHmQtB
    1337105090636 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 < ([object ProgressEvent])@AddonRepository.jsm:1378
    1337105090670 Sync.Store.Addons WARN Failed to apply incoming record UHpRZZZ1AhkO
    1337105090671 Sync.Store.Addons WARN Encountered exception: AddonRepository search failed JS Stack trace: searchFailed()@addons.js:1061 < ()@AddonRepository.jsm:920 error.sync.failed_partial
    1337105090674 Sync.ErrorHandler DEBUG addons failed to apply some records.

  4. jueves, 17 de mayo de 2012 a las 10:13 | #4

    Bueno gracias por la ayuda …ya logre solucionar o en este caso ver que no es un problema de configuracion sino que no tenia conocimiento del funcionamiento del server .. los addons no se sincronizan fisicamente es decir lo que se guarda es la referencia y luego se instalan desde AMO a la hora de sinc..gracias y saludos

  5. jueves, 17 de mayo de 2012 a las 11:02 | #5

    barbaro, me alegro!
    saludos,

  6. miércoles, 23 de mayo de 2012 a las 04:26 | #6

    esta bien chido

  1. Sin trackbacks aún.