He estado peleándome con las fuentes de Google Gears y por fín he conseguido generar una versión de Gears para Linux 64 bits
. Mal comienzo… “Muchos” (desde luego no más de los que estáis leyendo esto) estaréis pensando… ¿Qué es Gears?
Gears es una extensión creada por google para varios navegadores que permite trabajar con aplicaciones web en modo offline (o acelerar la carga de ciertas partes de la página para mejorar la experiencia del usuario… que marketinera me ha salido esta última frase… :p) (para Firefox está en forma de extensión/complemento, para otros navegadores.. no sé exactamente que “forma” toma).
Información sobre esta extensión hay a montones por internet, al final del artículo os dejo referencias, así que no me entretendré en explicar lo que otros ya han escrito.. (y mucho mejor de lo que llegaría a hacerlo yo). Entonces.. ¿Por qué escribo esto? Pues bien, resulta que Gears no está disponible oficialmente para las versiones de 64 bits de Linux, sólo hay algunas versiones no oficiales… bastante desactualizadas (en estos momentos tienen hasta la 4.9 y la última versión lanzada por google es la 5.4.2) .
Pero… yo he parcheado un poco el código fuente disponible en los repositorios svn, he compilado y finalmente he conseguido una versión funcional para mi navegador de 64 bits. El problema… la versión que he compilado es la 5.6.0, una versión que no ha sido lanzada todavía, así que es posible que tenga algun bug que otro.
Podeis bajarlo de aquí: Google Gears para Linux 64 bits
En breve modifico este artículo y cuelgo el proceso que he seguido (He hecho unas cuantas trampas… :p) (Me he dejado las notas y hasta que no las recupere no podré describirlo suficientemente bién, aunque había algun que otro post en foros de internet, estos se referían a versiones “antiguas” y tampoco dan explicaciones completas)
Proceso:
Antes que nada me he pasado por los foros de Google y visité una discusión que trataba el tema, en ella se mostraban diferentes (en realidad sólo 2), el parche que apliqué yo está basado en el primero de los que se exponen (modificado, pues el parche se hizo para una versión bastante antigua).
Pues bién, el primer paso consiste en descargar el código del svn con el siguiente comando (yo trabajé con la revisión 3093):
svn checkout http://gears.googlecode.com/svn/trunk/ gears-read-only
Una vez hecho esto modificaremos el fichero gears/tools/config.mk cambiando la línea
ARCH = i386 por
ARCH = x86_64 ,
la línea
MODE = dbg por
MODE = opt ,
y la línea
COMPILE_FLAGS = -c -o $@ -fPIC -fmessage-length=0 -Wall -Werror $(COMPILE_FLAGS_$(MODE)) por
COMPILE_FLAGS = -c -o $@ -fPIC -fmessage-length=0 -Wall $(COMPILE_FLAGS_$(MODE))
éste último cambio lo hacemos por que si no los warnings no nos dejarán compilar (ya advertí que seguramente tiene algun que otro error escondido la versión que compilé).
Pasemos al siguiente fichero, el cambio se hace por que los punteros en sistemas de 64 bits son más grandes. Abrimos el fichero gears/localserver/firefox/async_task_ff.cc y cambiamos la siguiente línea:
OnListenerEvent(msg_code, reinterpret_cast<int>(msg_param)); por ésta otra:
OnListenerEvent(msg_code, reinterpret_cast<long>(msg_param));
Aquí es donde yo empecé a aplicar mis propios cambios (que son una tontería, pero permitieron que consiguiera compilar).
En los siguientes ficheros:
- third_party/googleurl/src/url_parser.cc
- gears/base/common/http_utils.cc
- gears/geolocation/backoff_manager.cc
añadiremos la línea (al principio de todo):
#include <stdlib.h>
En los siguientes:
- third_party/jsoncpp/json_reader.cc
- third_party/jsoncpp/json_value.cc
- gears/base/common/string16.h
- gears/base/common/http_utils.cc
añadiremos la línea (al principio de todo):
#include <string.h>
Y por último, en el fichero gears/base/common/str_utils.cc añadiremos la línea:
#include <limits.h>
Para continuar tendremos que instalar los paquetes de desarrollo de Firefox 3 y del Xulrunner 1.9, yo desde mi Ubuntu 8.10 lo hice así:
aptitude install xulrunner-dev firefox-dev
Ésto lo hacemos para tener las librerías de 64 bits que utilizaremos para reemplazar las de 32 bits que hay en el código que nos hemos bajado y así poder enlazar correctamente los binarios que deseamos obtener. Estos ficheros los sustituiremos por la versión instalada en nuestro sistema:
- third_party/gecko_1.9/linux/gecko_sdk/lib/libxpcom.so
- third_party/gecko_1.9/linux/gecko_sdk/lib/libxpcomglue.a
- third_party/gecko_1.9/linux/gecko_sdk/lib/libxpcomglue_s.a
- third_party/gecko_1.9/linux/gecko_sdk/lib/libnspr4.so
- third_party/gecko_1.9/linux/gecko_sdk/bin/xpidl
- third_party/gecko_1.9/linux/gecko_sdk/bin/xpt_link
Pero el trabajo no se acaba aquí, continuemos. Nos movemos al siguiente directorio:
third_party/gecko_1.9/linux/gecko_sdk/bin
y ejecutamos los siguientes comandos:
chmod +x xpidl
chmod +x xpt_link
El siguiente paso es el más lento de todos (y el más sencillo), tecleamos en la línea de comandos dentro del directorio gears :
make BROWSER=FF3
Una vez hecho esto ya casi estaremos. Creamos un directorio fuera del que creó svn al descargar las fuentes, le llamaremos XPI . Entramos en él y ejecutamos el siguiente comando para descargar el paquete actual de Gears (para 32 bits):
wget http://dl.google.com/gears/current/gears-linux-opt.xpi
Lo descomprimimos (en realidad es un zip normal y corriente):
unzip gears-linux-opt.xpi
Ahora tendremos que modificar algunos ficheros, sustituir otros, comprimir… y ya estaremos! Abrimos el fichero install.rdf y modificamos las siguientes líneas:
<!– Prevent this XPI from being installed on the wrong platform. –>
<em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
<!– Ubuntu Edgy Eft requires “linux-gnu” for the OS_TARGET prefix. –>
<em:targetPlatform>linux-gnu_x86-gcc3</em:targetPlatform>
por éstas otras:
<!– Prevent this XPI from being installed on the wrong platform. –>
<em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
<!– Ubuntu Edgy Eft requires “linux-gnu” for the OS_TARGET prefix. –>
<em:targetPlatform>linux-gnu_x86_64-gcc3</em:targetPlatform>
Entramos en el subdirectorio components . Allí sustituiremos los ficheros gears.xpt y libgears.so (el fichero libgears_ff2.so no lo tocaremos por que no hemos compilado nada para Firefox 2, aun así, si queréis tenerlo, simplemente tenéis que cambiar FF3 por FF2 en el make anterior) por las nuevas versiones que habremos generado, que se encontrarán en el directorio
gears/bin-opt/linux-x86_64/ff3/
Una vez hecho esto comprimimos otra vez el directorio (si os ha quedado el .xpi de google anterior dentro, quitadlo de allí) . Notad que tenéis que comprimirlo con el formato zip (ninguno otro servirá). Al fichero resultante le ponéis la extensión xpi y por fin podréis instalarla y provarla!!
Referencias:
- Conociendo las posibilidades de la extension de Google Gears y su API
- Blog de Google Gears
- API de Google Gears
- Algunos artículos más
« Números: 2 Números: 3 »


Wow! buenisimo viejo! yo ya habia bajado el svn para tratar de hacer lo que hiciste! buenisimo!! ahora faltaria que notifiques al equipo de Ggears nada mas!
Muchas felicidades y muchas gracias me facilitaste la vida jajaja
Saludos!
Marcelo Elizeche Landó
http://www.elOtroBlog.com
En serio, com collons saps fer totes aquestes coses? En fi, jo encara estic barallant-me amb Ubuntu per poder connectar-me a una xarxa wireless, així que suposo que vaig una miqueta enrederit. T.T
Pel que fa a la història que he penjat la meu bloc, no està tret de cap lloc, la vaig escriure ahir a la nit en un momentet d’inspiració. Però potser l’estil que faig servir s’assembla a algun dels autors que llegeixo. Potser la continuo, però a vegades aquestes històries és millor deixar-les com estan i que cadascú se les acabi
Parlem per lo de Amsterdam! Que ja m’han dit que et vens!!! ^^
woow… gran trabajo el que te has mandado…vamos a probar si ahora va como corresponde
Hola,
Llegué tarde a tu BLOG y muchas cosas las hice por ensayo y error, sólo que a mi me compilo con gcc43 y tuve que cambiar un poco de cosas pero al final funcionó. Me guié por esta pagina http://gcc.gnu.org/gcc-4.3/porting_to.html . Y bueno cuando ya estaba listo el build no sabia lo del xpi y fue cuando encontré tu BLOG. Excelente amigo gracias.
Yo necesite compilarlo porque la versión que se baja del 0.5.36 es de 64bits, pero yo tengo openSuse 11.2 que tiene gcc43 por omisión y como no entendía bien el asunto, me lance a compilar con gcc43.
Ahora tengo Firefox 3.6 con google gears funcionando compilado con gcc43
Saludos,
Carlos
Por cierto, ¿dejaste constancia del procedimiento que seguiste tu? Hace tiempo que no tengo Gears instalado porque me dió pereza recompilar las nuevas versiones para mi Firefox.
(Tambiién podrías colgar tu xpi en alguna parte
)
Saludos!