Instalar & configurar un servidor personal (custom) de Firefox Sync
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!
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’)
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,
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.
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
barbaro, me alegro!
saludos,
esta bien chido