En una entrada anterior intenté explicar cómo utilizar una imagen de Singularity para ejecutar el software Macaulay2 (M2) en un contenedor (tipo Docker pero usando Singularity). En ese momento utilicé una imagen creada por otra persona. En esta nueva entrada la idea es explicar cómo crear nuestra propia imagen de Singularity para M2.

La imagen se debe crear en una computadora con permisos de superusuario; mientras que su posterior ejecución en un Contenedor no requiere permisos de superusuario.

Instalar Go y Singularity

Lo primero que necesitamos es instalar Singularity. No voy a explicar cómo hacer esto. Una opción es instalar desde el código fuente, disponible en el github de Singularity (instrucciones en archivo “INSTALL.md”). Otra opción es instalar desde los repositorios de la distribución de Linux que estemos usando. Para más detalles ver la guía de instalación

En ambos casos se requiere instalar Go, que es el lenguaje en el que está escrito Singularity.

Una vez instalado Singularity, podemos usar el comando “singularity” para crear una imagen para un Contenedor. En mi caso estoy usando la version 4.2.0 de Singularity.

Archivo que define la imagen

Lo primero es crear un archivo con la definición de la imagen que queremos crear. A este archivo lo vamos a crear con el nombre “m2.def”, y con el siguiente contenido:

Bootstrap: docker
From: debian:12

%post
    apt-get update && apt-get -y upgrade
    apt-get -y update
    apt-get -y install macaulay2

%runscript
    M2

%labels
    Author mvaldes
    Version v1.21

Las primeras dos líneas dicen que vamos a descargar Debian 12 desde el sitio de Docker. Este va a ser el sistema operativo base de nuestra imagen.

En la seccion %post se escriben los comandos a ejecutar para instalar el software Macaulay2 desde los repositorios del sistema operativo base (en este caso Debian 12).

Creación de la imagen SIF

Una vez que tenemos el archivo de definición de la imagen, la compilamos con el comando build de Singularity (como superusuario):

# singularity build m2.sif m2.def

Esto puede tardar varios minutos. Al finalizar se crea el archivo “m2.sif”, que es el que permite usar M2 en un Contenedor de Singularity. En este caso la imagen creada tiene 1.8 GB.

Compartir en Sylabs Cloud

Una forma de compartir la imagen creada, es subirla al servidor de sylabs y hacerla pública. Para esto hay que registrarse en cloud sylabs.

Una vez registrados, loguearse al servidor sylabs de forma remota mediante (nos va a pedir crear un “access token” en el sitio de sylabs):

$ singularity remote login SylabsCloud

Antes de subir la imagen, la vamos a firmar con una clave. Para esto primero hay que generar una clave, mediante el comando:

$ singularity key newpair

Nos piden un correo, que debe ser el asociado al usuario de la cuenta de Sylabs. Uso un passphrase vacío y con opción “push it to the keystore”.

Una vez creada la clave, se firma la imagen mediante el siguiente comando (nos va a dar la opción de elegir una clave, entre todas las que tengamos creadas):

$ singularity sign m2.sif

Antes de firmarla puede ser necesario cambiar el propietario de la imagen desde root a miUsuario. Para esto se usa:

# chown miUsuario m2.sif

Ahora sí podemos subir la imagen (ya firmada). Para esto, en sylabs, crear una carpeta para subir la imagen sif. Esta carpeta se crea en la sección “Remote Builder” del sitio. En este caso el “build” creado se ubica en: library://mvaldes/macaulay2/m2-v1.2

Para terminar subimos la imagen sif a la carpeta del servidor de sylabs:

$ singularity push ~/m2.sif library://mvaldes/macaulay2/m2-v1.2

Esto sube la imagen a https://cloud.sylabs.io/library/mvaldes/macaulay2/m2-v1.2. Finalmente, en sylabs, hacer pública la carpeta con la imagen sif.

Descargar la imagen desde el servidor

La imagen creada permite ejecutar Macaulay2 en cualquier computadora mediante un Contenedor de Singularity. Crear el Contenedor no requiere permisos de superusuario.

La imagen se puede descargar del servidor mediante:

$ singularity pull library://mvaldes/macaulay2/m2-v1.2

Una vez descargada, se puede verificar la imagen mediante:

$ singularity verify ~/m2-v1.2_latest.sif

Para usar la imagen desde un Contenedor en el ClusterUY, ver una entrada anterior de este blog.

Referencias

  1. Guía de instalación de Singularity. enlace

  2. Build a Container. enlace

  3. Comando “sign” de Singularity. enlace

  4. Comando “push” de Singularity. enlace

  5. Singularity Container Workflow: Part 4 – Signing the Container. enlace