Autohosting para Linux

Linux es la única plataforma en la que los usuarios de Chrome pueden instalar extensiones alojadas fuera del Chrome Web Store En este artículo, se describe cómo empaquetar, alojar y actualizar crx de un servidor web de uso general. Si distribuyes una extensión o un tema solo a través de Chrome Web Store, consulta Hosting de Webstore y actualizando.

Paquete

Las extensiones y los temas se publican como archivos .crx. Al realizar una carga a través del desarrollador de Chrome Panel, el panel crea automáticamente el archivo crx. Si se publicó en un servidor personal, el archivo crx deberá crearse de forma local o descargarse de Chrome Web Store.

Descargar .crx de Chrome Web Store

Si una extensión está alojada en Chrome Web Store, el archivo .crx se puede descargar desde la Panel del desarrollador Ubica la extensión en "Tus fichas". y haz clic en “Más información”. En la haz clic en el vínculo azul main.crx para descargarlo.

Descarga .crx del Panel del desarrollador

El archivo descargado se puede alojar en un servidor personal. Esta es la forma más segura de alojar un extensión localmente, ya que Chrome Web Store firmará su contenido. Esta ayuda a detectar posibles ataques y manipulaciones.

Crear .crx localmente

Los directorios de extensiones se convierten en archivos .crx en la página Administración de extensiones. Navegar a chrome://extensions/ en el cuadro multifunción o al hacer clic en el menú de Chrome, mantén el puntero sobre "Más herramientas". luego, selecciona "Extensiones".

En la página Administración de extensiones, habilita el modo de desarrollador. Para ello, haz clic en el interruptor que se encuentra junto a Modo de desarrollador. Luego, selecciona el botón PACK EXTENSION.

Se marcó el modo de desarrollador, por lo que se hace clic en Paquete de extensión.

Especifica la ruta de acceso a la carpeta de la extensión en el campo del directorio raíz de la extensión y, luego, haz clic en Botón PAQUETE DE EXTENSIÓN. Ignora el campo Clave privada para un paquete por primera vez.

Especifica la ruta de la extensión y, luego, haz clic en Empaquetar extensión.

Chrome creará dos archivos, un archivo .crx y un archivo .pem, que contiene el archivo privada.

Archivos de extensión empaquetados

No pierdas la clave privada. Mantén el archivo .pem en un lugar secreto y seguro. será necesario para actualizar la extensión.

Actualizar un paquete .crx

Para actualizar el archivo .crx de una extensión, aumenta el número de versión en manifest.json.

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

Vuelve a la página Administración de extensiones y haz clic en el botón PAQUETE DE EXTENSIÓN. Especifica el al directorio de extensiones y a la ubicación de la clave privada.

Cómo actualizar archivos de extensión

La página proporcionará la ruta de acceso de la extensión empaquetada actualizada.

Cómo actualizar archivos de extensión

Cómo empaquetar a través de la línea de comandos

Para empaquetar las extensiones en la línea de comandos, invoca a chrome.exe. Usa el --pack-extension para especificar la ubicación de la carpeta de la extensión y la marca --pack-extension-key para especifica la ubicación del archivo de claves privadas de la extensión.

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Host

Un servidor que aloja archivos .crx debe usar encabezados HTTP adecuados para permitir que los usuarios instalen el extensión si haces clic en un vínculo.

Google Chrome considera que un archivo se puede instalar si se cumple alguna de las siguientes condiciones:

  • El archivo tiene el tipo de contenido application/x-chrome-extension.
  • El sufijo del archivo es .crx y ambas condiciones son verdaderas:
    • El archivo no se entrega con el encabezado HTTP X-Content-Type-Options: nosniff
    • El archivo se entrega con uno de los siguientes tipos de contenido:
    • string vacía
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

El motivo más común por el que no se reconoce un archivo instalable es que el servidor envía el encabezado X-Content-Type-Options: nosniff. La segunda razón más común es que el servidor envía una un tipo de contenido desconocido, que no esté en la lista anterior. Para solucionar un problema de encabezado HTTP, cambia la configuración del servidor o intenta alojar el archivo .crx en otro servidor.

Actualizar

Cada algunas horas, el navegador revisa las extensiones instaladas en busca de una URL de actualización. Para cada uno, hace un a esa URL buscando un archivo de manifiesto XML de actualización.

  • El contenido que devuelve una verificación de actualizaciones es un documento XML de manifiesto de actualización que enumera la versión de una extensión.

Si el manifiesto de actualización menciona una versión más reciente que la instalada, el navegador descarga e instala la nueva versión. Al igual que con las actualizaciones manuales, se debe firmar el archivo .crx nuevo con la misma clave privada que la versión instalada actualmente.

Nota: Para mantener la privacidad del usuario, Google Chrome no envía ningún encabezado de Cookie con solicitudes de manifiesto de actualización automática y omite cualquier encabezado Set-Cookie en las respuestas a esas solicitudes.

URL de actualización

Las extensiones alojadas en servidores fuera de Chrome Web Store deben incluir el campo update_url en su archivo manifest.json.

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Actualizar manifiesto

El manifiesto de actualización que muestra el servidor debe ser un documento XML.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

Este formato XML se tomó del que usa Omaha, la infraestructura de actualizaciones de Google. El de extensiones, usa los siguientes atributos para los elementos <app> y <updatecheck> de la manifiesto de actualización:

appid
El ID de la extensión se genera en función de un hash de la clave pública, como se describe en empaquetado. El ID de una extensión se muestra en la página Administración de extensiones.
base de código
Es una URL HTTPS al archivo .crx.
versión
Lo usa el cliente para determinar si debe descargar el archivo .crx que especifica codebase. Debería coincidir con el valor de "version". en el archivo manifest.json del archivo .crx.

El archivo XML de manifiesto de actualización puede contener información sobre varias extensiones al incluir varias Elementos <app>.

Prueba

La frecuencia de comprobación de actualizaciones predeterminada es de varias horas, pero puedes forzar la aplicación de la Actualización ahora en la página Administración de extensiones.

Actualizar las extensiones ahora

Esta acción iniciará las verificaciones de todas las extensiones instaladas.

Uso avanzado: parámetros de solicitud

El mecanismo básico de actualización automática está diseñado para que el trabajo en el servidor sea tan fácil como colocar un archivo en formato XML estático en cualquier servidor web simple, como Apache, y actualizar ese archivo en formato XML como nuevo se lanzaron varias versiones de la extensión.

Los desarrolladores que alojan varias extensiones pueden verificar los parámetros de solicitud, que indican el ID de la extensión y la versión en la solicitud de actualización. Incluir estos parámetros permite que las extensiones se actualicen desde el la misma URL ejecuta un código dinámico del servidor, en lugar de un archivo en formato XML estático.

El formato de los parámetros de la solicitud es el siguiente:

?x=EXTENSION_DATA

Donde EXTENSION_DATA es una cadena codificada para URL del siguiente formato:

id=EXTENSION_ID&v=EXTENSION_VERSION

Por ejemplo, hay dos extensiones que dirigen a la misma URL de actualización (https://test.com/extension_updates.php):

  • Extensión 1
    • ID: “aaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Versión: “1.1”
  • Extensión 2
    • Número de identificación: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versión: "0.4"

La solicitud para actualizar cada extensión individual sería

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

y

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Se pueden enumerar varias extensiones en una sola solicitud para cada URL de actualización única. Para el período anterior Por ejemplo, si un usuario tiene instaladas ambas extensiones, las dos solicitudes se combinan en solicitud única:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Si la cantidad de extensiones instaladas que usan la misma URL de actualización es lo suficientemente grande como para que se envíe una solicitud GET La URL es demasiado larga (más de 2000 caracteres aprox.), la verificación de actualizaciones emite solicitudes GET adicionales como necesario.

Uso avanzado: versión mínima del navegador

A medida que se agregan más APIs al sistema de extensiones, se actualiza la versión de una extensión que funcionará. solo con versiones más recientes del navegador. Si bien Google Chrome se actualiza automáticamente, Pueden pasar algunos días antes de que la mayoría de la base de usuarios se actualice a un nuevo lanzamiento. Para garantizar que una actualización determinada se aplique solo a las versiones de Google Chrome que sean iguales o posteriores a una versión versión, agrega el comando "prodversionmin" al elemento <app> en la respuesta de la actualización.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

Esto garantiza que los usuarios actualicen automáticamente a la versión 2 solo si ejecutan Google Chrome. 3.0.193.0 o superior