Métodos de pago Abuse

Cómo crear un paquete Snap Ubuntu 16

11.06.2021, 19:26

Snap es una tecnología desarrollada por Canonical para facilitar la instalación de software en la distribución Ubuntu. Se trata de un desarrollo relativamente reciente. El desarrollo de Snap se llevó a cabo durante varios años, pero sólo con el lanzamiento de Ubuntu 16.04 apareció en un estado en el que está listo para ser utilizado por las masas.

La principal ventaja de Snap es la posibilidad de instalar programas sin dependencias. Todas las bibliotecas necesarias ya están en el paquete con el programa y no se requiere nada del sistema para ejecutarlo. A la hora de actualizar, el usuario tiene que actualizar un paquete de Snap sin hacer cambios en el sistema, y en caso de fallos y errores puede hacer retroceder el paquete a la versión anterior. En la web se pueden encontrar a menudo discusiones entre usuarios sobre si la tecnología snap es realmente buena o si debería abandonarse en favor de los paquetes deb. Pero el tiempo y las pruebas lo dirán. A continuación en este artículo veremos el proceso de creación de paquetes snap. Su creación es un poco más sencilla que la de los mismos paquetes deb.

Creando paquetes snap en Ubuntu 16.04

Para crear paquetes snap usaremos una herramienta especial llamada Snapcraft. Esta es la herramienta oficial para crear paquetes snap, que permite al desarrollador empaquetar programas para construir los archivos necesarios en todo el sistema. Snapcraft permite no sólo copiar archivos, sino también descargar el código fuente y construir el programa.

A continuación, vamos a ver cómo crear paquetes snap utilizando la aplicación Samplenote como ejemplo.

En primer lugar, instala Snapcraft. Para obtener la última versión añade un PPA a nuestro sistema:

$ sudo add-apt-repository ppa:snappy-dev/tools

Ahora actualiza la lista de paquetes e instala el programa:

$ sudo apt-get update
$ sudo apt-get install snapcraft

Una vez finalizada la instalación de Snapcraft, podemos pasar a obtener el código fuente del programa. Primero, descarga las fuentes de GitHub y descomprímelas:

$ wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz

Como el programa no necesita ser compilado nuestra tarea es un poco más sencilla. Ve a la carpeta con el programa e inicializa allí el entorno de compilación de Snapcraft:

$ cd Simplenote-linux-x64
$ snapcraft init

Tras ejecutar el último comando, aparecerá en la carpeta el archivo snapcraft.yml. Editando el archivo, vamos a configurar el proceso de creación de nuestro paquete snap. Necesitaremos un archivo con el siguiente contenido:

name: simplenote
version: 1.0.1
summary: The simplest way to keep notes.
description: The simplest way to keep notes. Light, clean, and free.
apps:
simplenote:
command: usr/bin/wrapper
plugs:
- unity7
- opengl
- network
parts:
simplenote:
plugin: copy
stage-packages:
- libnss3
- fontconfig-config
- gnome-themes-standard
files:
Simplenote: Simplenote
wrapper: usr/bin/wrapper
icudtl.dat: icudtl.dat
snapshot_blob.bin: snapshot_blob.bin
natives_blob.bin: natives_blob.bin
resources*: resources
libnode.so: usr/lib/x86_64-linux-gnu/libnode.so
libffmpeg.so: usr/lib/x86_64-linux-gnu/libffmpeg.so

Las cuatro primeras líneas son información sobre el propio paquete, el nombre del programa, la versión y una descripción corta y completa.

Command - este es el comando para iniciar el programa, además usaremos el script warpper, porque necesitamos especificar variables de entorno adicionales.

Plugs - son las interfaces que puede utilizar el programa. La cuestión es que los programas snap trabajan en un entorno aislado, desde donde no pueden acceder al hardware ni a los datos personales. Para que nuestro programa funcione correctamente necesita dar acceso a las interfaces opengl, unity7 y red.

Puedes ver las interfaces disponibles y los programas que las utilizan ejecutando el comando:

$ snap interfaces

En la sección parts tienes que especificar los archivos del programa. Específicamente, lo que snapcraft necesita hacer al crear un paquete. Como no necesitamos compilar nada, usamos el plugin de copia para copiar los ficheros. Los ficheros que necesitan ser copiados están listados en la sección ficheros. No sólo hay archivos ejecutables, sino también todas las librerías necesarias, por lo que el programa obtendrá todos los componentes que necesita.

El formato de la entrada es el siguiente:

system_file: snap_package_file_path

Hay una entrada no estándar:

resources*: resources

El carácter comodín * permite copiar todo el directorio. Para evitar copiar todos los ficheros del sistema, existe una opción en la sección site-packages para indicar al programa qué paquetes deben instalarse en el paquete snap, en nuestro caso son libnss3, fontconfig-config-config y gnome-themes-standard.

Para ver qué librerías utiliza el programa, puedes utilizar el comando:

ldd Simplenote | grep Simplenote
libnode.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libnode.so (0x00007f05fb477000)
libffmpeg.so => /home/sergiy/test/Simplenote/Simplenote-linux-x64/./libffmpeg.so (0x00007f05f61ec000)

Lo importante es que estas librerías se envían con el programa, por lo que debemos especificarlas en el fichero de configuración snapcraft.yaml. El resto de librerías están disponibles en el sistema y serán detectadas por snapcraft automáticamente.

A continuación, vamos a crear el archivo wrapper:

!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"

Esto es simple aquí - un script Bash. Establece las rutas para las fuentes, y le dice al programa dónde buscar las librerías para que libnote. so y libffmpeg.so sean encontradas con éxito. Y la última línea inicia simplenote.

Lo siguiente que queda por hacer es que este archivo sea ejecutable:

$ chmod +x wrapper

Para empezar a construir el paquete, ejecuta:

$ snapcraft

La compilación puede tardar algún tiempo, y una vez completada puedes instalar el paquete:

$ sudo snap install simplenote_1.0.1_amd64.snap

Puedes utilizar el comando habitual para ejecutar el programa:

$ simplenote

Ahora el programa está instalado. Puedes utilizar exactamente el mismo método de creación de paquetes snap para empaquetar tus aplicaciones.