Flatpak Builder

La mayoría de las aplicaciones requieren dependencias adicionales que no están provistas por los runtimes. Flatpak permite que estas dependencias se agrupen como parte de la aplicación misma. Para hacer esto, cada dependencia debe ser construida dentro del directorio build de la aplicación. La herramienta flatpak-builder automatiza este proceso que suele tomar múltiples pasos, haciendo posible construir todos los módulos de la aplicación con un solo comando.

flatpak-builder espera módulos que se construyen de la manera estándar siguiendo lo que se conoce como la API de construcción. Esto requiere modificar los módulos para que sigan dicha API, si es que aún no lo hacen.

Todas las entidades json están explicadas en la página man de flatpak-builder.

Manifiestos

La entrada de flatpak-builder es un archivo JSON que describe los parámetros para construir una aplicación, así como los de cada módulo a ser agrupado. Este archivo se llama el manifiesto. Las fuentes de los módulos pueden ser de varios tipos, incluyendo archivadores .tar o .zip, repositorios Git or Bzr, archivos de parches o comandos de shell que se corren.

El manifiesto del Diccionario de GNOME es corto, porque el único módulo que contiene es la aplicación misma:

{
  "app-id": "org.gnome.Dictionary",
  "runtime": "org.gnome.Platform",
  "runtime-version": "3.22",
  "sdk": "org.gnome.Sdk",
  "command": "gnome-dictionary",
  "finish-args": [
     "--socket=x11",
     "--share=network"
  ],
  "modules": [
    {
      "name": "gnome-dictionary",
      "sources": [
        {
          "type": "archive",
          "url": "https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz",
          "sha256": "efb36377d46eff9291d3b8fec37baab2355f9dc8bc7edb791b6a625574716121"
        }
      ]
    }
  ]
}

Como se puede ver, este manifiesto incluye la información básica sobre la aplicación antes de especificar un único archivo .tar a ser descargado y construido. Manifiestos más complejos incluyen una secuencia de módulos.

Limpieza

Luego de la construcción, flatpak-builder procede a la fase de limpieza. Esta puede ser usada para eliminar encabezados y documentación de desarrollo, entre otras cosas. Dos propiedades del archivo manifiesto son usadas para esto. Primero, se puede incluir una lista de patrones de nombres de archivos:

"cleanup": [ "/include", "/bin/foo-*", "*.a" ]

La segunda propiedad es una lista de comandos que se corren durante la fase de limpieza:

"cleanup-commands": [ "sed s/foo/bar/ /bin/app.sh" ]

Las propiedades de limpieza también pueden asignarse a nivel de módulos, en cuyo caso la comparación se hará sólo para los archivos que fueron creados para ese módulo en particular.

Renombrado de archivos

Los archivos que son exportados por un flatpak deben tener como prefijo el ID de la aplicación. Si los archivos fuentes de una aplicación no están nombrados usando esta convención, flatpak-builder permite renombrarlos como parte del proceso de construcción. Para renombrar iconos de la aplicación, archivos de escritorio y archivos AppData, use las propiedades rename-icon, rename-desktop-file y rename-appdata.

Separando los tantos

Por defecto, flatpak-builder separa la información de traducciones y debug en extensiones .Locale and .Debug. Estos puntos de extensión “estándar” son luego agregados al archivo de metadatos de la aplicación. Puede desactivar esto con las claves separate-locales y no-debuginfo, pero no debería haber razón alguna para hacerlo.

Cuando flatpak-builder exporta la construcción a un repositorio, automáticamente incluye las extensiones .Locale and .Debug. Si hace la exportación de forma manual, no olvide incluirlas.

Ejemplo

Para probar flatpak-builder usted mismo, cree un archivo llamado org.gnome.Dictionary.json y pegue el manifiesto JSON del Diccionario de arriba. Luego corra el siguiente comando:

$ flatpak-builder --repo=repo dictionary2 org.gnome.Dictionary.json

Esto hará lo siguiente:

  • Crear un nuevo directorio llamado dictionary2 (equivalente a usar flatpak build-init).

  • Descargar y verificar el código fuente de Dictionario.

  • Construir e instalar el código fuente, usando el SDK en lugar del sistema host.

  • Finalizar la construcción, asignando permisos (en este caso dando acceso a X y a la red).

  • Crear un nuevo repositorio llamado repo (si aún no existe) y exportar el resultado de la construcción dentro del mismo.

flatpak-builder también hará algunas otras cosas, como crear un runtime de debug separado (llamado org.gnome.Dictionary.Debug en este caso) y un runtime de traducción separado (llamado org.gnome.Dictionary.Locale).

Si ha completado el tutorial en Construcción de apps simples, puede actualizar la aplicación instalada con la nueva versión que acaba de construir y exportar con flatpak-builder:

$ flatpak --user update org.gnome.Dictionary

Para comprobar que la aplicación ha sido actualizada con éxito, puede comparar el commit sha256 de la aplicación instalada con el ID del commit que imprimió flatpak-builder:

$ flatpak info org.gnome.Dictionary
$ flatpak info org.gnome.Dictionary.Locale

Y finalmente, puede correr la nueva versión del app Diccionario:

$ flatpak run org.gnome.Dictionary