Skip to content
rodolfo.gg
Go back

Cómo instalar SingularityCE (y Apptainer) en Debian 13 sin morir en el intento.

CC BY-NC-ND 4.0
Rodolfo González González
en es

Cómo instalar SingularityCE (y Apptainer) en Debian 13 sin morir en el intento.

Introducción

Singularity es un runtime de contenedores orientado sobre todo a entornos científicos y HPC (High Performance Computing, computación de alto desempeño); se usa para ejecutar software empaquetado de forma reproducible, aislada y portable entre estaciones de trabajo, servidores y clústeres, sin romper fácilmente la integración con el sistema anfitrión.

SIF (Singularity Image Format) es el formato de imagen usado por Singularity para empaquetar contenedores en un único archivo portable, verificable y fácil de compartir.

Comparativamente con Docker, en términos prácticos, éste está más orientado a microservicios y despliegues tipo DevOps (daemon, imágenes OCI, orquestación), mientras que Singularity prioriza ejecución científica/HPC con integración más directa con el host y sin exigir el mismo modelo de privilegios que Docker clásico.

Singularity fue creado originalmente por Gregory M. Kurtzer. No nació como proyecto “cerrado” ni puramente comercial: durante años se usó como software abierto en academia y HPC. Con el tiempo cambiaron la gobernanza y la propiedad de marca cuando Sylabs impulsó su oferta comercial (soporte empresarial y productos asociados). A partir de ahí, los caminos se separaron: SingularityCE (Community Edition) continuó bajo Sylabs, mientras que Apptainer surgió en 2021 como fork comunitario en la Linux Foundation para mantener una gobernanza abierta y neutral. En la práctica, hoy conviven ambos runtimes, con CLI y soporte SIF muy parecidos, pero con mantenedores y hojas de ruta diferentes.


Tabla de contenido

Tabla de contenido

Objetivos

Esta guía explica cómo instalar SingularityCE en Debian 13 Trixie de forma controlada, reproducible y razonablemente segura. El enfoque principal será compilar SingularityCE desde código fuente, porque los paquetes .deb oficiales de SingularityCE publicados por Sylabs están orientados principalmente a Ubuntu LTS, no específicamente a Debian 13.

También se incluye la instalación de Apptainer, porque en muchos entornos académicos, científicos y HPC se usa el nombre Singularity de forma genérica, aunque hoy (2026) existen dos proyectos relacionados pero distintos, como se mencionó.

SingularityCE vs Apptainer

Históricamente, Singularity fue una herramienta muy usada en HPC porque permitía ejecutar contenedores de forma más compatible con entornos multiusuario que Docker. En particular, Singularity se volvió popular porque facilitaba ejecutar cargas científicas, pipelines bioinformáticos, software de machine learning y aplicaciones empaquetadas sin requerir que cada usuario tuviera privilegios administrativos.

Con el tiempo, el ecosistema se dividió:

ProyectoComando principalComentario
SingularityCEsingularityContinuación comunitaria mantenida por Sylabs.
ApptainerapptainerProyecto derivado, muy común en HPC y con paquetes específicos para Debian 13.

En la práctica:

Terminal window
singularity exec imagen.sif comando

Y:

Terminal window
apptainer exec imagen.sif comando

son comandos conceptualmente muy similares.

Estrategia de instalación recomendada en Debian 13

En Debian 13 hay tres caminos razonables:

MétodoRecomendaciónComentario
Compilar SingularityCE desde código fuenteRecomendado para SingularityCE en Debian 13Da mayor control y evita usar paquetes .deb destinados a Ubuntu.
Usar paquetes .deb de SingularityCE para UbuntuNo recomendado salvo pruebas controladasPuede funcionar, pero no es lo ideal en Debian puro.
Instalar Apptainer con paquetes para Debian 13Alternativa razonable si no necesitas Sylabs SingularityCE específicamenteApptainer publica paquetes .deb específicos para Trixie.

1. Instalación de SingularityCE

En esta guía instalaremos SingularityCE desde una versión publicada en GitHub por Sylabs.

1.1 Cuándo elegir SingularityCE

Elige SingularityCE si:

Si no necesitas SingularityCE de Sylabs de forma estricta, Apptainer suele ser la opción más directa en Debian 13 porque se integra bien con apt.

1.2 Esquema de directorios

La instalación quedará, por defecto, bajo:

/usr/local

Por tanto, el binario principal quedará normalmente en:

/usr/local/bin/singularity

Y la configuración global quedará bajo una ruta similar a:

/usr/local/etc/singularity/

Este esquema tiene una ventaja importante: mantiene separada la instalación manual de los paquetes gestionados por apt. En Debian, los archivos instalados por el administrador local suelen vivir bajo /usr/local, mientras que los paquetes del sistema suelen instalarse bajo /usr.

1.3 Requisitos previos

Esta guía asume lo siguiente:

Verifica la versión de Debian:

Terminal window
cat /etc/os-release

En Debian 13 deberías ver algo parecido a:

PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
VERSION_ID="13"
VERSION_CODENAME=trixie

Verifica también la arquitectura:

Terminal window
uname -m

Lo más común es que el resultado sea:

x86_64

1.4 Preparar el sistema

Actualiza los índices de paquetes:

Terminal window
sudo apt update

Actualiza el sistema base si tienes paquetes pendientes:

Terminal window
sudo apt full-upgrade -y

Instala herramientas básicas:

Terminal window
sudo apt install -y \
ca-certificates \
curl \
wget \
git \
gnupg \
lsb-release \
build-essential

Donde:

1.5 Instalar dependencias de compilación de SingularityCE

Instala las dependencias indicadas por la documentación de SingularityCE para sistemas Debian/Ubuntu, añadiendo libsubid-dev, conveniente en Debian 13. Esta combinación evita instalar runc para no forzar la eliminación de docker-ce/containerd.io en sistemas que ya usan Docker CE:

Terminal window
sudo apt install -y \
autoconf \
automake \
cryptsetup \
fuse \
fuse2fs \
libfuse3-dev \
libseccomp-dev \
libtool \
pkg-config \
squashfs-tools \
squashfs-tools-ng \
uidmap \
zlib1g-dev \
libsubid-dev

1.6 Dependencias a detalle

1.6.1 autoconf, automake, libtool, pkg-config

Estas herramientas participan en el proceso clásico de generación de scripts de configuración y compilación. SingularityCE usa un proceso de construcción que necesita preparar un árbol de compilación antes de ejecutar make.

1.6.2 cryptsetup

Permite soporte para contenedores cifrados. Puedes compilar SingularityCE sin cryptsetup, pero si planeas usar imágenes cifradas, conviene instalarlo desde el inicio.

1.6.3 fuse, fuse2fs, libfuse3-dev

FUSE permite montar sistemas de archivos en espacio de usuario. En el contexto de SingularityCE y herramientas similares, FUSE es importante para varios modos de montaje y ejecución no privilegiada.

1.6.4 libseccomp-dev

seccomp permite aplicar filtros de llamadas al sistema. Es una pieza relevante de aislamiento y control de seguridad en runtimes de contenedores.

1.6.5 runc

runc es un runtime OCI. SingularityCE puede operar con modo OCI en algunas situaciones. Si no usarás comandos singularity oci, puedes omitirlo.

OCI significa Open Container Initiative: un conjunto de especificaciones abiertas para formatos de imagen y ejecución de contenedores. En términos prácticos, “modo OCI” se refiere a trabajar con ese estándar (imágenes y runtimes compatibles con OCI).

1.6.6 squashfs-tools y squashfs-tools-ng

Las imágenes SIF suelen incluir sistemas de archivos comprimidos basados en SquashFS. Estas herramientas permiten crear, inspeccionar y manipular ese tipo de contenido.

1.6.7 uidmap y libsubid-dev

Estos paquetes están relacionados con mapeo de usuarios y grupos subordinados, importante para escenarios rootless, fakeroot y user namespaces.

1.7 Instalar Go

SingularityCE está escrito en Go. La documentación oficial recomienda usar una versión reciente de Go desde los binarios oficiales, especialmente porque la versión disponible en los repositorios de una distribución puede no ser suficientemente reciente para compilar la versión actual de SingularityCE.

Consulta primero si ya tienes Go instalado:

Terminal window
go version || true

Si tienes una instalación manual previa bajo /usr/local/go, elimínala antes de instalar otra versión encima:

Terminal window
sudo rm -rf /usr/local/go

Instala Go desde los binarios oficiales. Ajusta GO_VERSION a una versión estable reciente soportada por el release concreto que vas a compilar:

Terminal window
cd /tmp
export GO_VERSION="1.25.5"
export GO_OS="linux"
export GO_ARCH="amd64"
wget "https://go.dev/dl/go${GO_VERSION}.${GO_OS}-${GO_ARCH}.tar.gz"
sudo tar -C /usr/local -xzf "go${GO_VERSION}.${GO_OS}-${GO_ARCH}.tar.gz"
rm "go${GO_VERSION}.${GO_OS}-${GO_ARCH}.tar.gz"

Agrega Go al PATH para tu usuario:

Terminal window
cat <<'BASHRC_GO' >> ~/.bashrc
# Go instalado manualmente en /usr/local/go
export GOPATH="$HOME/go"
export PATH="/usr/local/go/bin:$GOPATH/bin:$PATH"
BASHRC_GO
source ~/.bashrc

Verifica:

Terminal window
go version

Deberías ver algo como:

go version go1.25.5 linux/amd64

1.8 Nota sobre Debian y Go

En Debian también podrías instalar Go con:

Terminal window
sudo apt install golang-go

Ese método es más fácil de mantener con apt, pero para compilar SingularityCE suele ser más prudente instalar la versión de Go esperada por el release concreto que vas a construir.

1.9 Elegir la versión de SingularityCE

Conviene instalar una versión etiquetada, no la rama main.

Una versión etiquetada es más estable porque corresponde a un release. En cambio, la rama main puede cambiar rápidamente y no es la mejor opción para una máquina de producción.

Para localizar versiones disponibles:

  1. Revisa la página oficial de releases: https://github.com/sylabs/singularity/releases
  2. Desde terminal, lista tags recientes:
Terminal window
curl -fsSL "https://api.github.com/repos/sylabs/singularity/releases" \
| grep -E '"tag_name":' \
| head -n 10

Salida típica:

"tag_name": "v4.3.6"
"tag_name": "v4.3.5"
  1. Verifica que exista el tarball del release elegido:
Terminal window
export SINGULARITY_VERSION="4.3.6"
wget --spider "https://github.com/sylabs/singularity/releases/download/v${SINGULARITY_VERSION}/singularity-ce-${SINGULARITY_VERSION}.tar.gz"

Si wget --spider responde 200 OK, esa versión está disponible con ese formato de archivo.

Define la versión en una variable:

Terminal window
export SINGULARITY_VERSION="4.3.6"

Puedes cambiar ese valor por la versión estable más reciente publicada por Sylabs.

1.10 Descargar el tarball correcto

Descarga el tarball de release de SingularityCE:

Terminal window
cd /usr/local/src
sudo wget "https://github.com/sylabs/singularity/releases/download/v${SINGULARITY_VERSION}/singularity-ce-${SINGULARITY_VERSION}.tar.gz"

Extrae el archivo:

Terminal window
sudo tar -xzf "singularity-ce-${SINGULARITY_VERSION}.tar.gz"

Cambia la propiedad del árbol de código a tu usuario para compilar sin usar sudo todo el tiempo:

Terminal window
sudo chown -R "$USER:$USER" "singularity-ce-${SINGULARITY_VERSION}"

Entra al directorio:

Terminal window
cd "singularity-ce-${SINGULARITY_VERSION}"

1.11 Configurar la compilación

Genera el árbol de compilación:

Terminal window
./mconfig --prefix=/usr/local

1.12 Qué hace mconfig

mconfig prepara el directorio de compilación, detecta dependencias y define las rutas finales de instalación.

Con:

Terminal window
--prefix=/usr/local

indicamos que SingularityCE se instalará bajo /usr/local.

Eso normalmente implica:

/usr/local/bin/singularity
/usr/local/etc/singularity/singularity.conf
/usr/local/libexec/singularity/
/usr/local/var/singularity/

1.13 Compilar SingularityCE

Entra al directorio de compilación:

Terminal window
cd builddir

Compila:

Terminal window
make

Si quieres usar más núcleos de CPU:

Terminal window
make -j"$(nproc)"

1.14 Instalar SingularityCE

1.14.1 Instalación directa con make install

Instala:

Terminal window
sudo make install

Verifica que el binario exista:

Terminal window
which singularity

Debería responder:

/usr/local/bin/singularity

Verifica la versión:

Terminal window
singularity --version

Ejemplo esperado:

singularity-ce version 4.3.6

1.14.2 Instalación con checkinstall para generar .deb

Si quieres poder desinstalar con dpkg/apt en lugar de borrar rutas a mano, puedes generar e instalar un paquete .deb local desde el mismo builddir.

Instala checkinstall:

Terminal window
sudo apt update
sudo apt install -y checkinstall

Desde builddir (donde ya ejecutaste make), genera e instala el .deb:

Terminal window
sudo checkinstall \
--fstrans=no \
--type=debian \
--pkgname=singularity-ce \
--pkgversion="${SINGULARITY_VERSION}" \
--pkglicense="BSD-3-Clause" \
--maintainer="admin@localhost" \
--requires="libseccomp2,uidmap,squashfs-tools,cryptsetup" \
--nodoc \
--install=yes \
make install

Al terminar, checkinstall dejará también el paquete .deb en el directorio actual para reutilizarlo en otras máquinas compatibles.

Verifica:

Terminal window
dpkg -l | grep singularity-ce
singularity --version

1.15 Revisar la configuración instalada

SingularityCE incluye un comando útil para mostrar cómo fue construido:

Terminal window
singularity buildcfg

Ese comando muestra rutas relevantes como:

PREFIX=/usr/local
BINDIR=/usr/local/bin
SYSCONFDIR=/usr/local/etc
SINGULARITY_CONFDIR=/usr/local/etc/singularity
SINGULARITY_CONF_FILE=/usr/local/etc/singularity/singularity.conf

La configuración principal suele estar en:

Terminal window
sudo less /usr/local/etc/singularity/singularity.conf

No edites esta configuración a ciegas. Primero confirma qué comportamiento necesitas cambiar.

1.16 Prueba básica de ejecución

Ejecuta una prueba simple usando una imagen remota:

Terminal window
singularity exec docker://debian:13 cat /etc/os-release

La primera vez, SingularityCE descargará capas desde el registro Docker/OCI y construirá una imagen local en caché.

También puedes hacer una prueba con Alpine:

Terminal window
singularity exec docker://alpine:latest echo "Hola desde SingularityCE"

Salida esperada:

Hola desde SingularityCE

1.17 Descargar una imagen SIF local

En HPC suele ser preferible descargar una imagen una vez y luego ejecutarla muchas veces.

Terminal window
mkdir -p ~/containers
cd ~/containers
singularity pull debian-13.sif docker://debian:13

Ejecuta la imagen local:

Terminal window
singularity exec ~/containers/debian-13.sif cat /etc/os-release

1.18 Por qué conviene usar imágenes locales

Cuando ejecutas directamente una URL remota, SingularityCE puede necesitar acceder al registro remoto y usar caché. En servidores compartidos, NFS o clústeres, esto puede causar problemas de concurrencia o rendimiento.

Con una imagen .sif local controlas mejor cuándo descargas y cuándo ejecutas.

1.19 Caché de SingularityCE

Puedes inspeccionar la caché:

Terminal window
singularity cache list

Puedes limpiarla:

Terminal window
singularity cache clean

O limpiar sin pedir confirmación:

Terminal window
singularity cache clean --force

Normalmente la caché está bajo tu $HOME, en una ruta similar a:

~/.singularity/cache

Puedes moverla usando la variable de entorno:

Terminal window
mkdir -p /var/tmp/$USER/singularity-cache
export SINGULARITY_CACHEDIR="/var/tmp/$USER/singularity-cache"

Para hacerlo permanente:

Terminal window
cat <<'BASHRC_CACHE' >> ~/.bashrc
# Caché de SingularityCE en disco local
export SINGULARITY_CACHEDIR="/var/tmp/$USER/singularity-cache"
BASHRC_CACHE

1.20 Directorio temporal

SingularityCE también usa directorios temporales al construir o ejecutar contenedores.

Terminal window
export SINGULARITY_TMPDIR="/var/tmp/$USER/singularity-tmp"
mkdir -p "$SINGULARITY_TMPDIR"

Para hacerlo permanente:

Terminal window
cat <<'BASHRC_TMP' >> ~/.bashrc
# Directorio temporal de SingularityCE
export SINGULARITY_TMPDIR="/var/tmp/$USER/singularity-tmp"
BASHRC_TMP

1.21 HPC y NFS

Evita usar NFS, Lustre, GPFS o sistemas compartidos como directorio temporal para operaciones que requieran overlay, fakeroot o construcción intensiva. Es mejor usar almacenamiento local del nodo cuando sea posible.

1.22 Ejecutar comandos dentro de un contenedor

La forma más común de uso es:

Terminal window
singularity exec imagen.sif comando

Ejemplo:

Terminal window
singularity exec ~/containers/debian-13.sif uname -a

También puedes abrir una shell:

Terminal window
singularity shell ~/containers/debian-13.sif

Dentro de la shell verás un prompt de SingularityCE. Para salir:

Terminal window
exit

1.23 Ejecutar una imagen como programa

Algunas imágenes tienen un runscript. En ese caso puedes usar:

Terminal window
singularity run imagen.sif

Si la imagen no define un comportamiento por defecto interesante, suele ser más explícito usar exec.

1.24 Montar directorios del host

Para montar un directorio de forma explícita usa --bind o -B:

Terminal window
singularity exec \
--bind /datos:/datos \
~/containers/debian-13.sif \
ls -lah /datos

La sintaxis general es:

--bind ruta_host:ruta_contenedor

Ejemplo con una ruta de trabajo:

Terminal window
mkdir -p ~/trabajo-singularity
echo "archivo desde el host" > ~/trabajo-singularity/prueba.txt
singularity exec \
--bind "$HOME/trabajo-singularity:/work" \
~/containers/debian-13.sif \
cat /work/prueba.txt

1.25 Construir una imagen desde una receta .def

SingularityCE usa archivos de definición, normalmente con extensión .def.

Crea un ejemplo:

Terminal window
mkdir -p ~/singularity-recipes
cd ~/singularity-recipes
cat > debian-python.def <<'RECIPE'
Bootstrap: docker
From: debian:13
%post
apt-get update
apt-get install -y python3 python3-pip ca-certificates
apt-get clean
rm -rf /var/lib/apt/lists/*
%runscript
echo "Python dentro del contenedor:"
exec python3 --version
RECIPE

Construye la imagen:

Terminal window
sudo singularity build debian-python.sif debian-python.def

Ejecuta:

Terminal window
singularity run debian-python.sif

1.26 Por qué usamos sudo para construir

Dependiendo de la configuración de SingularityCE, construir imágenes puede requerir privilegios. En estaciones personales o servidores propios, usar sudo singularity build es común.

En un clúster HPC administrado, normalmente los usuarios no tienen sudo; en esos casos se suele construir la imagen en otra máquina y luego copiar el .sif al clúster.

1.27 Construcción sin root y fakeroot

SingularityCE puede soportar modos como --fakeroot, dependiendo de la configuración del sistema.

Verifica que tu usuario tenga rangos en /etc/subuid y /etc/subgid:

Terminal window
grep "^$USER:" /etc/subuid /etc/subgid || true

Si no aparecen entradas, puedes agregarlas con:

Terminal window
sudo usermod --add-subuids 100000-165535 "$USER"
sudo usermod --add-subgids 100000-165535 "$USER"

Cierra sesión y vuelve a entrar para que algunos cambios se apliquen correctamente.

Luego prueba:

Terminal window
singularity build --fakeroot debian-python.sif debian-python.def

1.28 Integración con GPU NVIDIA

Si tienes GPU NVIDIA y drivers instalados en el host, SingularityCE puede exponerlos dentro del contenedor con:

Terminal window
singularity exec --nv imagen.sif nvidia-smi

Ejemplo:

Terminal window
singularity exec --nv docker://nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

--nv no instala el driver dentro del contenedor. Lo que hace es enlazar bibliotecas y dispositivos relevantes del host para que el contenedor pueda usar la GPU.

El driver NVIDIA debe estar funcionando en el host:

Terminal window
nvidia-smi

Si nvidia-smi no funciona en el host, tampoco esperes que funcione dentro del contenedor.

1.29 Integración con SLURM o entornos HPC

En un clúster con SLURM, normalmente usarías SingularityCE dentro de un job script.

#!/bin/bash
#SBATCH --job-name=singularity-test
#SBATCH --output=singularity-test.out
#SBATCH --error=singularity-test.err
#SBATCH --time=00:10:00
#SBATCH --cpus-per-task=2
#SBATCH --mem=2G
singularity exec /ruta/a/imagen.sif hostname
singularity exec /ruta/a/imagen.sif python3 --version

En un clúster real, evita que cada job descargue imágenes desde Internet. Es mejor preparar el .sif antes y guardarlo en una ruta compartida de solo lectura o en un directorio de proyecto.

1.30 Desinstalar SingularityCE instalado desde fuente

1.30.1 Desinstalar instalación directa (make install)

Si instalaste bajo /usr/local, puedes revisar primero la configuración:

Terminal window
singularity buildcfg

Como la instalación manual no queda registrada en apt, la desinstalación no se hace con apt remove.

Una estrategia conservadora es eliminar los archivos principales:

Terminal window
sudo rm -f /usr/local/bin/singularity
sudo rm -rf /usr/local/etc/singularity
sudo rm -rf /usr/local/libexec/singularity
sudo rm -rf /usr/local/var/singularity
sudo rm -rf /usr/local/share/doc/singularity-ce
sudo rm -rf /usr/local/share/man/man1/singularity*.1

Después verifica:

Terminal window
which singularity || true
singularity --version || true

Si compilaste en /usr/local/src, también puedes eliminar el árbol de código:

Terminal window
sudo rm -rf "/usr/local/src/singularity-ce-${SINGULARITY_VERSION}"
sudo rm -f "/usr/local/src/singularity-ce-${SINGULARITY_VERSION}.tar.gz"

1.30.2 Desinstalar instalación con paquete .deb de checkinstall

Si instalaste con checkinstall, primero identifica el nombre exacto del paquete:

Terminal window
dpkg -l | grep singularity

Normalmente bastará con:

Terminal window
sudo apt remove --purge -y singularity-ce
sudo apt autoremove -y

Si apt no lo encuentra por nombre, usa dpkg con el identificador real:

Terminal window
sudo dpkg -r singularity-ce

Verifica:

Terminal window
which singularity || true
singularity --version || true

1.31 Problemas comunes

1.31.1 go: command not found

Tu shell no tiene Go en el PATH.

Terminal window
echo "$PATH"

Asegúrate de tener esto en ~/.bashrc:

Terminal window
export GOPATH="$HOME/go"
export PATH="/usr/local/go/bin:$GOPATH/bin:$PATH"

Recarga:

Terminal window
source ~/.bashrc

1.31.2 Error por versión vieja de Go

Si la compilación falla indicando que la versión de Go es insuficiente, instala una versión más reciente desde los binarios oficiales de Go.

No extraigas una versión nueva encima de /usr/local/go sin borrar la anterior. Haz:

Terminal window
sudo rm -rf /usr/local/go

Y luego instala la nueva.

1.31.3 Falta libsubid-dev

En Debian 13 conviene instalarlo:

Terminal window
sudo apt install -y libsubid-dev

Luego vuelve a ejecutar:

Terminal window
./mconfig --prefix=/usr/local

1.31.4 singularity: command not found después de instalar

Verifica si el binario existe:

Terminal window
ls -l /usr/local/bin/singularity

Si existe, probablemente /usr/local/bin no está en tu PATH.

Temporalmente:

Terminal window
export PATH="/usr/local/bin:$PATH"

Permanentemente:

Terminal window
cat <<'BASHRC_LOCALBIN' >> ~/.bashrc
# Binarios locales
export PATH="/usr/local/bin:$PATH"
BASHRC_LOCALBIN
source ~/.bashrc

1.31.5 Problemas con NFS, Lustre, GPFS o PanFS

Si estás en HPC, evita usar sistemas de archivos compartidos para:

Usa almacenamiento local del nodo cuando esté disponible.

Terminal window
export SINGULARITY_TMPDIR="/scratch/$USER/singularity-tmp"
export SINGULARITY_CACHEDIR="/scratch/$USER/singularity-cache"
mkdir -p "$SINGULARITY_TMPDIR" "$SINGULARITY_CACHEDIR"

1.31.6 Error al construir imágenes sin sudo

Prueba construir con sudo:

Terminal window
sudo singularity build imagen.sif receta.def

O configura fakeroot correctamente con /etc/subuid y /etc/subgid.

1.31.7 Docker fue removido al instalar runc (cómo restaurarlo)

Si al instalar dependencias viste algo como:

ELIMINANDO:
containerd.io docker-ce

entonces apt resolvió un conflicto entre runc (repos Debian) y paquetes de Docker CE (repositorio oficial de Docker).

Para restaurar Docker:

Terminal window
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker run --rm hello-world

Si falla porque falta el repositorio de Docker, vuelve a configurarlo:

Terminal window
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Para evitar repetir el problema, omite runc en la instalación base de dependencias de SingularityCE y úsalo sólo si realmente necesitas el modo OCI.

1.31.8 checkinstall falla con mkdir ... El fichero ya existe

Si checkinstall falla durante make install con un error similar a:

mkdir: cannot create directory '...': El fichero ya existe

y ya verificaste que el directorio realmente no existe, suele ser un problema de installwatch (interno de checkinstall), no del Makefile.

Ejecuta checkinstall con:

Terminal window
--fstrans=no

Ejemplo completo:

Terminal window
sudo checkinstall --fstrans=no --type=debian ... make -j1 install

1.31.9 Problemas descargando desde Docker Hub

Docker Hub aplica límites de descarga. Si haces muchas pruebas, puedes encontrar errores por rate limit.

Soluciones:

1.32 Checklist final

Ejecuta este bloque para verificar la instalación:

Terminal window
set -e
printf '\n[1] Binario:\n'
which singularity
printf '\n[2] Versión:\n'
singularity --version
printf '\n[3] Configuración de build:\n'
singularity buildcfg | sed -n '1,25p'
printf '\n[4] Prueba con Alpine:\n'
singularity exec docker://alpine:latest echo "SingularityCE funciona"
printf '\n[5] Caché:\n'
singularity cache list || true

Si todo funciona, la instalación está lista para uso básico.

1.33 Recomendaciones operativas

Para una estación de trabajo personal:

Para un servidor multiusuario:

Para HPC:

1.34 Fuentes consultadas

1.35 Resumen ejecutivo

En Debian 13, la vía más limpia para instalar SingularityCE es compilar desde código fuente usando una versión etiquetada. El proceso consiste en:

  1. Instalar dependencias con apt.
  2. Instalar una versión reciente de Go.
  3. Descargar el tarball oficial singularity-ce-X.Y.Z.tar.gz.
  4. Ejecutar ./mconfig --prefix=/usr/local.
  5. Compilar con make.
  6. Instalar con sudo make install.
  7. Verificar con singularity --version y singularity exec docker://alpine:latest ....

Si tu prioridad no es usar Sylabs SingularityCE específicamente, sino tener una herramienta compatible tipo Singularity en Debian 13, considera seriamente Apptainer, porque publica paquetes .deb específicos para Trixie.


2. Instalación de Apptainer

2.1 Alternativa: instalar Apptainer en Debian 13

Si no necesitas específicamente SingularityCE de Sylabs, Apptainer puede ser una alternativa más directa en Debian 13.

Apptainer publica paquetes .deb específicos para Trixie. Un ejemplo de instalación no setuid sería:

Terminal window
sudo apt update
sudo apt install -y wget
cd /tmp
wget https://github.com/apptainer/apptainer/releases/download/v1.5.0/apptainer_1.5.0-trixie+_amd64.deb
sudo apt install -y ./apptainer_1.5.0-trixie+_amd64.deb

Verifica:

Terminal window
apptainer --version

Prueba:

Terminal window
apptainer exec docker://alpine:latest echo "Hola desde Apptainer"

2.2 Cuándo elegir Apptainer

Elige Apptainer si:

2.3 Instalar desde repositorios Debian

Primero, actualiza índices e instala Apptainer:

Terminal window
sudo apt update
sudo apt install -y apptainer

Si en tu entorno necesitas modo setuid (depende de tu política de seguridad y del clúster), instala también el paquete correspondiente si está disponible:

Terminal window
sudo apt install -y apptainer-suid

2.4 Verificación básica

Comprueba versión y prueba de ejecución:

Terminal window
apptainer --version
apptainer exec docker://alpine:latest echo "Apptainer funciona"

2.5 Configuración recomendada de caché y temporales

Para evitar problemas en sistemas compartidos (NFS/Lustre/GPFS), usa rutas locales para caché y temporales:

Terminal window
mkdir -p "$HOME/.cache/apptainer" "$HOME/.apptainer/tmp"
export APPTAINER_CACHEDIR="$HOME/.cache/apptainer"
export APPTAINER_TMPDIR="$HOME/.apptainer/tmp"

Si quieres hacerlo persistente en Bash:

Terminal window
cat <<'BASHRC_APPTAINER' >> ~/.bashrc
export APPTAINER_CACHEDIR="$HOME/.cache/apptainer"
export APPTAINER_TMPDIR="$HOME/.apptainer/tmp"
BASHRC_APPTAINER

Share this post on:

Previous Post
PDDL 3.1: manual de estudio "from zero to hero".
Next Post
Cómo instalar SWI-Prolog en Debian 13 Trixie sin morir en el intento.