Creación de instaladores

Este documento explica cómo hacer instaladores de productos Mozilla 100% es-ES a partir del correspondiente instalador original en-US y los paquetes de idioma es-ES más, en algunos casos, archivos adicionales de personalización es-ES.

Resumen del procedimiento

El procedimiento consiste, a grandes rasgos, en los siguientes pasos:

Descarga del instalador original y herramientas adicionales

Los elementos a descargar son:

  • Instalador original en-US: el instalador del producto del que se quiere generar un instalador 100% es-ES. Disponible en http://ftp.mozilla.org/pub/mozilla.org/
  • tar, gzip, unzip: utilidades estándar en cualquier distribución Linux, por lo que probablemente ya estén instaladas en el sistema.
  • MI_Linux.zip: este archivo contiene la estructura de directorios, scripts y archivos de apoyo necesarios para seguir este documento en el entorno Linux.
  • MI_Win.zip: este archivo contiene la estructura de directorios, scripts y archivos de apoyo necesarios para seguir este documento en el entorno Windows. No contiene, no obstante, la mayor parte de los ejecutables de apoyo que se relacionan en los siguientes puntos.
  • Mozip.exe: utilidad para descomprimir los instaladores de los productos Mozilla. Sólo funciona correctamente en Windows 2000/XP. Dado su pequeño tamaño, está incluido en MI_Win.zip. Su página oficial, desde donde puede descargarse, es http://moztw.org/tools/.
  • sed: editor de textos mediante scripts. Se usa para realizar sustituciones en los archivos de configuración de modo automático (en lugar de que el lector de este documento tenga que abrir, por ejemplo, el archivo install.js y cambiar manualmente las descripciones de los accesos directos). Sed puede encontrarse en su web oficial. En la sección Download, hay que descargar bien el instalador (sin código fuente), Setup, bien los ZIP correspondientes a los binarios y sus dependencias.
  • zip, unzip: aunque pueden usarse utilidades gráficas del estilo de WinZip, este documento y, especialmente los scripts que automatizan parte de las tareas, harán uso de las utilidades de línea de órdenes, para hacer más homogéneas las explicaciones para todos los sistemas operativos. Disponible en: http://www.info-zip.org/pub/infozip/. IMPORTANTE: en la descarga de Info-ZIP, el ejecutable unzip.exe es de 16 bits y no respetará los nombres largos. Hay que borrarlo y renombrar unzip32.exe a unzip.exe.
  • 7-zip.exe: utilidad de compresión que consigue mejores ratios que el producto original de PkZIP. Disponible en http://www.7-zip.org/.
  • (opcional) Notepad++: o cualquier otro editor de textos que tenga prestaciones adicionales al Bloc de Notas de Windows. Notepad++ está publicado bajo licencia GPL y puede encontrarse en su web oficial. Esta aplicación se instala como cualquier aplicación nativa de Windows y, por tanto, quedará instalada en el directorio Archivo de Programas correspondiente, no en C:\MozInstaller.
  • (opcional) WinMerge: un diff gráfico con licencia GPL que ayuda bastante en la localización de las diferencias, especialmente si se utiliza también un editor de texto con indicador de número de línea como Notepad++. WinMerge puede descargarse de su web oficial. Como Notepad++, esta aplicación se instala como cualquier aplicación nativa de Windows y, por tanto, quedará instalada en el directorio Archivo de Programas correspondiente, no en C:\MozInstaller.

Creación del entorno de trabajo en el disco duro

Lo más conveniente es crear un subdirectorio MozInstaller en el directorio del usuario (p.e.: ~/MozInstaller) raíz (p.e.: C:\MozInstaller) y, dentro de él, descomprimir el archivo MI_Linux.zipMI_Win.zip, que creará un ejemplo de la estructura de subdirectorios y depositará todos los scripts y utilidades necesarios (excepto sed, zip/unzip y 7-zip, que deben descargarse por separado como se indica en la lista del apartado anterior). El aspecto del subárbol de directorios podría ser éste:

MozInstaller
|-- seamonkey
|   |-- 1.0
|   |   |-- 1.0.0
|   |   |   |-- ficheros
|   |   |   `-- src
|   |   |-- 1.0.1
|   |   |   |-- ficheros
|   |   |   `-- src
|   |   |-- 1.0.2
|   |   |   |-- ficheros
|   |   |   `-- src
|   `-- INIs
`-- mozilla
    |-- 1.7
    |   `-- 1.7.12
    |       |-- ficheros
    |       `-- src
    `-- INIs

En la estructura anterior, seamonkey y mozilla identifican productos (probablemente no necesite más que el primero; la estructura muestra dos productos simplemente como ejemplo). 1.0 en seamonkey y 1.7 en mozilla identifican versiones mayores, mientras que 1.0.0, Los directorios 1.0.1 y 1.0.2 en seamonkey y 1.7.12 en mozilla identifican versiones menores. Las versiones menores suelen compartir los mismos XPIs de idioma y región, mientras que las versiones mayores requieren XPIs separados (por ejemplo: los XPIs de idioma de SeaMonkey 1.0.0 sirven para SeaMonkey 1.0.1 y SeaMonkey 1.0.2, pero no para SeaMonkey 1.1.x).

Si piensa usar MI_Linux.zipMI_Win.zip, no necesita leer lo que queda de este apartado y puede pasar al siguiente.

Por si tiene interés, el contenido detallado de cada directorio sería el siguiente:

  • MozInstaller: scripts y ejecutables necesarios para la compresión/descompresión:
    • MI_extract.sh: script para descomprimir el instalador en-US con el que se vaya a trabajar.
    • MI_compress.sh: script para generar el instalador 100% es-ES.
    • MI_process.sh: script para automatizar la preparación del instalador Linux. Este script y los anteriores pueden, para hacer más cómodo el trabajo, ser enlazados a un directorio scripts que el usuario tenga incluido en su variable de entorno PATH.
    • diversos scripts .sed, archivos .txt y enlaces a XPIs de apoyo a MI_process.sh.
    • 7za.exe: compresor 7-zip.
    • 7zSD.sfx: mochila usada para generar instaladores autoextraíbles con el formato 7-zip.
    • MI_extract.bat: script para descomprimir el instalador en-US con el que se vaya a trabajar.
    • MI_compress.bat: script para generar el instalador 100% es-ES.
    • MI_process.bat: script para automatizar la preparación del instalador Windows.
    • mozip.exe: utilidad para descomprimir el instalador en-US con el que se va a trabajar. Invocada desde MI_extract.bat.
    • MI_setpath.bat: script para añadir el directorio MozInstaller al PATH de la sesión DOS.
    • sed.exe: utilidad de edición (búsqueda y reemplazo de cadenas) de archivos de texto. Requiere archivos de apoyo.
    • unzip.exe: utilidad para descomprimir archivos ZIP (incluyendo los renombrados a JAR o XPI). IMPORTANTE: en la descarga de Info-ZIP, el ejecutable unzip.exe es de 16 bits y no respetará los nombres largos. Hay que borrarlo y renombrar unzip32.exe a unzip.exe.
    • zip.exe: utilidad para comprimir archivos ZIP (incluyendo los renombrados a JAR o XPI).
    • spellcheckeses.xpi: extensión (o un enlace simbólico a la misma) con el diccionario es-ES. Puede descargarse de la web de NAVE, en el apartado de extensiones.
  • seamonkey, mozilla, etc. (un directorio para cada producto del que se van a generar instaladores): contiene los siguientes archivos:
    • bookmarks.html: archivo de marcadores predeterminado. En Linux se usa por MI_process.sh para incorporarlo automáticamente a defleses.xpi.
    • mailViews.dat: archivo de vistas de correo traducido. En Linux se usa por MI_process.sh para incorporarlo a defleses.xpi.
    • app.tag: configuración para 7-zip que identifica el producto ("Mozilla", "SeaMonkey", etc.) incluido en el instalador autoextraíble.
  • 1.0, 1.7, etc. (un directorio por versión principal del producto): contiene los siguientes archivos:
    • langeses.xpi: enlace simbólico al paquete de idioma válido para esa versión.
    • reges.xpi: enlace simbólico al paquete de contenido regional válido para esa versión.
  • 1.0.0, 1.0.1, 1.0.2, etc. (un directorio por versión de mantenimiento del producto; una vez la versión haya quedado obsoleta por otra, puede borrarse el directorio y su contenido. Por ejemplo, si se dispone del directorio 1.0.1 dentro de SeaMonkey, una vez esté disponible la versión 1.0.2, puede crearse el directorio 1.0.2 y borrarse la versión 1.0.1): el archivo que contendrá habitualmente este directorio será el del instalador original en-US.
  • ficheros: ficheros contenidos en el instalador original en-US sobre los que se realizan modificaciones y sustituciones para terminar sirviendo de origen para el instalador 100% es-ES.
  • src: copia de respaldo de los ficheros contenidos en el instalador original en-US en caso de cometer algún error durante el trabajo con los ubicados en el directorio ficheros.
  • INIs: directorio en el que se depositan, al generar el instalador 100% es-ES, los archivos INI usados tanto en el original en-US (que están disponibles en el directorio src) como los archivos traducidos (ubicados en ficheros). Los archivos se guardan insertando, antes de la extensión, la cadena _ab_VER, donde ab es en para el archivo en-US y es para el archivo es-ES, y VER es el número de versión.

Descompresión del instalador original en-US

Una vez creado el entorno de trabajo hay que seguir estos pasos:

  • Descargar el instalador original en-US en el directorio con el nombre de la versión del producto en cuestión, por ejemplo: <home_usuario>/MozInstaller/mozilla/1.8/1.8b1/mozilla-i686-pc-linux-gnu-1.7.12-installer.tar.gz C:\MozInstaller\mozilla\1.8\1.8b1\mozilla-win32-1.8b1-installer.exe.
  • A continuación, desde la consolael Símbolo del sistema/Interfaz de comandos, hay que situarse en el directorio del producto y versión (p.e.: cd <home_usuario>/MozInstaller/mozilla/1.8/1.8b1 cd C:\MozInstaller\mozilla\1.8\1.8b1).
  • Por último, hay que ejecutar el script MI_extract.sh <ejecutable_del_instalador_enUS> (p.e.: ../../MI_extract.sh mozilla-i686-pc-linux-gnu-1.7.12-installer.tar.gz MI_extract.bat <ejecutable_del_instalador_enUS> (p.e.: MI_extract.bat mozilla-win32-1.8b1-installer.exe. Eso descomprimirá los archivos incluidos en el instalador en-US dentro del subdirectorio src y los copiará inmediatamente al subdirectorio ficheros. El propósito del directorio src es servir como copia de respaldo en caso de cometer una equivocación durante los pasos siguientes.

Modificación de los paquetes necesarios para su personalización o adaptación a es-ES

Ésta es la parte principal de la personalización. Mediante el uso de los scripts, este proceso es prácticamente automático. No obstante, los scripts son muy sensibles a pequeños cambios en los archivos que se modifican, por lo que pequeños cambios en éstos afectarían a la funcionalidad de los scripts. Por este motivo, se describen en este apartado todos los cambios a realizar.

El proceso automatizado de adaptación se realiza invocando el script MI_process.sh bat <nombre_producto> <versión_mayor> <versión_menor> (p.e.: MI_process.shbat seamonkey 1.0 3). Si ejecuta este script y no obtiene errores, puede ignorar el resto de este apartado y pasar al siguiente.

Para indicar la relación completa de modificaciones a realizar, primero se explica brevemente en qué consisten las acciones que luego se mencionan para cada archivo, y seguidamente se relacionan las modificaciones.

Acciones a seguir

  • Descomprimir un XPI o un JAR: un XPI y un JAR son, en ambos, casos, archivos ZIP renombrados. Se descomprimen, situándose en el mismo directorio en el que se encuentran, con la orden unzip -d <dir> <archivo.xpi/jar>, donde <dir> es el directorio donde se depositarán los archivos extraídos; por simplicidad, en este documento se supone que el directorio se llama igual que el archivo XPI/JAR. Por ejemplo: unzip -d browser browser.xpi.
  • Editar un archivo .js/.ini: los archivos .js y .ini contienen datos de configuración y mensajes de la instlación. Son archivos de texto normales que pueden editarse con gEdit, viBloc de Notas, Notepad++, etc. Debe prestarse atención y borrar los archivos de respaldo que algunos editores de texto crean, especialmente en Linux.
  • Regenerar un XPI o un JAR: consiste en volver a unir un conjunto de archivos previamente descomprimidos en el correspondiente XPI/JAR. Puesto que se quiere reducir al máximo el tamaño de los instaladores, es preferible crear el archivo sin compresión y dejar que la compresión se aplique al final por tar+gzip7-zip. Para ello, la orden a usar dentro del directorio en el que se descomprimió originalmente el archivo y tras haber borrado previamente el archivo que se quiere regenerar será ésta: zip -0 -r ../<archivo.xpi/jar> * (ejemplo: zip -0 -D -r ../browser.xpi *)zip -0 -r ..\<archivo.xpi/jar> * (ejemplo: zip -0 -D -r ..\browser.xpi *).
  • Sustituir un XPI: consiste en reemplazar un XPI con contenido en inglés por otro con contenido en español. Además de los paquetes de idioma y contenido regional, también se sustituyen los XPIs de algunas extensiones que disponen de versión traducida, así como el XPI de valores predeterminados para nuevos perfiles.

En browser.xpi

Descomprimir browser.xpi y hacer los siguientes cambios:

Archivo Acción Detalles
bin/defaults/pref/browser-prefs.js Cambiar general.smoothScroll a true (Línea 57)
pref("general.smoothScrool", true);
  Añadir al final preferencias adicionales // es-ES especific preferences
pref("browser.tabs.autoHide", false);
pref("browser.tabs.forceHide", false);
pref("browser.tabs.loadInBackground", false);
pref("browser.tabs.opentabfor.middleclick", true);
pref("browser.tabs.opentabfor.urlbar", true);
pref("browser.tabs.opentabfor.windowopen", false);
pref("browser.tabs.opentabfor.bookmarks", false);
pref("browser.tabs.warnOnClose", true);
pref("network.cookie.cookieBehavior", 1);
bin/chrome/installed-chrome.txt Sustituir las referencias en-US por es-ES, en-mac por es-mac, en-unix por es-unix, en-win por es-win y US por ES  
bin/chrome/chromelist.txtbin\chrome\chromelist.txt Sustituir las referencias en-US por es-ES, en-mac por es-mac, en-unix por es-unix, en-win por es-win y US por ES
install.js Intercambiar líneas de registro de classic.jar y modern.jar. De este modo, el tema predeterminado será Modern. (Línea 197763)
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","modern.jar"),"skin/modern/communicator/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","modern.jar"),"skin/modern/editor/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","modern.jar"),"skin/modern/global/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","modern.jar"),"skin/modern/messenger/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","modern.jar"),"skin/modern/navigator/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/communicator/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/editor/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/global/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/messenger/");
registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/navigator/");
install.js  Traducir las entradas del menú en createShortcuts (Línea 159)

scExeDesc = "SeaMonkey";
scReadmeDesc = "Léame";
scLicenseDesc = "Licencia";
scProfileDesc = "Administrador de perfiles";

Regenerar browser.xpi y sustituir el original, borrando el directorio browser/ tras comprobar que el nuevo XPI se ha generado correctamente (es decir, que su contenido es el del directorio).

En mail.xpi

Descomprimir mail.xpi y hacer los siguientes cambios:

Archivo Acción Detalles
install.js Traducir las entradas del menú en createShortcuts (Línea 178)

scDescPalmSyncInstall = "Instalar la sincronización de la libreta de direcciones con Palm";
scDescPalmSyncUninstall = "Desinstalar la sincronización de la libreta de direcciones con Palm";
filePalmSyncReadme = getFolder("Program", "palm.html");
scDescPalmSyncReadme = "Guía de usuario de sincronización con Palm";
fileMailIcon = getFolder("Chrome", "icons/default/messengerWindow.ico");
scExeDesc = "Correo de SeaMonkey";
scParam = "-mail";

scFolderName = "SeaMonkey";
folderPalmSyncName = "Herramientas para Palm";

Regenerar mail.xpi y sustituir el original, borrando el directorio mail/ tras comprobar que el nuevo XPI se ha generado correctamente (es decir, que su contenido es el del directorio).

Añadir al XPI del corrector ortográfico el idioma es-ES

El corrector ortográfico incluido en el instalador en-US incluye el diccionario en-US. El proyecto NAVE añade los archivos correspondientes al diccionario es-ES. Para ello, se puede usar la última versión disponible de la extensión SpellCheck disponible en NAVE.

Sustituir los XPIs relativos al idioma y perfil predeterminado

Los XPIs que afectan al idioma y contenido regional son langenus.xpi y regus.xpi, que han de ser sustituidos, respectivamente, por el XPI de idioma es-ES, renombrado a langeses.xpi, y el de contenido regional ES, renombrado a reges.xpi.

El XPI con valores predeterminados para nuevos perfiles es deflenus.xpi, que ha de ser reemplazado por el archivo defleses.xpi. Un archivo defleses.xpi funcional puede extraerse de un instalador 100% es-ES ya existente.

En chatzilla.xpi, inspector.xpi, reporter.xpi, sroaming.xpi y venkman.xpi

Descomprimir el XPI correspondiente y hacer los siguientes cambios:

Archivo Acción Detalles
install.js Comentar la línea de registro del locale en-US Ejemplo para el caso de ChatZilla (línea 119)
// registerChrome(LOCALE | DELAYED_CHROME, getFolder("Chrome","chatzilla.jar"), "locale/en-US/chatzilla/");

Regenerar el XPI y sustituir el original, borrando el directorio creado para la descompresión tras comprobar que el nuevo XPI se ha generado correctamente (es decir, que su contenido es el del directorio).

Traducción/actualización de los ficheros de configuración del instalador

El instalador se apoya en dos archivos: config.ini e installer.iniinstall.ini. El script que crea en el paso final el instalador es-ES para una versión cualquiera guarda copias de estos archivos en inglés y español en el directorio <producto>/INIs, lo que facilita la actualización de los archivos ya traducidos replicando en éstos los cambios existentes entre dos versiones de los archivos en inglés.

Traducir/actualizar config.ini

El archivo config.ini está en el directorio ficheros/seamonkey-installerficheros, y contiene numerosas cadenas que deben traducirse para que el instalador presente las ventanas de selección de opciones en español. Las cadenas a traducir van siempre precedidas del comentario "** LOCALIZE ME BABY **".

El archivo en Linux debe mantenerse codificado en UTF-8; enEl archivo en Windows debe mantenerse codificado en ANSI, el juego de caracteres predeterminado en Windows. En caso contrario, los caracteres internacionales no serán legibles.

Además de los cambios estrictamente debidos a la traducción de textos en el archivo, también deberían ajustarse los valores correspondientes a nombres y tamaños de los archivos instalados. Por ejemplo, si se sustituye (como, de hecho, debe hacerse) el archivo langenus.xpi por langeses.xpi, debe modificarse la parte relevante del archivo, como se muestra a continuación:

[Component En US lang pack]
;*** LOCALIZE ME BABY ***
Description Short=English (US) language pack
;*** LOCALIZE ME BABY ***
Description Long=English (US) language pack
Archive=langenus.xpi
Install Size=2240
Install Size System=1
Install Size Archive=454

Attributes=SELECTED|INVISIBLE|FORCE_UPGRADE
Force Upgrade File0=[SETUP PATH]\chrome\en-US.jar
[Component En US lang pack]
;*** LOCALIZE ME BABY ***
Description Short=Paquete de idioma español (España)
;*** LOCALIZE ME BABY ***
Description Long=Paquete de idioma español (España)
Archive=langeses.xpi

Install Size=644
Install Size System=1
Install Size Archive=558
Attributes=SELECTED|INVISIBLE|FORCE_UPGRADE
Force Upgrade File0=[SETUP PATH]\chrome\es-ES.jar

Dado que el archivo es largo y cambia poco entre versiones, es más conveniente reutilizarlo. El proceso es el siguiente, suponiendo que se dispone de los archivos traducidos para la versión 1.0.0 y se quieren traducir los de la versión 1.0.+ (se usa este valor para facilitar la diferenciación de ambos números de versión):

  • Copiar el archivo config_es_1.0.0.ini al directorio 1.0.+/ficheros/seamonkey-installer\ficheros.
  • Detectar las diferencias entre el archivo config.ini de la versión 1.0.+ y el de la versión 1.0.0 ejecutando la orden (desde el directorio de la versión 1.0.+ donde se encuentra config.ini):
    • diff -abC1 config.ini ../../../../INIs/config_en_1.0.0.ini
    • fc /L /N config.ini ..\..\..\INIs/config_en_1.0.0.ini, u opcionalmente, WinMerge.

Si no está usando WinMerge, se sugiere redireccionar la salida anterior a un archivo de texto para visualizarlo mientras se van aplicando las modificaciones detectadas en el archivo traducido.

Traducir install.ini

El archivo installen.ini está en el directorio ficheros/mozilla-installerficheros, y contiene numerosas cadenas que deben traducirse para que el instalador presente los mensajes que aparecen durante la instalación en español. Pueden aplicarse las mismas recomendaciones indicadas para config.ini sobre reutilización de archivos de versiones anteriores y detección de cambios.

Generación del nuevo instalador 100% es-ES

Para crear el nuevo instalador basta con ejecutar estos pasos:

  • Situarse en el directorio de la versión del producto que se quiere generar.
  • Ejecutar la orden MI_compress.sh <nombre_producto> <versión_mayor> <versión_menor>MI_compress.bat <nombre_producto> <versión_mayor> <versión_menor>.

Además de generar el tar.gz con el instaladorejecutable autoinstalable, el script guarda copias de los archivos INI originales y traducidos en el directorio INIs, para que sirvan de referencia en versiones posteriores.

Historial de versiones

  • Versión de este documento: 0.4
  • Si imprime este documento para servirse de él como referencia, asegúrese de que corresponde a la última versión actualizada, disponible en http://www.proyectonave.es/docs/instaladores
  • Autores:
    • Víctor Fernández (información original para Windows)
    • Óscar Manuel Gómez Senovilla (información original para Linux)
    • Ricardo Palomares Martínez (normalización de procedimientos entre los distintos sistemas operativos, preparación de scripts adicionales para Windows, y composición del documento)
  • Versión 0.4: añadidas operaciones a la construcción del instalador en Windows y revisada la presentación general para permitir obviar los detalles a quien use los scripts proporcionados (que también han sido actualizados).
  • Versión 0.3: revisada la información.
  • Versión 0.2: añadida información sobre Linux.
  • Versión 0.1: versión inicial con información sobre Windows.