Noticias

Craft Parts: código reutilizable estilo Snapcraft

A lo largo de los siglos, las personas han utilizado herramientas y materiales cada vez más simples para crear otros más complejos. Madera y piedra para fundir bronce y hierro; Hierro para fabricar acero; Tubos de vacío para crear puertas lógicas; puertas lógicas para crear motores aritméticos avanzados, etc. El software moderno no es diferente.

Con Snapcraft en particular, el proceso de creación de instantáneas implica varios pasos. Se recopilan los artefactos de origen, se compila y ensambla los productos binarios, y luego se empaquetan en un único archivo final. Este proceso es muy similar a cómo funcionan otras soluciones Canonical y es aplicable a muchos casos de uso diferentes fuera del mundo Snap. Para hacer esto, el equipo de Snapcraft creó un mecanismo portátil y reutilizable llamado Craft Parts.

Craft Parts puede obtener datos de varias fuentes, procesarlos de varias formas y preparar un subárbol del sistema de archivos adecuado para la implementación. De manera similar a las instantáneas, los componentes utilizados en la especificación del proyecto se denominan Partesy se pueden descargar, crear e instalar de forma independiente.

El corazón del módulo craft_parts es el componente Lifecycle Manager, que coordina y ejecuta todos los pasos del ciclo de vida de la pieza. A primera vista, la idea puede parecer un poco abstracta, pero para aquellos que han construido Snaps antes, el enfoque general les resultará bastante familiar. Como ejemplo:

import yaml
from craft_parts import LifecycleManager, Step

parts_yaml = """
parts:
  hello:
    plugin: autotools
    source: https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
    prime:
      - usr/local/bin/hello
      - usr/local/share/man/*
"""

parts = yaml.safe_load(parts_yaml)
lcm = LifecycleManager(parts, application_name="example", cache_dir=".")
actions = lcm.plan(Step.PRIME)
with lcm.action_executor() as aex:
    aex.execute(actions)

En el ejemplo anterior, Lifecycle Manager carga el Hola tarball, descomprímalo, ejecute el script de configuración, compile el código fuente, instale los artefactos resultantes y extraiga solo los archivos que queremos proporcionar (como a través del remilgado Palabra clave).

El resultado final es un subárbol que contiene los siguientes archivos:

prime
prime/usr
prime/usr/local
prime/usr/local/bin
prime/usr/local/bin/hello
prime/usr/local/share
prime/usr/local/share/man
prime/usr/local/share/man/man1
prime/usr/local/share/man/man1/hello.1

Este enfoque ofrece varias ventajas prácticas en la creación de software:

  • El usuario no tiene que compilar manualmente los artefactos; en este ejemplo, el Herramientas automáticas plugin, que se incluye en el módulo, realiza la compilación estándar. Si es necesario, los usuarios que necesitan más flexibilidad pueden introducir anulaciones.
  • La compilación es relativa al directorio del proyecto, lo que permite la portabilidad del código final. Una vez más, la herramienta de línea de comandos proporciona flexibilidad adicional, lo que le permite crear aplicaciones para diferentes casos de uso y escenarios sin depender de un diseño estricto del sistema host.

En general, puede utilizar Lifecycle Manager para crear subárboles de código binario y bibliotecas, probar si puede acortar y simplificar su esfuerzo de compilación en comparación con los métodos y herramientas convencionales y si puede proporcionar sus aplicaciones más fácilmente.

Actualmente, Craft Parts está diseñado para ejecutarse en Ubuntu y requiere Python 3.7 o superior. El mecanismo aún se encuentra en sus (muy) primeras etapas, por lo que esta es una gran oportunidad para que los entusiastas del software y los aficionados a los retoques entren y prueben la herramienta. Sus comentarios e ideas podrían ayudar a que Craft Parts sea aún más ampliable y útil. Así que pruebe el marco, únase al foro de Snapcraft y háganos saber lo que piensa.

Foto de Nicolas Hoizey 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