|  | 
|  | 1 | +FROM debian:bookworm | 
|  | 2 | + | 
|  | 3 | +ENV LANG=C.UTF-8 | 
|  | 4 | + | 
|  | 5 | +# common haskell + stack dependencies | 
|  | 6 | +RUN <<EOT | 
|  | 7 | +    apt-get update && \ | 
|  | 8 | +    apt-get install -y --no-install-recommends \ | 
|  | 9 | +        ca-certificates \ | 
|  | 10 | +        curl \ | 
|  | 11 | +        dpkg-dev \ | 
|  | 12 | +        git \ | 
|  | 13 | +        gcc \ | 
|  | 14 | +        gnupg \ | 
|  | 15 | +        g++ \ | 
|  | 16 | +        libc6-dev \ | 
|  | 17 | +        libffi-dev \ | 
|  | 18 | +        libgmp-dev \ | 
|  | 19 | +        libnuma-dev \ | 
|  | 20 | +        libtinfo-dev \ | 
|  | 21 | +        make \ | 
|  | 22 | +        netbase \ | 
|  | 23 | +        xz-utils \ | 
|  | 24 | +        zlib1g-dev && \ | 
|  | 25 | +    rm -rf /var/lib/apt/lists/* | 
|  | 26 | +EOT | 
|  | 27 | + | 
|  | 28 | +ARG STACK=3.3.1 | 
|  | 29 | +ARG STACK_RELEASE_KEY=C5705533DA4F78D8664B5DC0575159689BEFB442 | 
|  | 30 | + | 
|  | 31 | +RUN <<EOT | 
|  | 32 | +    set -eux | 
|  | 33 | +    cd /tmp | 
|  | 34 | +    ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)" | 
|  | 35 | +    STACK_URL="https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz" | 
|  | 36 | +    # sha256 from https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz.sha256 | 
|  | 37 | +    case "$ARCH" in  | 
|  | 38 | +        'aarch64')  | 
|  | 39 | +            STACK_SHA256='bdd618ea5a9c921417727011f2ecd78987dffa5cee5e741108baf65a9b5b58ab' | 
|  | 40 | +            ;; | 
|  | 41 | +        'x86_64')  | 
|  | 42 | +            STACK_SHA256='88d7e517342c125b0a098d9d578fe53e590618ae4b2427283a27408a1ebd06d8' | 
|  | 43 | +            ;; | 
|  | 44 | +        *) echo >&2 "error: unsupported architecture '$ARCH'" exit 1 ; | 
|  | 45 | +    esac | 
|  | 46 | +    curl -sSL "$STACK_URL" -o stack.tar.gz | 
|  | 47 | +    echo "$STACK_SHA256 stack.tar.gz" | sha256sum --strict --check | 
|  | 48 | +     | 
|  | 49 | +    curl -sSL "$STACK_URL.asc" -o stack.tar.gz.asc | 
|  | 50 | +    GNUPGHOME="$(mktemp -d)" | 
|  | 51 | +    export GNUPGHOME | 
|  | 52 | +    gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$STACK_RELEASE_KEY" | 
|  | 53 | +    gpg --batch --verify stack.tar.gz.asc stack.tar.gz | 
|  | 54 | +    gpgconf --kill all | 
|  | 55 | +     | 
|  | 56 | +    tar -xf stack.tar.gz -C /usr/local/bin --strip-components=1 "stack-$STACK-linux-$ARCH/stack" | 
|  | 57 | +    stack config set system-ghc --global true | 
|  | 58 | +    stack config set install-ghc --global false | 
|  | 59 | +     | 
|  | 60 | +    rm -rf /tmp/* | 
|  | 61 | +     | 
|  | 62 | +    stack --version; | 
|  | 63 | +EOT | 
|  | 64 | + | 
|  | 65 | +ARG CABAL_INSTALL=3.14.1.1 | 
|  | 66 | +ARG CABAL_INSTALL_RELEASE_KEY=EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF | 
|  | 67 | + | 
|  | 68 | +RUN <<EOT | 
|  | 69 | +    set -eux | 
|  | 70 | +    cd /tmp | 
|  | 71 | +    ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)" | 
|  | 72 | +    CABAL_INSTALL_TAR="cabal-install-$CABAL_INSTALL-$ARCH-linux-deb12.tar.xz" | 
|  | 73 | +    CABAL_INSTALL_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/$CABAL_INSTALL_TAR" | 
|  | 74 | +    CABAL_INSTALL_SHA256SUMS_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS" | 
|  | 75 | +    # sha256 from https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS | 
|  | 76 | +    case "$ARCH" in | 
|  | 77 | +        'aarch64') | 
|  | 78 | +            CABAL_INSTALL_SHA256='f763fb2af2bc1ff174b7361a7d51109a585954f87a0e14f86d144f3bce28f7a9' | 
|  | 79 | +            ;; | 
|  | 80 | +        'x86_64') | 
|  | 81 | +            CABAL_INSTALL_SHA256='73a463306c771e18ca22c0a9469176ffab0138ec5925adb5364ef47174e1adc5' | 
|  | 82 | +            ;; | 
|  | 83 | +        *) echo >&2 "error: unsupported architecture '$ARCH'"; exit 1 ;; | 
|  | 84 | +    esac | 
|  | 85 | +    curl -fSL "$CABAL_INSTALL_URL" -o cabal-install.tar.gz | 
|  | 86 | +    echo "$CABAL_INSTALL_SHA256 cabal-install.tar.gz" | sha256sum --strict --check | 
|  | 87 | + | 
|  | 88 | +    curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL" | 
|  | 89 | +    curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL.sig" | 
|  | 90 | +    GNUPGHOME="$(mktemp -d)"; export GNUPGHOME | 
|  | 91 | +    gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$CABAL_INSTALL_RELEASE_KEY" | 
|  | 92 | +    gpg --batch --verify SHA256SUMS.sig SHA256SUMS | 
|  | 93 | +    # confirm we are verifying SHA256SUMS that matches the release + sha256 | 
|  | 94 | +    grep "$CABAL_INSTALL_SHA256  $CABAL_INSTALL_TAR" SHA256SUMS | 
|  | 95 | +    gpgconf --kill all; | 
|  | 96 | + | 
|  | 97 | +    tar -xf cabal-install.tar.gz -C /usr/local/bin | 
|  | 98 | + | 
|  | 99 | +    rm -rf /tmp/* | 
|  | 100 | + | 
|  | 101 | +    cabal --version | 
|  | 102 | +EOT | 
|  | 103 | + | 
|  | 104 | +ARG GHC='9.10.2' | 
|  | 105 | +ARG GHC_RELEASE_KEY='88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4' | 
|  | 106 | + | 
|  | 107 | +RUN <<EOT | 
|  | 108 | +    set -eux | 
|  | 109 | +    cd /tmp | 
|  | 110 | +    ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)" | 
|  | 111 | +    GHC_URL="https://downloads.haskell.org/~ghc/$GHC/ghc-$GHC-$ARCH-deb12-linux.tar.xz" | 
|  | 112 | +    # sha256 from https://downloads.haskell.org/~ghc/$GHC/SHA256SUMS | 
|  | 113 | +    case "$ARCH" in | 
|  | 114 | +        'aarch64') | 
|  | 115 | +            GHC_SHA256='0188ca098abdaf71eb0804d0f35311f405da489137d8d438bfaa43b8d1e3f1b0' | 
|  | 116 | +            GHC_URL='https://downloads.haskell.org/~ghc/9.10.2/ghc-9.10.2-aarch64-deb11-linux.tar.xz' | 
|  | 117 | +            ;; | 
|  | 118 | +        'x86_64') | 
|  | 119 | +            GHC_SHA256='71d025743f2eb4d3af95d4dd94a22c093c2814d78ab95dd0e12bb6751b1c7d4e' | 
|  | 120 | +            ;; | 
|  | 121 | +        *) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; | 
|  | 122 | +    esac | 
|  | 123 | +    curl -sSL "$GHC_URL" -o ghc.tar.xz | 
|  | 124 | +    echo "$GHC_SHA256 ghc.tar.xz" | sha256sum --strict --check | 
|  | 125 | + | 
|  | 126 | +    GNUPGHOME="$(mktemp -d)"; export GNUPGHOME | 
|  | 127 | +    curl -sSL "$GHC_URL.sig" -o ghc.tar.xz.sig | 
|  | 128 | +    gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$GHC_RELEASE_KEY" | 
|  | 129 | +    gpg --batch --verify ghc.tar.xz.sig ghc.tar.xz | 
|  | 130 | +    gpgconf --kill all | 
|  | 131 | + | 
|  | 132 | +    tar xf ghc.tar.xz | 
|  | 133 | +    cd "ghc-$GHC-$ARCH-unknown-linux" | 
|  | 134 | +    ./configure --prefix "/opt/ghc/$GHC" | 
|  | 135 | +    make install | 
|  | 136 | + | 
|  | 137 | +    rm -rf /tmp/* | 
|  | 138 | + | 
|  | 139 | +    "/opt/ghc/$GHC/bin/ghc" --version | 
|  | 140 | +EOT | 
|  | 141 | + | 
|  | 142 | +ENV PATH=/root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH | 
|  | 143 | + | 
|  | 144 | +CMD ["ghci"] | 
0 commit comments