Skip to content

Instantly share code, notes, and snippets.

@elderica
Created July 23, 2023 13:35
Show Gist options
  • Save elderica/105368507365d915319751cd05bbf538 to your computer and use it in GitHub Desktop.
Save elderica/105368507365d915319751cd05bbf538 to your computer and use it in GitHub Desktop.
SBCL on Arch Linux with Docker
FROM archlinux:latest AS base
SHELL ["/bin/bash", "-x", "-o", "pipefail", "-c"]
# Install runtime dependencies
RUN pacman -Syu --noconfirm zstd
FROM base AS sbcl-builder
SHELL ["/bin/bash", "-x", "-o", "pipefail", "-c"]
ENV SBCL_VERSION=2.3.6
ENV SBCL_SIGNING_KEY=D6839CA0A67F74D9DFB70922EBD595A9100D63CD
ENV SBCL_DOWNLOADS_BASE_URL="https://downloads.sourceforge.net/project/sbcl/sbcl"
ENV SBCL_HASH_FILE=sbcl-${SBCL_VERSION}-crhodes.asc
ENV SBCL_HASH_URL=${SBCL_DOWNLOADS_BASE_URL}/${SBCL_VERSION}/${SBCL_HASH_FILE}
ENV SBCL_SRC_TBZ2_FILE=sbcl-${SBCL_VERSION}-source.tar.bz2
ENV SBCL_SRC_TBZ2_URL=${SBCL_DOWNLOADS_BASE_URL}/${SBCL_VERSION}/${SBCL_SRC_TBZ2_FILE}
WORKDIR /sbcl-build
# Install buildtime dependencies and SBCL from Arch
RUN pacman -Syu --noconfirm base-devel sbcl
# Fetch encrypted hash file
RUN gpg --batch --recv-keys ${SBCL_SIGNING_KEY} \
&& curl -fsSL -o ${SBCL_HASH_FILE} ${SBCL_HASH_URL} \
&& gpg --batch --verify ${SBCL_HASH_FILE}
# Fetch source tarball
RUN curl -fsSL -o ${SBCL_SRC_TBZ2_FILE} ${SBCL_SRC_TBZ2_URL} \
&& bunzip2 ${SBCL_SRC_TBZ2_FILE} \
&& (gpg --batch --decrypt ${SBCL_HASH_FILE} | grep ${SBCL_SRC_TBZ2_FILE%.bz2} | tee src-checksum) \
&& sha256sum --check src-checksum
# Extract source tarball
RUN tar -xf ${SBCL_SRC_TBZ2_FILE%.bz2}
WORKDIR /sbcl-build/sbcl-${SBCL_VERSION}
# Build SBCL
RUN source /etc/makepkg.conf \
&& export CFLAGS="${CFLAGS} -D_GNU_SOURCE -fno-omit-frame-pointer" \
&& export LINKFLAGS="${LDFLAGS}" \
&& unset LDFLAGS \
&& unset MAKEFLAGS \
&& sh make.sh --prefix=/usr/local --fancy
# Install SBCL
RUN sh install.sh
FROM sbcl-builder AS sbcl-test
SHELL ["/bin/bash", "-x", "-o", "pipefail", "-c"]
# Install testing dependencies
RUN pacman -Syu --noconfirm strace
WORKDIR /sbcl-build/sbcl-${SBCL_VERSION}/tests
RUN sh run-tests.sh
FROM base AS sbcl-ready
SHELL ["/bin/bash", "-x", "-o", "pipefail", "-c"]
ENV QUICKLISP_SIGNING_KEY=D7A3489DDEFE32B7D0E7CC61307965AB028B5FF7
COPY --from=sbcl-builder /usr/local /usr/local
RUN pacman -Syu --noconfirm rlwrap
# Download Quicklisp
RUN curl -fsSL -o quicklisp.lisp "https://beta.quicklisp.org/quicklisp.lisp" \
&& curl -fsSL -o quicklisp.lisp.asc "https://beta.quicklisp.org/quicklisp.lisp.asc" \
&& gpg --batch --recv-keys ${QUICKLISP_SIGNING_KEY} \
&& gpg --batch --verify quicklisp.lisp.asc quicklisp.lisp \
&& rm quicklisp.lisp.asc
# Install Quicklisp
RUN /usr/local/bin/sbcl --non-interactive \
--load quicklisp.lisp \
--eval '(quicklisp-quickstart:install)' \
--eval '(ql-util:without-prompting (ql:add-to-init-file))' \
&& rm quicklisp.lisp
ENTRYPOINT ["rlwrap", "/usr/local/bin/sbcl", "--noinform"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment