El autor seleccionó la Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.
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.
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.
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:
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:
OutputHello, 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.
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:
Outputsnapcraft 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:
Outputsnapcraft, version 3.9.8
Ahora que instaló Snapcraft, puede empezar a definir la configuración y los metadatos para su aplicación 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:
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
:
. . .
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:
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:
Outputant 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
:
. . .
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:
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:
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.
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
:
. . .
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:
. . .
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.
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:
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:
OutputSnapped 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.
Outputyour-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:
OutputHello, 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:
Outputsnap 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.
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:
OutputPreparing 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:
OutputTrack 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.
En este paso final, subió su paquete de Snap compilado a la Snap Store y lo puso a disponibilidad del público en general.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!