diff --git a/quantum/Dockerfile b/quantum/Dockerfile new file mode 100644 index 0000000..83d1e93 --- /dev/null +++ b/quantum/Dockerfile @@ -0,0 +1,85 @@ +ARG tag=noble +FROM spack/ubuntu-${tag}:latest AS builder +ARG ARCH=x86_64 +ENV ARCH=${ARCH} +ARG FLUX_SCHED_REPO=https://github.com/vsoch/flux-sched +ARG FLUX_SCHED_BRANCH=add-hold + +RUN apt-get update && apt-get install -y gettext-base git make pkg-config + +# Custom flux-sched branch, built from a local clone via spack `develop` +RUN git clone --depth 1 -b ${FLUX_SCHED_BRANCH} ${FLUX_SCHED_REPO} /opt/flux-sched + +# Spack environment written inline (jansson is needed to build the jobtap) +RUN mkdir -p /opt/spack-environment && cat > /opt/spack-environment/spack.yaml < activate.sh && \ + . ./activate.sh && \ + python3 -m ensurepip + +# flux-quantum plugins staged into the view. +COPY . /opt/flux-quantum-src +RUN cd /opt/spack-environment && . ./activate.sh && \ + export PKG_CONFIG_PATH=/opt/views/view/lib/pkgconfig:${PKG_CONFIG_PATH} && \ + make -C /opt/flux-quantum-src/flux_quantum/jobtap \ + FLUX_CFLAGS="$(pkg-config --cflags flux-core jansson)" \ + FLUX_LIBS="$(pkg-config --libs flux-core jansson)" \ + CFLAGS="-Wall -fPIC -O2" && \ + mkdir -p /opt/views/view/flux-quantum && \ + cp -R /opt/flux-quantum-src/flux_quantum /opt/views/view/flux-quantum/ && \ + cp -R /opt/flux-quantum-src/cli-plugins /opt/views/view/flux-quantum/ && \ + install -D /opt/flux-quantum-src/flux_quantum/jobtap/quantum.so \ + /opt/views/view/flux-quantum/jobtap/quantum.so + +RUN find -L /opt/views/view/* -type f -exec readlink -f '{}' \; | \ + xargs file -i | grep 'charset=binary' | \ + grep 'x-executable\|x-archive\|x-sharedlib' | \ + awk -F: '{print $1}' | xargs strip || true + +# Bare OS image with the view +ARG tag=noble +FROM ubuntu:${tag} +COPY --from=builder /opt/spack-environment /opt/spack-environment +COPY --from=builder /opt/software /opt/software +COPY --from=builder /opt/views /opt/views +RUN { \ + echo '#!/bin/sh' \ + && echo '.' /opt/spack-environment/activate.sh \ + && echo 'exec "$@"'; \ + } > /entrypoint.sh \ +&& chmod a+x /entrypoint.sh \ +&& ln -s /opt/views/view /opt/view +ENTRYPOINT [ "/entrypoint.sh" ] +CMD [ "/bin/bash" ] diff --git a/quantum/uptodate.yaml b/quantum/uptodate.yaml new file mode 100644 index 0000000..fc0d79b --- /dev/null +++ b/quantum/uptodate.yaml @@ -0,0 +1,7 @@ +dockerbuild: + build_args: + tag: + key: "tag" + # jammy and focal won't build with flux-sched requiring gcc>12 + versions: + - "noble" diff --git a/rocky/Dockerfile b/rocky/Dockerfile index 4666781..67987b8 100644 --- a/rocky/Dockerfile +++ b/rocky/Dockerfile @@ -16,6 +16,9 @@ RUN mkdir /opt/spack-environment \ && echo ' view: /opt/views/view' \ && echo ' concretizer:' \ && echo ' unify: true' \ +&& echo ' packages:' \ +&& echo ' boost:' \ +&& echo ' require: "@1.85.0"' \ && echo ' config:' \ && echo ' install_tree:' \ && echo ' root: /opt/software') > /opt/spack-environment/spack.yaml diff --git a/ubuntu/Dockerfile b/ubuntu/Dockerfile index 355d500..d40b0ec 100644 --- a/ubuntu/Dockerfile +++ b/ubuntu/Dockerfile @@ -9,13 +9,15 @@ RUN apt-get update && apt-get install -y gettext-base # is specified in a manifest file (spack.yaml) RUN mkdir /opt/spack-environment \ && (echo spack: \ -&& echo ' specs: [flux-sched, flux-core@master, pmix, flux-pmix, libzmq]' \ +&& echo ' specs: [flux-sched, flux-core, pmix, flux-pmix, libzmq]' \ && echo ' view: /opt/views/view' \ && echo ' concretizer:' \ && echo ' unify: true' \ && echo ' packages:' \ && echo ' all:' \ && echo ' require: ["target=:${ARCH}"]' \ +&& echo ' boost:' \ +&& echo ' require: "@1.85.0"' \ && echo ' config:' \ && echo ' install_tree:' \ && echo ' root: /opt/software') > /opt/spack-environment/spack-template.yaml