Cómo crear un paquete Snap paso a paso

Última actualización: 04/12/2025
Autor: Isaac
  • Snap permite empaquetar aplicaciones con todas sus dependencias en contenedores aislados, facilitando su uso en múltiples distribuciones Linux.
  • Snapcraft es la herramienta oficial para describir, construir y publicar paquetes Snap mediante el archivo de configuración snapcraft.yaml.
  • El confinamiento strict y las interfaces con plugs controlan la seguridad y los permisos de cada Snap, equilibrando aislamiento y funcionalidad.
  • Publicar en la Snap Store simplifica la distribución y actualización automática de aplicaciones como Nextcloud o proyectos en Electron.

Guía paso a paso para crear un paquete Snap

Si desarrollas aplicaciones en Linux, tarde o temprano te toparás con el mismo quebradero de cabeza: cómo empaquetar y distribuir tu software de forma sencilla, segura y actualizable sin pelearte con las dependencias de cada distribución. Ahí es donde entra Snap, el formato de paquetes de Canonical que se ha ido colando en cada vez más entornos de escritorio y servidor.

En esta guía vas a ver cómo crear un paquete Snap paso a paso, probarlo en tu equipo e incluso publicarlo en la Snap Store, pero también qué es exactamente Snap, qué papel juega snapd, cuáles son sus ventajas e inconvenientes y en qué casos conviene usarlo (por ejemplo, con aplicaciones como Nextcloud o proyectos en Electron). El objetivo es que termines el artículo pudiendo empaquetar tu propia app con seguridad y sabiendo si este formato encaja en tu caso.

Qué es Snap y por qué se ha puesto tan de moda

Snap es un formato de paquete universal para Linux, creado por Canonical (la empresa detrás de Ubuntu) con una idea muy clara: que el mismo paquete funcione igual en distintas distribuciones sin que tengas que adaptar nada al sistema base. Para conseguirlo, cada Snap incluye la aplicación y casi todas sus dependencias dentro de un contenedor autocontenido.

En lugar de apoyarse en las bibliotecas del sistema como hacen los paquetes tradicionales (deb, rpm, etc.), los Snaps llevan su “mochila” con todo lo necesario. Esto reduce de golpe muchos problemas típicos: versiones de librerías incompatibles, dependencias rotas o conflictos con otros paquetes instalados.

Todo este tinglado lo gestiona snapd, el demonio encargado de instalar, actualizar y ejecutar los Snaps. snapd corre en segundo plano, controla los permisos, aplica el confinamiento de seguridad (sandbox), programa las actualizaciones automáticas y mantiene tu sistema al día sin que apenas tengas que hacer nada.

Gracias a este enfoque, un mismo paquete Snap puede instalarse sin cambios en Ubuntu, Debian, Fedora, Arch Linux, Linux Mint y muchas otras distros que soporten snapd. Desde el punto de vista del desarrollador, es una manera cómoda de llegar a muchos más usuarios con un solo formato de distribución.

Ventajas y desventajas de Snap frente a otros formatos

Antes de meternos en harina con la parte práctica, compensa tener claro qué te ofrece Snap y qué inconvenientes arrastra en comparación con el empaquetado tradicional o con alternativas como Flatpak o AppImage.

La gran baza de Snap es su independencia de la distribución. Un paquete bien hecho se ejecutará igual en distintas versiones de Ubuntu, Debian o Fedora sin que tengas que mantener ramas específicas. Esto simplifica la vida tanto a desarrolladores como a usuarios, que dejan de depender del repositorio de cada distro para tener software actualizado.

Otra ventaja clave es que cada Snap se ejecuta en un entorno aislado (sandbox). Ese aislamiento reduce el impacto de un fallo de seguridad, evita que la aplicación toque ficheros del sistema que no debe y limita los conflictos con otras apps. Mediante interfaces e “plugs” puedes ir dándole acceso de forma controlada a red, audio, cámara, directorio home, etc., siguiendo el principio de mínimo privilegio.

Además, snapd se encarga de las actualizaciones automáticas; las aplicaciones Snap se refrescan en segundo plano y, si algo sale mal, puedes hacer rollback a una revisión anterior del paquete con un simple comando. Esto aporta mucha tranquilidad en entornos de producción o en equipos donde no quieres andar pendiente de cada actualización.

La parte menos bonita es que, al incluir casi todas las dependencias, los Snaps suelen ocupar más espacio en disco que sus equivalentes en formatos más clásicos. También es habitual que algunas aplicaciones empaquetadas como Snap tarden algo más en arrancar, sobre todo las de escritorio pesadas, debido a la capa de aislamiento y al montaje del entorno.

Otro punto de fricción para parte de la comunidad es que la Snap Store está centralizada y controlada por Canonical. Aunque el formato es abierto, el repositorio principal lo gestiona una sola empresa, lo que choca con la filosofía más distribuida de Linux y contrasta con el ecosistema de Flatpak (Flathub) o con el enfoque sin tienda de AppImage.

  Cómo hacer un backup completo en Windows Server: guía detallada paso a paso

Instalar y activar Snap en las principales distribuciones Linux

Para poder crear y usar paquetes Snap necesitas tener snapd correctamente instalado y funcionando en tu sistema. El proceso varía un poco según la distribución, pero en todas es bastante sencillo.

En Ubuntu y derivadas modernas (desde 16.04) snapd viene instalado de serie. Puedes comprobarlo con:

snap version

Si por lo que sea no está, puedes instalarlo con APT ejecutando una actualización y luego la instalación de snapd:

sudo apt update
sudo apt install snapd

En Debian o Linux Mint puede que encuentres un archivo de preferencias que bloquea los paquetes Snap. En ese caso, el primer paso es eliminar la regla que los prohíbe:

sudo rm /etc/apt/preferences.d/nosnap.pref

Después actualizas e instalas snapd de la misma forma:

sudo apt update
sudo apt install snapd

En el mundo de Fedora, el soporte de Snap no está tan integrado de fábrica, pero puedes habilitarlo sin mucho drama. Primero instalas snapd, normalmente desde los repositorios estándar o desde EPEL según la edición, y luego habilitas el socket para que el servicio arranque:

sudo dnf install snapd
sudo systemctl enable --now snapd.socket

Además, para activar la compatibilidad clásica de rutas, se suele crear un enlace simbólico /snap apuntando al directorio usado por snapd:

sudo ln -s /var/lib/snapd/snap /snap

En Arch Linux, snapd está disponible en los repositorios oficiales. Lo instalas con pacman y, de nuevo, activas el servicio a través del socket:

sudo pacman -S snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

Una vez que tengas snapd operativo, ya puedes instalar, listar, actualizar y eliminar Snaps con los comandos básicos: snap install, snap list, snap refresh, snap remove y snap find para buscar aplicaciones disponibles en la Snap Store. (ver cómo enumerar los paquetes instalados en Ubuntu)

Cómo empaquetar una aplicación en Snap paso a paso

Vamos a entrar en la parte que más suele interesar: empaquetar tu propia aplicación en formato Snap. El flujo general es preparar tu app, instalar Snapcraft, definir un archivo snapcraft.yaml, configurar el confinamiento y, por último, construir y probar el paquete.

Para seguir este proceso es muy cómodo contar con un servidor o equipo con Ubuntu 18.04 o superior (o distro compatible), con un usuario con permisos sudo y, si quieres publicar tu Snap, con una cuenta en el panel de desarrolladores de Snapcraft. Si todavía no tienes una app, puedes usar como ejemplo un sencillo “Hello World” en Go.

Lo primero es crear un directorio de trabajo específico para tu Snap y situarte dentro:

mkdir ~/tu-snap
cd ~/tu-snap

Si ya tienes código fuente de tu proyecto, copia todo dentro de ese directorio. Si lo tienes en Git, puedes inicializar un repositorio y clonar o traer los ficheros necesarios ahí. La idea es que todo lo que necesita tu aplicación quede reunido en una única carpeta, porque será el punto de partida del empaquetado.

Si quieres un ejemplo mínimo, puedes crear un pequeño programa en Go con un archivo llamado helloworld.go que imprima un mensaje por pantalla. Instala Go con APT si no lo tienes y luego ejecuta go run helloworld.go para asegurarte de que la aplicación base funciona correctamente antes de convertirla en Snap.

Con tu app lista en ese directorio, el siguiente paso será instalar la herramienta de construcción Snapcraft, que es la que se encarga de leer la configuración, resolver dependencias y generar el paquete final.

Instalar y entender Snapcraft, la herramienta para crear Snaps

Snapcraft es el kit oficial de Canonical para que los desarrolladores puedan definir, construir y publicar paquetes Snap sin tener que reinventar la rueda. Se instala a su vez como un Snap y se ejecuta en modo clásico para disponer de los permisos que necesita durante la compilación.

Para instalarlo en un sistema con snapd operativo, basta con lanzar:

sudo snap install snapcraft --classic

La opción –classic desactiva el confinamiento estricto para Snapcraft, algo necesario porque durante el proceso de empaquetado tiene que acceder al sistema, lanzar compilaciones, gestionar dependencias y trabajar con ficheros fuera de su propia jaula.

Una vez instalado verás un mensaje indicando la versión que se ha añadido al sistema, algo parecido a “snapcraft X.X.X from Canonical installed”. Puedes confirmar que todo está correcto ejecutando:

snapcraft --version

Desde este momento, el comando snapcraft está disponible en tu shell y podrás usarlo dentro del directorio de tu proyecto para construir tu primer paquete Snap. Pero antes hay que definir su configuración mediante un archivo YAML específico.

  The way to Delete Electronic mail Account on Mac

Definir nombre, metadatos, apps y partes en snapcraft.yaml

El corazón de cualquier Snap es el archivo snapcraft.yaml, donde describes qué hace la aplicación, cómo se construye, qué comando se expone al usuario, qué plugins se usan, qué partes la componen y qué permisos necesita.

Empieza asegurándote de que sigues en el directorio raíz de tu proyecto (el que creaste como carpeta del Snap) y crea el archivo de configuración con tu editor favorito:

cd ~/tu-snap
nano snapcraft.yaml

En primer lugar, define los metadatos básicos: nombre, resumen, descripción y versión. Un ejemplo podría ser:

name: helloworld
summary: Pequeña aplicación de ejemplo empaquetada como Snap.
description: |
Programa Hello World escrito en Go y distribuido como paquete Snap
usando la herramienta Snapcraft para ilustrar el proceso paso a paso.
version: '1.0'

El nombre debe ser único si vas a publicar en la Snap Store, así que conviene comprobar que no está ya cogido. El resumen tiene un límite de caracteres y la descripción puede ser multilinea usando el símbolo | como en el ejemplo.

Después toca declarar las “apps” del Snap, es decir, los comandos que el usuario podrá ejecutar desde la terminal para lanzar tu aplicación. Dentro del archivo, añade una sección apps: y define al menos una entrada:

apps:
helloworld:
command: helloworld

Aquí, “helloworld” es tanto el nombre lógico de la app como el comando que se ejecutará. Ese comando tiene que corresponderse con el binario o script que genera tu proceso de compilación; en el caso del ejemplo de Go, será el ejecutable resultante.

Si el nombre del comando coincide exactamente con el nombre del Snap, podrás ejecutarlo directamente tras la instalación. Si no coincide, Snap añadirá automáticamente un prefijo con el nombre del paquete, algo a tener en cuenta a la hora de elegir la nomenclatura.

Luego tienes que definir las “parts”, que son los bloques que componen tu paquete: tu aplicación principal, recursos auxiliares, dependencias adicionales, etc. Cada parte suele incluir un plugin específico según el lenguaje o la tecnología que utilices. Por ejemplo, hay plugins para Go, Python, Ruby, Rust, Node.js, Java, etc.

Para ver la lista de plugins soportados por tu versión de Snapcraft puedes usar:

snapcraft list-plugins

En el caso de un ejemplo en Go, una configuración mínima de partes podría ser:

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

La opción source: . indica que el código fuente está en el mismo directorio donde resides el archivo snapcraft.yaml, y el parámetro go-importpath define la ruta de importación para el plugin de Go. Otros plugins tienen sus propias opciones especiales, que puedes consultar con snapcraft help nombre-del-plugin.

Por ahora puedes dejar abierto el archivo porque aún falta añadir la configuración relacionada con el confinamiento de seguridad y los permisos de acceso que va a necesitar tu aplicación.

Confinamiento, interfaces y plugs: controlando los permisos del Snap

Una de las señas de identidad de Snap es que las aplicaciones se ejecutan dentro de un entorno de pruebas o sandbox que limita lo que pueden hacer. Esto se configura en el archivo snapcraft.yaml mediante la clave confinement y, cuando hace falta, mediante interfaces y plugs.

Para empezar, añade una línea de confinamiento al archivo:

confinement: strict

El modo strict es el nivel de seguridad más alto y el recomendado para la mayoría de los casos cuando vas a publicar el paquete de cara al público. Bajo este confinamiento, tu app no puede acceder libremente a la red, al sistema de ficheros del host ni a otros recursos, salvo que se lo permitas mediante interfaces concretas.

Las interfaces son como “conectores de permisos” que permiten al Snap acceder a un recurso concreto: salida y entrada de audio, cámara, red, directorio home, archivos del sistema, etc. Algunas de las más usadas son:

  • audio-playback: para reproducir sonido.
  • audio-record: para capturar audio del micrófono.
  • camera: para usar cámaras web conectadas.
  • home: para leer y escribir en archivos no ocultos del directorio personal.
  • network: para acceso a Internet y la red local.
  • network-bind: para que la app actúe como servicio de red y escuche en puertos.
  • system-files: para permisos amplios sobre el sistema de archivos del host.

Para asociar estas interfaces a tu Snap, defines plugs con nombres descriptivos en la sección correspondiente del YAML. Un ejemplo sencillo que da acceso a la red y a la carpeta home sería:

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

El nombre del plug (por ejemplo, helloworld-home) es el que verán los usuarios al revisar conexiones, así que conviene que sea claro. Más tarde, cuando el Snap esté instalado, podrás ver cómo han quedado estos enlaces con el comando snap connections nombre-del-snap, que mostrará qué interfaz se ha unido a cada plug.

  Methods to Get Image in Image on Mac

Con esto, tu archivo snapcraft.yaml ya contiene nombre, metadatos, apps, partes, confinamiento y plugs básicos, es decir, la estructura mínima para poder construir el paquete por primera vez.

Un ejemplo completo para el programa Hello World podría quedar así:

name: helloworld
summary: Pequeño programa Hello World en Go empaquetado como Snap.
description: |
Aplicación de ejemplo que imprime "Hello, world!" en la terminal.
Empaquetada usando Snapcraft para mostrar el flujo de trabajo básico.
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

Construir, instalar localmente y comprobar tu paquete Snap

Con la configuración lista, ha llegado el momento de compilar el Snap y probarlo en tu propio sistema. Asegúrate de que estás en el directorio raíz del proyecto y ejecuta:

snapcraft

Snapcraft iniciará una máquina virtual o entorno de construcción limpio (según la versión y backend que uses), descargará las dependencias necesarias y generará el paquete. Si todo va bien, al final verás un mensaje del estilo:

Snapped helloworld_1.0_amd64.snap

Ese archivo helloworld_1.0_amd64.snap es el paquete resultante, listo para instalarse en sistemas compatibles. Para probarlo localmente, usa el siguiente comando (desde el mismo directorio o indicando la ruta):

sudo snap install helloworld_1.0_amd64.snap --dangerous

La opción –dangerous informa a snapd de que es un Snap local sin firma oficial, por lo que la instalación se hace bajo tu responsabilidad. Cuando termine verás un mensaje del tipo “helloworld 1.0 installed”.

A partir de ahí, puedes ejecutar el comando que definiste en la sección apps, en este caso:

helloworld

Si tu programa está bien construido, debería mostrar el texto “Hello, world!” en la salida estándar, comprobando que el Snap funciona correctamente. Para revisar los permisos activos y las conexiones de interfaces, puedes usar:

snap connections helloworld

La salida listará cada interfaz, su plug asociado y la “slot” correspondiente, algo muy útil para ver de un vistazo qué acceso tiene tu aplicación a la red, al sistema de archivos o a otros recursos.

Publicar tu Snap en la Snap Store y gestionarlo por canales

Una vez que tengas tu aplicación bien empaquetada y probada, lo lógico es ponerla a disposición del resto del mundo a través de la Snap Store. Para ello necesitas una cuenta de desarrollador de Snapcraft y usar el propio comando snapcraft para autenticarte y subir el archivo.

Empieza iniciando sesión en tu cuenta de desarrollador desde la terminal:

snapcraft login

Introduce el correo electrónico y la contraseña asociados a tu cuenta. Una vez autenticado, el siguiente paso es registrar el nombre de tu Snap en la tienda para que quede vinculado a ti:

snapcraft register helloworld

Si el nombre está disponible, la operación se completará y ya podrás empezar a subir revisiones de tu paquete a la Snap Store usando el comando snapcraft push:

snapcraft push helloworld_1.0_amd64.snap

Tras el proceso de subida y revisión automática, verás un mensaje parecido a:

Revision 1 of 'helloworld' created.

Cada vez que publiques una nueva compilación del mismo paquete, el número de revisión aumentará, algo muy práctico para identificar builds concretas y realizar rollbacks si es necesario. El último paso para que el Snap sea instalable por cualquiera es liberar esa revisión en un canal:

snapcraft release helloworld 1 stable

Aquí estás indicando que se libere la revisión 1 en el canal “stable”. También tienes canales candidate, beta y edge para distribuir versiones de prueba, candidatas a estable o builds de desarrollo sin estabilizar (ver cómo instalar dos versiones del mismo paquete). Al finalizar, verás una tabla de canales y revisiones indicando qué versión está disponible en cada uno.

Desde ese momento, cualquier usuario con snapd podrá instalar tu aplicación con un “sudo snap install helloworld” y recibir actualizaciones automáticas cuando publiques nuevas revisiones en el canal correspondiente.

Cómo instalar software con apt y snap
Artículo relacionado:
Cómo instalar software con apt y snap en Linux: guía completa