Tutorial

Cómo crear un paquete y publicar una aplicación de Snap en Ubuntu 18.04

ApplicationsDevelopmentUbuntu 18.04

El autor seleccionó la Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.

Introducción

Uno de los mayores desafíos en el desarrollo de aplicaciones es el paso final de distribuir el producto acabado a sus usuarios o clientes. Muchos de los métodos para la implementación de aplicaciones carecen de sencillez y seguridad o no incorporan estrategias para actualizar de forma automática una aplicación una vez que se instaló.

Snap es un formato moderno de empaquetamiento de aplicaciones que cuenta con potentes funciones de banco de pruebas y seguridad e incluye aislamiento del sistema de archivos, actualizaciones automáticas y gestión de dependencias integrada. Las aplicaciones Snap, conocidas como Snaps, pueden descargarse e instalarse usando un programa de línea de comandos, similar a apt o yum. Ubuntu viene con Snap previamente instalado, lo cual significa que las aplicaciones Snap tienen muchos adeptos.

A través de este tutorial, creará una aplicación Snap y la publicará en la Snap Store.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Un servidor de Ubuntu 18.04 configurado conforme a la Configuración inicial de servidores con Ubuntu 18.04, con un usuario sudo no root.

  • Una aplicación que quiere empaquetar y publicar en el formato Snap. Esta puede ser una aplicación compleja que creó, un proyecto común de código abierto, o un simple “¡Hello, world!”. Mundo!”. Si aún no tiene una aplicación, en el paso 1 de este tutorial se abordará la manera de crear un programa Hello World en Go.

  • Una cuenta en el panel de control de Snapcraft para desarrolladores.

Una vez que tenga todo esto listo, inicie sesión en su servidor como usuario no root.

Paso 1: Preparar su aplicación para agregarla a un paquete

Primero, preparará su aplicación para empaquetarla como aplicación Snap asegurándose de que todo lo necesario esté presente en un único directorio.

Comience creando un nuevo directorio para su Snap y posicionándose en él:

  • mkdir ~/your-snap
  • cd ~/your-snap

A continuación, si ya dispone de una aplicación, disponga una copia completa del código fuente de su aplicación en el directorio que acaba de crear. El proceso aquí variará considerablemente según la aplicación exacta que empaquete; sin embargo, en caso de que el código fuente se almacene en un repositorio de Git, puede aplicar git init en un repositorio del directorio y extraer todo el código pertinente.

Si aún no tiene una aplicación que desee empaquetar, puede crear un programa “Hello World” para usarlo como alternativa. Si desea más información sobre cómo escribir este programa con Go, consulte el tutorial Cómo escribir su primer programa en Go.

Puede hacer esto creando primero un nuevo archivo de Go y abriéndolo con su editor de texto preferido:

  • nano helloworld.go

A continuación, añada el siguiente código al archivo:

helloworld.go
package main
import "fmt"
func main() {
  fmt.Println("Hello, world!")
}

Guarde el archivo y ciérrelo.

Si no tiene Go instalado, puede instalarlo usando el siguiente comando:

  • sudo apt install golang-go

Una vez instalado Go, puede ejecutar su nuevo programa para comprobar que funcione:

  • go run helloworld.go

Verá el siguiente resultado:

Output
Hello, world!

Con esto, habrá preparado su aplicación para empaquetarla con el formato Snap. A continuación, instalará el software necesario para iniciar el proceso de empaquetamiento.

Paso 2: Instalar Snapcraft

En este paso, descargará e instalará Snapcraft; este es el nombre que recibe la herramienta oficial de creación de paquetes de aplicaciones Snap. Snapcraft está disponible en la Snap Store, que existe en Ubuntu por defecto. Esto significa que puede instalar Snapcraft desde la línea de comandos usando el comando snap.

El comando snap es equivalente al comando apt, pero puede usarlo para instalar software desde la Snap Store, en lugar de paquetes desde los repositorios Apt.

Para instalar Snapcraft, ejecute el siguiente comando:

  • sudo snap install snapcraft --classic

Se utiliza el argumento de comando --classic para que Snapcraft se instalae sin las funciones de banco de pruebas estrictas que normalmente se usan en las Snaps. Snapcraft requiere este argumento, ya que necesita más acceso privilegiado a su sistema para empaquetar las aplicaciones de forma fiable.

Una vez que instale Snapcraft, verá lo siguiente:

Output
snapcraft 3.9.8 from Canonical✓ installed

Finalmente, puede verificar la instalación de Snapcraft ejecutando lo siguiente:

  • snapcraft --version

Con esto se mostrará algo similar a lo siguiente:

Output
snapcraft, version 3.9.8

Ahora que instaló Snapcraft, puede empezar a definir la configuración y los metadatos para su aplicación Snap.

Paso 3: Definir la configuración y los metadatos para su Snap

En este paso, empezará a definir la configuración, la estructura y los metadatos para su aplicación Snap.

Comience verificando que aún esté trabajando en el directorio de su aplicación Snap:

  • cd ~/your-snap

A continuación, cree y edite el archivo snapcraft.yaml usando su editor de texto preferido:

  • nano snapcraft.yaml

Usará el archivo snapcraft.yaml para almacenar toda la configuración para su aplicación Snap, incluidos el nombre, la descripción y la versión, además de los ajustes relacionados con la gestión de dependencias y el banco de pruebas.

Comience definiendo el nombre, el resumen, la descripción y el número de la versión de su aplicación:

snapcraft.yaml
name: your-snap
summary: A summary of your application in 78 characters or less.
description: |
  A detailed description of your application.
  The description can have multiple lines.
version: '1.0'

El nombre de su Snap debe ser único si desea publicarla en la Snap Store; busque otras aplicaciones con el mismo nombre para asegurarse de que no exista aún.

A continuación, puede definir el comando o los comandos que desee asociar a su aplicación. Esto permitirá usar su Snap desde la línea de comandos Bash como un comando normal.

Agregue lo siguiente a su archivo snapcraft.yaml:

snapcraft.yaml
. . .
apps:
  your-snap-command:
    command: your-snap

your-snap-command es el nombre del comando que desea definir. Por ejemplo, es posible que desee usar el comando helloworld para ejecutar su programa Hello World.

Se utiliza el comando: your-snap para indicar a Snapcraft lo que debe hacer cuando se ejecuta el comando de la aplicación. En el caso del programa Hello World, usaría el valor helloworld para hacer referencia al archivo helloworld.go, lo que permitirá a Snapcraft ejecutar su programa de forma correcta.

Como resultado, se obtiene la siguiente configuración de ejemplo:

snapcraft.yaml
apps:
  helloworld:
    command: helloworld

Si el nombre del comando coincide exactamente con el nombre de la Snap, podrá ejecutarlo de manera directa desde la línea de comandos. Si el comando no coincide con el nombre de la Snap, se le añadirá automáticamente el nombre de la Snap. Por ejemplo, helloworld.command1.

Por último, puede definir las partes que formarán su aplicación Snap. Las aplicaciones Snap constan de varias partes, que son todos los componentes que forman su aplicación. En muchos casos solo hay una parte, que es la aplicación en sí misma.

Cada parte tiene un complemento asociado. Por ejemplo, para los componentes de su aplicación escritos en Ruby se utiliza el complemento ruby y para los componentes escritos en Go se utiliza el complemento go.

Puede usar el comando list-plugins de Snapcraft a fin de identificar los complementos correctos para su aplicación.

  • snapcraft list-plugins

Con esto, se mostrará algo similar a lo siguiente:

Output
ant catkin-tools conda dump gradle make nil python rust autotools cmake crystal go kbuild maven nodejs qmake scons catkin colcon dotnet godeps kernel meson plainbox-provider ruby waf

Los complementos más comunes son aquellos para los lenguajes de programación más habituales, como Go, Rust, Ruby o Python.

Una vez que haya identificado los complementos correctos para su aplicación, podrá comenzar a añadir la configuración parts a su archivo snapcraft.yaml:

snapcraft.yaml
. . .
parts:
  your-snap:
    plugin: plugin-name
    source: .

Se utiliza el parámetro de configuración source para especificar la ruta relativa del código fuente de su aplicación. Normalmente, este será el mismo directorio que el del archivo snapcraft.yaml, de modo que el valor source es un punto (.).

Nota: Si en el componente de su aplicación hay dependencias que se necesiten para su compilación o ejecución, puede especificarlas usando los atributos build-packages y stage-packages. Los nombres de dependencias especificados se obtendrán automáticamente a través del administrador de paquetes predeterminado de su sistema.

Por ejemplo:

snapcraft.yaml
parts:
  your-snap:
  plugin: plugin-name
  source: .
  build-packages:
  - gcc
  - make
  stage-packages:
  - libcurl4

Algunos complementos de Snapcraft tienen sus propias opciones específicas que pueden ser necesarias para su aplicación, de modo que vale la pena revisar las páginas pertinentes del manual para su complemento:

  • snapcraft help plugin-name

En el caso de las aplicaciones de Go, especificaría también el go-importpath. Para la configuración de Hello World, como resultado de esto se obtiene la siguiente configuración de ejemplo:

snapcraft.yaml
parts:
  helloworld:
    plugin: go
    source: .
    go-importpath: helloworld

Puede dejar su archivo snapcraft.yaml abierto para añadir ajustes en el siguiente paso.

Con esto, definió la configuración básica para su aplicación Snap. A continuación, configurará los aspectos de seguridad y banco de pruebas de su aplicación.

Paso 4: Proteger su aplicación Snap

Las aplicaciones Snap están diseñadas para ejecutarse en un entorno de banco de pruebas. Por ello, en este paso configurará el banco de pruebas para su Snap. Primero, deberá habilitar el banco de pruebas para su aplicación, conocido en Snapcraft como confinement.

Agregue lo siguiente a su archivo snapcraft.yaml:

snapcraft.yaml
. . .
confinement: strict

Esto permitirá la aplicación de un banco de pruebas para su aplicación, lo cual evitará que esta acceda a Internet, a otras Snaps en ejecución o al sistema host. Sin embargo, en la mayoría de los casos, no es necesario que las aplicaciones puedan comunicarse fuera de su banco de pruebas, como cuando necesitan acceder a Internet o realizar tareas de lectura y escritura en el sistema de archivos.

Estos permisos, conocidos en Snapcraft como interfaces, pueden concederse a su aplicación Snap mediante Plugs. Usando los Plugs, puede controlar de forma exhaustiva el banco de pruebas de su aplicación para darle el acceso que requiere y nada más (principio de privilegio menor).

Las interfaces exactas necesarias variarán dependiendo de su aplicación. Las siguientes son algunas de las interfaces más comunes:

  • audio-playback: permite la salida de audio y la reproducción de sonidos.
  • audio-record: permite la entrada y grabación de audio.
  • camera: permite el acceso a cámaras web conectadas.
  • home: permite el acceso a archivos no ocultos en su directorio de inicio.
  • network: permite el acceso a la red y a Internet.
  • network-bind: permite la vinculación a puertos para el funcionamiento como servicio de red.
  • system-files: permite el acceso a todo el sistema de archivos del equipo host.

La lista completa de interfaces disponibles está en la documentación de Snapcraft, en la sección Supported Interfaces (interfaces compatibles).

Una vez que haya identificado todas las interfaces requeridas para su aplicación, puede comenzar a asignarlas a los plugs en su archivo snapcraft-yaml.

La siguiente configuración de ejemplo permitirá que la aplicación acceda a la red y al área de inicio de los usuarios:

snapcraft.yaml
. . .
plugs:
  your-snap-home:
    interface: home
  your-snap-network:
    interface: network

Guarde y cierre su archivo.

El nombre del Plug debería ser descriptivo para ayudar a los usuarios a identificar su finalidad.

Habilitó el banco de pruebas para su Snap y configuró algunos Plugs para conceder acceso limitado a recursos del sistema. A continuación, terminará de compilar su aplicación Snap.

Paso 5: Compilar y probar su aplicación Snap

Ahora que escribió toda la configuración necesaria para su Snap, puede proceder con la compilación y prueba del paquete de Snap a nivel local.

Si ha seguido los pasos de este tutorial con un programa Hello World como aplicación, su archivo snapcraft.yaml completo ahora tendrá un aspecto similar al siguiente:

snapcraft.yaml
name: helloworld
summary: A simple Hello World program.
description: |
  A simple Hello World program written in Go.
  Packaged as a Snap application using Snapcraft.
version: '1.0'
confinement: strict

apps:
  helloworld:
    command: helloworld

parts:
  helloworld:
    plugin: go
    source: .
    go-importpath: helloworld

plugs:
  helloworld-home:
    interface: home
  helloworld-network:
    interface: network

Para compilar su aplicación Snap, ejecute el comando snapcraft desde el directorio de esta:

  • snapcraft

Snapcraft iniciará automáticamente una máquina virtual (VM) y comenzará a compilar su Snap. Una vez completado el proceso, Snapcraft se cerrará y verá algo similar a lo siguiente:

Output
Snapped your-snap_1.0_amd64.snap

Ahora puede instalar su Snap localmente para comprobar si funciona:

  • sudo snap install your-snap.snap --dangerous

El argumento del comando --dangerous es necesario ya que se instala un Snap local sin firma.

Output
your-snap 1.0 installed

Una vez completado el proceso de instalación, puede ejecutar su Snap usando su comando asociado. Por ejemplo:

  • helloworld

En el caso del programa Hello World de ejemplo, el resultado será el siguiente:

Output
Hello, world!

También puede ver la política de banco de pruebas para su Snap, a fin de garantizar que los permisos asignados se hayan concedido de forma adecuada:

  • snap connections your-snap

Esto dará como resultado una lista de Plugs e interfaces similar a la siguiente:

Output
snap connections your-snap Interface Plug Slot Notes home your-snap:your-snap-home :home - network your-snap:your-snap-network :network -

En este paso, compiló su Snap y lo instaló localmente para probar que funciona. A continuación, publicará su Snap en la Snap Store.

Paso 6: Publicar su Snap

Ahora que compiló y probó su aplicación Snap, es el momento de publicarla en la Snap Store.

Comience iniciando sesión en su cuenta de desarrollador de Snap usando la aplicación de línea de comandos de Snapcraft:

  • snapcraft login

Siga las instrucciones para introducir su dirección de correo electrónico y su contraseña.

A continuación, deberá registrar el nombre de la aplicación en la Snap Store:

  • snapcraft register your-snap

Una vez que registre el nombre de la Snap, podrá subir el paquete de Snap a la tienda:

  • snapcraft push your-snap.snap

Visualizará un resultado similar al siguiente:

Output
Preparing to push 'your-snap_1.0_amd64.snap'. Install the review-tools from the Snap Store for enhanced checks before uploading this snap. Pushing 'your-snap_1.0_amd64.snap' [===================================================================================================] 100% Processing...| Ready to release! Revision 1 of 'your-snap' created.

Cada vez que suba contenido a la Snap Store, el número de revisión aumentará, comenzando por uno. Esto es útil para ayudar a identificar las diferentes compilaciones de su Snap.

Finalmente, puede publicar su Snap:

  • snapcraft release your-snap revision-number channel

Si esta es la primera vez que sube contenido a la Snap Store, el número de revisión será 1. También puede optar por realizar su publicación en los canales stable, candidate, beta y edge, si tiene varias versiones de su aplicación en diferentes etapas de desarrollo.

Por ejemplo, con el siguiente comando se publicará la revisión 1 de la Snap Hello World en el canal stable:

  • snapcraft release helloworld 1 stable

Visualizará un resultado similar al siguiente:

Output
Track Arch Channel Version Revision latest amd64 stable 1.0 1 candidate ^ ^ beta ^ ^ edge ^ ^ The 'stable' channel is now open.

Ahora puede buscar su aplicación en la Snap Store e instalarla en cualquiera de sus dispositivos.

Tienda de Snapcraft con la aplicación HelloWord n los resultados de búsqueda

En este paso final, subió su paquete de Snap compilado a la Snap Store y lo puso a disponibilidad del público en general.

Conclusión

A través de este artículo, configuró y compiló una aplicación Snap, y luego la publicó a través de la Snap Store. Ahora tiene el conocimiento básico necesario para realizar el mantenimiento de su aplicación y crear nuevas aplicaciones.

Si desea explorar las Snaps en mayor profundidad, es posible que desee recorrer toda la Snap Store. Es posible que desee revisar la Referencia YAML de Snapcraft para comprender mejor el tema e identificar atributos adicionales para la configuración de su Snap.

Por último, si desea obtener más información sobre el desarrollo de Snaps, le gustará leer material sobre enlaces de Snap e implementarlos; estos permiten que los Snaps reaccionen de forma dinámica a los cambios del sistema, como las actualizaciones o los ajustes de las políticas de seguridad.

0 Comments

Creative Commons License