Noticias

La guía del desarrollador de Snap para migrar a nuevas bases

Hace unas semanas, publicamos un artículo sobre Ubuntu 16.04 en Mantenimiento de seguridad extendido (ESM) y cómo este cambio afectará a los editores de Snap. Hemos hablado sobre las diferentes opciones disponibles para desarrolladores y editores que aún pueden encomendar en las bases más antiguas en su proceso de compilación: tokens gratuitos de Ubuntu Advantage (UA), servicio de compilación de Launchpad y Snapcraft, soporte de Snapcraft para bases de ESM y otros.

Sin confiscación, para la mayoría de los editores, la migración de la pulvínulo ESM (Core) a Core18 y Core20 ofrece el decano porción de flexibilidad. Esto les permite tomar instantáneas con las últimas versiones de Snapcraft, disfrutar de las mejoras actuales y futuras en el ecosistema y ofrecer a sus usuarios la mejor experiencia posible. Esta orientación de hoy describe algunos consejos prácticos generales para portar a bases más nuevas.

Cuando crea un complemento, proporciona una registro de los paquetes opcionales que se requieren en el momento de la creación y en el tiempo de ejecución. Estos se definen en las secciones build-packages y stage-packages del archivo snapcraft.yaml.

Sin especificar una pulvínulo o núcleo, los paquetes de Snapcraft disponibles en el archivo Ubuntu 16.04 LTS lo usan en los pasos de compilación y etapa del ciclo de vida de Snap. Si está utilizando la pulvínulo Core18, Snapcraft usa paquetes del archivo Ubuntu 18.04 LTS y, con la pulvínulo Core20, paquetes del archivo Ubuntu 20.04 LTS. Si confía en un nombre y una lectura de paquete en particular, puede cambiar entre estas diferentes versiones.

Con el complemento Irssi, por ejemplo, un cambio en los paquetes de tablas se vería así:

-     - libperl5.22
+     - libperl5.26

En este ejemplo, el nombre del paquete de la biblioteca Perl se ha cambiado adecuado a un cambio de lectura. La forma más liviana de detectar el «delta» en los paquetes y sus versiones es crear un nuevo complemento en el sistema pulvínulo de destino (18/04 o 20/04), investigar errores de tiempo de ejecución y renovar cualquier paquete no resuelto.

Una diferencia importante en el traslado a bases más nuevas es que la palabra esencia cimentación ahora define una cantidad de ambas y Ejecuta arquitecturas.

architectures:
  - build-on: amd64
    run-on: amd64

Además es importante estar atento al software de 32 bits. Las instantáneas que producen compilaciones i386 pueden ser compatibles durante la vida de Ubuntu 16.04 LTS o Ubuntu 18.04 LTS si las instantáneas Core o Core18 se utilizan como pulvínulo. Sin confiscación, Almohadilla: core20 no es compatible con la cimentación i386. Las siguientes arquitecturas son compatibles con core20: amd64, arm64, armhf, ppc64el y s390x.

Las variables de entorno se utilizan a menudo en instantáneas para certificar que los binarios de tiempo de ejecución puedan encontrar módulos cargables o bibliotecas contenidas en la instantánea. En algunos casos, las variables de entorno pueden contener rutas codificadas que contienen números de lectura específicos y deben cambiarse. Nuevamente, si miramos la instantánea de Irssi:

   environment:
-        PERL5LIB:  "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl-base/:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl5/5.22/:$SNAP/usr/share/perl5/:$SNAP/usr/share/perl/5.22.1/:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl/5.22/:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl/5.22.1/"
+        PERL5LIB:  "$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl-base/:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl5/5.26/:$SNAP/usr/share/perl5/:$SNAP/usr/share/perl/5.26.1/:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl/5.26/:$SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/perl/5.26.1/"

La funcionalidad de la parte remota está desactualizada. En el pasado, Snap podía usar partes remotas para compartir la configuración en múltiples sans y someter la complejidad restringido de snapcraft.yaml. Las partes remotas se definen en ubicaciones diferentes a las del directorio restringido y se incluyen en el momento de la creación.

En el futuro, las partes remotas deben insertarse directamente en el archivo snapcraft.yaml o referenciarse desde su repositorio de origen. Por ejemplo, una parte eliminada insertada en el complemento Mr Rescue.

parts:
  mrrescue:
-    after:
-      - desktop-glib-only
+   desktop-glib-only:
+     build-packages:
+       - libglib2.0-dev
+      plugin: make
+      source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
+      source-subdir: glib-only
+     stage-packages:
+       - libglib2.0-bin

La migración remota de piezas se integra adecuadamente con Snapcraft Extensions, un nuevo concepto introducido en el ciclo de vida de la compilación de Snap. Las extensiones de Snapcraft permiten a los desarrolladores simplificar sus instantáneas mediante el uso de paquetes populares de código que ocultan y abstraen gran parte del contenido que se usa normalmente en los archivos snapcraft.yaml. Esto permite a los desarrolladores evitar tareas repetitivas, usar una plantilla popular y consistente para las compilaciones de sus aplicaciones y servirse al mayor las prácticas conocidas, lo que finalmente ahorra tiempo y esfuerzo y puede dar como resultado Snaps de beocio tamaño y con tiempos de inicio mejorados.

Al portar a núcleos (y extensiones) más nuevos, los desarrolladores deben prestar atención a la sintaxis y comprobar de que están usando la lectura correcta de la extensión para su compilación. Primero, veamos un Snap que no usó una extensión.

parts:
  xonotic:
-    after:
-      - desktop-glib-only
apps:
  xonotic:
-    command: desktop-launch $SNAP/Xonotic/xonotic-linux-sdl.sh
+    extensions: [gnome-3-34]
+    command: Xonotic/xonotic-linux-sdl.sh

En el ejemplo susodicho, eliminamos la narración a una parte remota que solo está acondicionado para escritorio glib y, en su circunstancia, declaramos el uso de la extensión gnome-3-34, que reemplaza la funcionalidad de la parte remota (y proporciona beneficios adicionales).

Nombrar extensiones de Snapcraft

Además es importante seguir la convención de nomenclatura ya que no todas las extensiones (y sus versiones específicas) funcionarán en todas las bases. Por ejemplo, si desea utilizar la extensión GNOME en core18, deberá utilizar la extensión gnome-3-34, mientras que en core20 deberá utilizar gnome-3-38. Para obtener más información, consulte la página Extensiones compatibles.

Como ejemplo, Dwarf Fortress usa la extensión GNOME solo para Core-20:

parts:
  tarball:
-     after: [desktop-gtk3]
apps:
  dwarffortress:
-    command: desktop-launch $SNAP/wrapper.sh
+    extensions: [gnome-3-38]
+    command: wrapper.sh

Los nombres de las interfaces han cambiado para las aplicaciones que reproducen o graban audio. Hasta ahora, la interfaz Pulseaudio se ha utilizado tanto para la reproducción como para la disco de audio. Esto ha sido reemplazado por reproducción de audio o disco de audio:

apps:
  xonotic:
    Plugs:
-      pulseaudio
+      audio-playback     

Los editores de Snap deben tener en cuenta que, por razones de privacidad y seguridad, la interfaz de disco de audio no se conecta automáticamente. Para una funcionalidad perfecta (necesaria) de un Snap basado en grabaciones de audio, los editores deben difundir una solicitud en el foro de Snapcraft.

Varios complementos de Snapcraft diferentes han cambiado, y los Snaps basados ​​en ellos requerirán algunos cambios. En común, los cambios en los complementos se pueden realizar usando la ayuda de snapcraft -base ser consultado:

$ snapcraft help npm --base core20
Displaying help for the 'npm' plugin for 'core20'.
[...]

Además puede crear complementos para una pulvínulo específica utilizando Complementos de registro de Snapcraft: pulvínulo registro, p. ej. B .:

$ snapcraft list-plugins --base core20
Displaying plugins available for 'core20'
autotools  catkin  catkin-tools  cmake  colcon  dump  go  make
meson nil  npm  python  qmake  rust

Si no está seguro de qué hacer, intente crear su complemento con solo core18 / 20 concreto. Snapcraft proporciona errores significativos para ayudarlo a realizar los cambios necesarios en su archivo snapcraft.yaml.

Recomendar Vena Core20 Observaciones
Nudo / npm nodejs Sobre el nivel del mar
Nudo / npm Motor de nodo npm-node-version Especifique la lectura de npm empinado que se usará en el momento de la compilación
Herramientas automáticas Banderas de configuración Autotools-Configure-Parameter
caminar go-importpath go-channel

Ejemplo de cambios en la sintaxis del complemento Npm:

parts:
  wethr:
-    plugin: nodejs
+    plugin: npm
parts:
  wethr:
-    node-engine: "10.14.1"
+    npm-node-version: "10.14.1"

Ejemplo de cambios en la sintaxis del complemento Autotools:

parts:
  libconfuse:
    plugin: autotools
-    configflags: ['--prefix=/usr', '--disable-examples', '--disable-static']
+    autotools-configure-parameters: ['--prefix=/usr', '--disable-examples', '--disable-static']

Ejemplo de cambios en la sintaxis del complemento:

parts:
  slack-term:
    plugin: go
-      go-importpath: github.com/erroneousboat/slack-term
+      go-channel: latest/stable

Además hay algunos cambios en la definición de la aplicación. Snapcraft ahora requiere que se especifiquen rutas explícitas para los archivos binarios enumerados en la sección de Aplicaciones:

apps:
  wethr:
-    command: wethr
+    command: bin/wethr

En circunstancia de especificar un comando seguido de una larga registro de archivos ejecutables separados por espacios, ahora se pueden enumerar utilizando la opción de condena de comandos. Por ejemplo, en el ejemplo de complemento Atom:

apps:
  atom:
-    command: bin/launcher $SNAP/usr/share/atom/atom
+    command-chain:
+      - bin/launcher
+    command: usr/share/atom/atom

El nivel superior Script de lectura La opción fue rechazada a honra de adoptar información. Esto requiere que proporciones adopt-info con una narración a la parte donde se pueden configurar los datos de la lectura (y algunos otros metadatos). Interiormente de la sección de piezas puede utilizar snapcraftctl set lectura para precisar el número de lectura del plan Snapcraft que se utilizará en el momento de la compilación.

-version-script: git -C parts/cointop/build rev-parse --short HEAD
+adopt-info: cointop
parts:
  cointop:
+    override-pull: |
+      snapcraftctl pull
+      snapcraftctl set-version $(git rev-parse --short HEAD)     

La migración a bases más nuevas incluye algunos cambios de sintaxis, la inclusión de diferentes versiones de paquetes escalonados y poco de enfoque en las variables de entorno y las declaraciones de interfaz. Este artículo solo cubre un subconjunto de posibles escenarios y casos de uso que puede encontrar. Sin confiscación, esperamos que le dé un empujón en la dirección correcta.

Entendemos que los principales cambios en snapcraft.yaml no son fáciles y queremos que este delirio sea lo más sencillo y práctico posible. Si tiene alguna pregunta o sugerencia para otros usuarios, no dude en unirse a un hilo existente sobre el tema y proporcionar sus publicaciones.

Foto de Tanguy Sauvin en Unsplash.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba