Crear imagen Singularity para ejecutar Macaulay2 desde un Contenedor
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.