Distribución de aplicaciones

Flatpak proporciona varias formas de distribuir aplicaciones. El método principal es alojando un repositorio. Esto es relativamente simple, aunque hay algunos detalles importantes a tener en cuenta, y permite que se distribuyan actualizaciones de las aplicaciones.

También es posible distribuir Flatpaks como un solo archivo autocontenido, lo que puede ser útil en algunas situaciones.

Hospedar un repositorio

Las secciones anteriores de esta guía describen cómo generar repositorios usando build-export o flatpak-builder. El repositorio OSTree resultante puede ser hospedado en un servidor web para consumo de los usuarios.

Detalles importantes

Los repositorios OSTree usan archive-z2, lo que significa que contienen un solo archivo por cada archivo de la aplicación. Esto implica que las operaciones pull harán una gran cantidad de peticiones HTTP. Dado que las nuevas peticiones son lentas, es importante activar el keep-alive de HTTP en el servidor web.

OSTree tiene una característica llamada deltas estáticos. Estos son archivos únicos en el repositorio que contienen todos los datos necesarios para pasar de una revisión a otra (o de nada a una revisión). La creación de estos deltas tomará más espacio en el servidor, pero hará que las descargas sean mucho más rápidas. Esto puede hacerse con la opción build-update-repo --generate-static-deltas.

Firmas GPG

OSTree usa GPG para verificar la identidad de los repositorios. Esto requiere que todos los commits a un repositorio usen una firma GPG, así también como cuando se modifique el archivo sumario de un repositorio.

Para hacerlo, se debe pasar una clave GPG a los comandos build-update-repo y build-export, así como también a flatpak-builder si está siendo usado para modificar o crear un repositorio. Si todavía no tiene una clave, es fácil generar una.) Por ejemplo:

$ flatpak build-export --gpg-sign=KEYID --gpg-homedir=PATH REPOSITORY DIRECTORY

Aquí --gpg-homedir es opcional, y permite especificar el directorio home de la clave a ser usada.

Si bien en general no se recomienda, es posible desactivar la verificación GPG de los repositorios OSTree. Para hacerlo, la opción --no-gpg-verify se puede usar cuando se agregue un remoto. La verificación GPG también puede desactivarse en un remoto existente usando flatpak remote-modify.

Notar que es necesario convertirse en root para poder actualizar un remoto que no tenga verificación de GPG activada.

Referenciar repositorios

Una forma conveniente de dirigir a los usuarios al repositorio que contiene su aplicación es proporcionando un archivo .flatpakrepo que puedan descargar e instalar. Para instalar un archivo .flatpakrepo manualmente, use el comando:

$ flatpak remote-add --from foo.flatpakrepo

Un archivo .flatpakrepo típico luce así:

[Flatpak Repo]
Title=GEdit
Url=http://sdk.gnome.org/repo-apps/
GPGKey=mQENBFUUCGcBCAC/K9WeV4xCaKr3...

Si su repositorio contiene una sola aplicación, puede ser más conveniente usar un archivo .flatpakref, que contenga la información suficiente para agregar el repositorio e instalar la aplicación al mismo tiempo. Para instalar un .flatpakref manualmente, usar el comando:

$ flatpak install --from foo.flatpakref

Un archivo .flatpakref típico luce así:

[Flatpak Ref]
Title=GEdit
Name=org.gnome.gedit
Branch=stable
Url=http://sdk.gnome.org/repo-apps/
IsRuntime=False
GPGKey=mQENBFUUCGcBCAC/K9WeV4xCaKr3...
RuntimeRepo=https://sdk.gnome.org/gnome.flatpakrepo

Notar que la clave GPGKey en estos archivos contienen la clave GPG codificada en base64, la cual puede obtener con el siguiente comando:

$ base64 --wrap=0 < foo.gpg

Empaquetado en un solo archivo

Hospedar un repositorio es la forma preferida de distribuir una aplicación, pero a veces un solo archivo autocontenido que se pueda hacer disponible en un sitio web o enviado adjunto en un email es más conveniente. Flatpak brinda capacidad para esto con los comandos build-bundle y build-import-bundle que convierten una aplicación en un repositorio en un archivo autocontenido y viceversa:

$ flatpak build-bundle [OPTION...] LOCATION FILENAME NAME [BRANCH]
$ flatpak build-import-bundle [OPTION...] LOCATION FILENAME

Por ejemplo, para crear un archivo autocontenido llamado dictionary.flatpak que contenga a la aplicación Diccionario de GNOME desde un repositorio ubicado en ~/repositories/apps, correr:

$ flatpak build-bundle ~/repositories/apps dictionary.flatpak org.gnome.Dictionary

Para importar el autocontenido en un repositorio de otra máquina, correr:

$ flatpak build-import-bundle ~/my-apps dictionary.flatpak

Notar que los autocontenidos tienen algunas desventajas comparados con los repositorios. Por ejemplo, es mucho más conveniente distribuir actualizaciones con un repositorio hospedado, dado que los usuarios simplemente necesitan correr flatpak update.