MC/DC Container Build & Development

Building from Source

Run builds from the root directory of the MC/DC repository.

cd /path/to/MCDC
ls containers/Dockerfile
ls pyproject.toml

Docker

docker build -f containers/Dockerfile -t mcdc:dev .

Docker Compose

docker compose -f containers/docker-compose.yml build

Podman

podman build -f containers/Dockerfile -t mcdc:dev .

Apptainer

Option A:

apptainer build --sandbox mcdc_sandbox docker://ghcr.io/cement-psaap/mcdc:dev

Option B:

docker build -f containers/Dockerfile -t mcdc:dev .
docker save mcdc:dev -o mcdc.tar
scp mcdc.tar user@host:~/
apptainer build --sandbox mcdc_sandbox docker-archive://mcdc.tar

LLNL Storage Setup

If you see:

lsetxattr: operation not supported

Option A:

podman --root /var/tmp/$USER/containers/storage run --rm -it mcdc:dev

Option B:

mkdir -p ~/.config/containers
# create storage.conf with overlay config

Troubleshooting

lsetxattr error

Cause: Podman storage on network filesystem.

setgroups 65534 failed

Cause: Rootless Podman user mapping.

permission denied

Fix:

podman run --rm -it --user root mcdc:dev

Out of memory (Apptainer)

Use sandbox mode.

HYDU_create_process error

Use:

mpirun -launcher fork -n 4 python input.py

For Developers

Pushing to the Registry

One-Time Setup

  1. Go to https://github.com/settings/tokens

  2. Generate token with write:packages

  3. Login:

echo "TOKEN" | docker login ghcr.io -u USER --password-stdin

Building and Pushing

On Apple Silicon:

docker build --platform linux/amd64 -f containers/Dockerfile -t mcdc:dev-amd64 .
docker tag mcdc:dev-amd64 ghcr.io/cement-psaap/mcdc:dev
docker push ghcr.io/cement-psaap/mcdc:dev

Making the Package Public

  1. Go to org packages page

  2. Find mcdc

  3. Change visibility to Public

File Overview

containers/
├── Dockerfile
├── docker-compose.yml
└── README.md