Skip to content

Commit 2ef1916

Browse files
authored
Merge pull request #64 from AlistairB/add-slim
Add slim Debian variants
2 parents 2ca197d + c6f4e49 commit 2ef1916

File tree

7 files changed

+475
-7
lines changed

7 files changed

+475
-7
lines changed

.github/workflows/debian.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
- master
77
paths:
88
- '**/buster/Dockerfile'
9+
- '**/buster-slim/Dockerfile'
910
- '.github/workflows/debian.yml'
1011

1112
jobs:
@@ -17,7 +18,7 @@ jobs:
1718
fail-fast: false
1819
matrix:
1920
ghc: ['8.10.7', '9.0.2', '9.2.1']
20-
deb: ['buster']
21+
deb: ['buster', 'buster-slim']
2122
include:
2223
- ghc: '8.10.7'
2324
ghc_minor: '8.10'
@@ -52,6 +53,7 @@ jobs:
5253
fail-fast: false
5354
matrix:
5455
ghc: ['8.10.7', '9.0.2', '9.2.1']
56+
# uraimo/run-on-arch-action does not support debian slim variants
5557
deb: ['buster']
5658
arch: ['aarch64']
5759
include:

8.10/buster-slim/Dockerfile

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
FROM debian:buster-slim
2+
3+
ENV LANG C.UTF-8
4+
5+
# common haskell + stack dependencies
6+
RUN apt-get update && \
7+
apt-get install -y --no-install-recommends \
8+
ca-certificates \
9+
curl \
10+
dpkg-dev \
11+
git \
12+
gcc \
13+
gnupg \
14+
g++ \
15+
libc6-dev \
16+
libffi-dev \
17+
libgmp-dev \
18+
libnuma-dev \
19+
libsqlite3-dev \
20+
libtinfo-dev \
21+
make \
22+
netbase \
23+
openssh-client \
24+
xz-utils \
25+
zlib1g-dev && \
26+
rm -rf /var/lib/apt/lists/*
27+
28+
ARG CABAL_INSTALL=3.6.2.0
29+
ARG CABAL_INSTALL_RELEASE_KEY=A970DF3AC3B9709706D74544B3D9F94B8DCAE210
30+
31+
RUN set -eux; \
32+
cd /tmp; \
33+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
34+
CABAL_INSTALL_TAR="cabal-install-$CABAL_INSTALL-$ARCH-linux-deb10.tar.xz"; \
35+
CABAL_INSTALL_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/$CABAL_INSTALL_TAR"; \
36+
CABAL_INSTALL_SHA256SUMS_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS"; \
37+
# sha256 from https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS
38+
case "$ARCH" in \
39+
'aarch64') \
40+
CABAL_INSTALL_SHA256='d9acee67d4308bc5c22d27bee034d388cc4192a25deff9e7e491e2396572b030'; \
41+
;; \
42+
'x86_64') \
43+
CABAL_INSTALL_SHA256='4759b56e9257e02f29fa374a6b25d6cb2f9d80c7e3a55d4f678a8e570925641c'; \
44+
;; \
45+
*) echo >&2 "error: unsupported architecture '$ARCH'"; exit 1 ;; \
46+
esac; \
47+
curl -fSL "$CABAL_INSTALL_URL" -o cabal-install.tar.gz; \
48+
echo "$CABAL_INSTALL_SHA256 cabal-install.tar.gz" | sha256sum --strict --check; \
49+
\
50+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL"; \
51+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL.sig"; \
52+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
53+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$CABAL_INSTALL_RELEASE_KEY"; \
54+
gpg --batch --verify SHA256SUMS.sig SHA256SUMS; \
55+
# confirm we are verying SHA256SUMS that matches the release + sha256
56+
grep "$CABAL_INSTALL_SHA256 $CABAL_INSTALL_TAR" SHA256SUMS; \
57+
gpgconf --kill all; \
58+
\
59+
tar -xf cabal-install.tar.gz -C /usr/local/bin; \
60+
\
61+
rm -rf /tmp/*; \
62+
\
63+
cabal --version
64+
65+
# GHC 8.10 requires LLVM version 9 - 12 on aarch64
66+
ARG LLVM_VERSION=12
67+
ARG LLVM_KEY=6084F3CF814B57C1CF12EFD515CF4D18AF4F7421
68+
69+
RUN set -eux; \
70+
if [ "$(dpkg-architecture --query DEB_BUILD_GNU_CPU)" = "aarch64" ]; then \
71+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
72+
mkdir -p /usr/local/share/keyrings/; \
73+
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$LLVM_KEY"; \
74+
gpg --batch --armor --export "$LLVM_KEY" > /usr/local/share/keyrings/apt.llvm.org.gpg.asc; \
75+
echo "deb [ signed-by=/usr/local/share/keyrings/apt.llvm.org.gpg.asc ] http://apt.llvm.org/buster/ llvm-toolchain-buster-$LLVM_VERSION main" > /etc/apt/sources.list.d/llvm.list; \
76+
apt-get update; \
77+
apt-get install -y --no-install-recommends llvm-$LLVM_VERSION; \
78+
gpgconf --kill all; \
79+
rm -rf "$GNUPGHOME" /var/lib/apt/lists/*; \
80+
fi
81+
82+
ARG GHC=8.10.7
83+
ARG GHC_RELEASE_KEY=88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4
84+
85+
RUN set -eux; \
86+
cd /tmp; \
87+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
88+
GHC_URL="https://downloads.haskell.org/~ghc/$GHC/ghc-$GHC-$ARCH-deb10-linux.tar.xz"; \
89+
# sha256 from https://downloads.haskell.org/~ghc/$GHC/SHA256SUMS
90+
case "$ARCH" in \
91+
'aarch64') \
92+
GHC_SHA256='fad2417f9b295233bf8ade79c0e6140896359e87be46cb61cd1d35863d9d0e55'; \
93+
;; \
94+
'x86_64') \
95+
GHC_SHA256='a13719bca87a0d3ac0c7d4157a4e60887009a7f1a8dbe95c4759ec413e086d30'; \
96+
;; \
97+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
98+
esac; \
99+
curl -sSL "$GHC_URL" -o ghc.tar.xz; \
100+
echo "$GHC_SHA256 ghc.tar.xz" | sha256sum --strict --check; \
101+
\
102+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
103+
curl -sSL "$GHC_URL.sig" -o ghc.tar.xz.sig; \
104+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$GHC_RELEASE_KEY"; \
105+
gpg --batch --verify ghc.tar.xz.sig ghc.tar.xz; \
106+
gpgconf --kill all; \
107+
\
108+
tar xf ghc.tar.xz; \
109+
cd "ghc-$GHC"; \
110+
./configure --prefix "/opt/ghc/$GHC"; \
111+
make install; \
112+
# remove profiling support to save space
113+
find "/opt/ghc/$GHC/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete; \
114+
# remove some docs
115+
rm -rf "/opt/ghc/$GHC/share/"; \
116+
\
117+
rm -rf /tmp/*; \
118+
\
119+
"/opt/ghc/$GHC/bin/ghc" --version
120+
121+
ARG STACK=2.7.3
122+
ARG STACK_RELEASE_KEY=C5705533DA4F78D8664B5DC0575159689BEFB442
123+
124+
RUN set -eux; \
125+
cd /tmp; \
126+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
127+
INSTALL_STACK="true"; \
128+
STACK_URL="https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz"; \
129+
# sha256 from https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz.sha256
130+
case "$ARCH" in \
131+
'aarch64') \
132+
# Stack does not officially support ARM64, nor do the binaries that exist work.
133+
# Hitting https://github.com/commercialhaskell/stack/issues/2103#issuecomment-972329065 when trying to use
134+
# stack-2.7.1-linux-aarch64.tar.gz
135+
INSTALL_STACK="false"; \
136+
;; \
137+
'x86_64') \
138+
STACK_SHA256='a6c090555fa1c64aa61c29aa4449765a51d79e870cf759cde192937cd614e72b'; \
139+
;; \
140+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
141+
esac; \
142+
if [ "$INSTALL_STACK" = "true" ]; then \
143+
curl -sSL "$STACK_URL" -o stack.tar.gz; \
144+
echo "$STACK_SHA256 stack.tar.gz" | sha256sum --strict --check; \
145+
\
146+
curl -sSL "$STACK_URL.asc" -o stack.tar.gz.asc; \
147+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
148+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$STACK_RELEASE_KEY"; \
149+
gpg --batch --verify stack.tar.gz.asc stack.tar.gz; \
150+
gpgconf --kill all; \
151+
\
152+
tar -xf stack.tar.gz -C /usr/local/bin --strip-components=1 "stack-$STACK-linux-$ARCH/stack"; \
153+
stack config set system-ghc --global true; \
154+
stack config set install-ghc --global false; \
155+
\
156+
rm -rf /tmp/*; \
157+
\
158+
stack --version; \
159+
fi
160+
161+
ENV PATH /root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH
162+
163+
CMD ["ghci"]

8.10/buster/Dockerfile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,6 @@ RUN set -eux; \
109109
cd "ghc-$GHC"; \
110110
./configure --prefix "/opt/ghc/$GHC"; \
111111
make install; \
112-
# remove profiling support to save space
113-
find "/opt/ghc/$GHC/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete; \
114112
# remove some docs
115113
rm -rf "/opt/ghc/$GHC/share/"; \
116114
\

9.0/buster-slim/Dockerfile

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
FROM debian:buster-slim
2+
3+
ENV LANG C.UTF-8
4+
5+
# common haskell + stack dependencies
6+
RUN apt-get update && \
7+
apt-get install -y --no-install-recommends \
8+
ca-certificates \
9+
curl \
10+
dpkg-dev \
11+
git \
12+
gcc \
13+
gnupg \
14+
g++ \
15+
libc6-dev \
16+
libffi-dev \
17+
libgmp-dev \
18+
libnuma-dev \
19+
libsqlite3-dev \
20+
libtinfo-dev \
21+
make \
22+
netbase \
23+
openssh-client \
24+
xz-utils \
25+
zlib1g-dev && \
26+
rm -rf /var/lib/apt/lists/*
27+
28+
ARG CABAL_INSTALL=3.6.2.0
29+
ARG CABAL_INSTALL_RELEASE_KEY=A970DF3AC3B9709706D74544B3D9F94B8DCAE210
30+
31+
RUN set -eux; \
32+
cd /tmp; \
33+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
34+
CABAL_INSTALL_TAR="cabal-install-$CABAL_INSTALL-$ARCH-linux-deb10.tar.xz"; \
35+
CABAL_INSTALL_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/$CABAL_INSTALL_TAR"; \
36+
CABAL_INSTALL_SHA256SUMS_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS"; \
37+
# sha256 from https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS
38+
case "$ARCH" in \
39+
'aarch64') \
40+
CABAL_INSTALL_SHA256='d9acee67d4308bc5c22d27bee034d388cc4192a25deff9e7e491e2396572b030'; \
41+
;; \
42+
'x86_64') \
43+
CABAL_INSTALL_SHA256='4759b56e9257e02f29fa374a6b25d6cb2f9d80c7e3a55d4f678a8e570925641c'; \
44+
;; \
45+
*) echo >&2 "error: unsupported architecture '$ARCH'"; exit 1 ;; \
46+
esac; \
47+
curl -fSL "$CABAL_INSTALL_URL" -o cabal-install.tar.gz; \
48+
echo "$CABAL_INSTALL_SHA256 cabal-install.tar.gz" | sha256sum --strict --check; \
49+
\
50+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL"; \
51+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL.sig"; \
52+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
53+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$CABAL_INSTALL_RELEASE_KEY"; \
54+
gpg --batch --verify SHA256SUMS.sig SHA256SUMS; \
55+
# confirm we are verying SHA256SUMS that matches the release + sha256
56+
grep "$CABAL_INSTALL_SHA256 $CABAL_INSTALL_TAR" SHA256SUMS; \
57+
gpgconf --kill all; \
58+
\
59+
tar -xf cabal-install.tar.gz -C /usr/local/bin; \
60+
\
61+
rm -rf /tmp/*; \
62+
\
63+
cabal --version
64+
65+
# GHC 9.0 requires LLVM version 9 - 12 on aarch64
66+
ARG LLVM_VERSION=12
67+
ARG LLVM_KEY=6084F3CF814B57C1CF12EFD515CF4D18AF4F7421
68+
69+
RUN set -eux; \
70+
if [ "$(dpkg-architecture --query DEB_BUILD_GNU_CPU)" = "aarch64" ]; then \
71+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
72+
mkdir -p /usr/local/share/keyrings/; \
73+
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$LLVM_KEY"; \
74+
gpg --batch --armor --export "$LLVM_KEY" > /usr/local/share/keyrings/apt.llvm.org.gpg.asc; \
75+
echo "deb [ signed-by=/usr/local/share/keyrings/apt.llvm.org.gpg.asc ] http://apt.llvm.org/buster/ llvm-toolchain-buster-$LLVM_VERSION main" > /etc/apt/sources.list.d/llvm.list; \
76+
apt-get update; \
77+
apt-get install -y --no-install-recommends llvm-$LLVM_VERSION; \
78+
gpgconf --kill all; \
79+
rm -rf "$GNUPGHOME" /var/lib/apt/lists/*; \
80+
fi
81+
82+
ARG GHC=9.0.2
83+
ARG GHC_RELEASE_KEY=88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4
84+
85+
RUN set -eux; \
86+
cd /tmp; \
87+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
88+
GHC_URL="https://downloads.haskell.org/~ghc/$GHC/ghc-$GHC-$ARCH-deb10-linux.tar.xz"; \
89+
# sha256 from https://downloads.haskell.org/~ghc/$GHC/SHA256SUMS
90+
case "$ARCH" in \
91+
'aarch64') \
92+
GHC_SHA256='cb016344c70a872738a24af60bd15d3b18749087b9905c1b3f1b1549dc01f46d'; \
93+
;; \
94+
'x86_64') \
95+
GHC_SHA256='5d0b9414b10cfb918453bcd01c5ea7a1824fe95948b08498d6780f20ba247afc'; \
96+
;; \
97+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
98+
esac; \
99+
curl -sSL "$GHC_URL" -o ghc.tar.xz; \
100+
echo "$GHC_SHA256 ghc.tar.xz" | sha256sum --strict --check; \
101+
\
102+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
103+
curl -sSL "$GHC_URL.sig" -o ghc.tar.xz.sig; \
104+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$GHC_RELEASE_KEY"; \
105+
gpg --batch --verify ghc.tar.xz.sig ghc.tar.xz; \
106+
gpgconf --kill all; \
107+
\
108+
tar xf ghc.tar.xz; \
109+
cd "ghc-$GHC"; \
110+
./configure --prefix "/opt/ghc/$GHC"; \
111+
make install; \
112+
# remove profiling support to save space
113+
find "/opt/ghc/$GHC/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete; \
114+
# remove some docs
115+
rm -rf "/opt/ghc/$GHC/share/"; \
116+
\
117+
rm -rf /tmp/*; \
118+
\
119+
"/opt/ghc/$GHC/bin/ghc" --version
120+
121+
ARG STACK=2.7.3
122+
ARG STACK_RELEASE_KEY=C5705533DA4F78D8664B5DC0575159689BEFB442
123+
124+
RUN set -eux; \
125+
cd /tmp; \
126+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
127+
INSTALL_STACK="true"; \
128+
STACK_URL="https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz"; \
129+
# sha256 from https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz.sha256
130+
case "$ARCH" in \
131+
'aarch64') \
132+
# Stack does not officially support ARM64, nor do the binaries that exist work.
133+
# Hitting https://github.com/commercialhaskell/stack/issues/2103#issuecomment-972329065 when trying to use
134+
# stack-2.7.1-linux-aarch64.tar.gz
135+
INSTALL_STACK="false"; \
136+
;; \
137+
'x86_64') \
138+
STACK_SHA256='a6c090555fa1c64aa61c29aa4449765a51d79e870cf759cde192937cd614e72b'; \
139+
;; \
140+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
141+
esac; \
142+
if [ "$INSTALL_STACK" = "true" ]; then \
143+
curl -sSL "$STACK_URL" -o stack.tar.gz; \
144+
echo "$STACK_SHA256 stack.tar.gz" | sha256sum --strict --check; \
145+
\
146+
curl -sSL "$STACK_URL.asc" -o stack.tar.gz.asc; \
147+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
148+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$STACK_RELEASE_KEY"; \
149+
gpg --batch --verify stack.tar.gz.asc stack.tar.gz; \
150+
gpgconf --kill all; \
151+
\
152+
tar -xf stack.tar.gz -C /usr/local/bin --strip-components=1 "stack-$STACK-linux-$ARCH/stack"; \
153+
stack config set system-ghc --global true; \
154+
stack config set install-ghc --global false; \
155+
\
156+
rm -rf /tmp/*; \
157+
\
158+
stack --version; \
159+
fi
160+
161+
ENV PATH /root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH
162+
163+
CMD ["ghci"]

9.0/buster/Dockerfile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,6 @@ RUN set -eux; \
109109
cd "ghc-$GHC"; \
110110
./configure --prefix "/opt/ghc/$GHC"; \
111111
make install; \
112-
# remove profiling support to save space
113-
find "/opt/ghc/$GHC/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete; \
114112
# remove some docs
115113
rm -rf "/opt/ghc/$GHC/share/"; \
116114
\

0 commit comments

Comments
 (0)