-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathDockerfile.multiarch
More file actions
153 lines (115 loc) · 4.23 KB
/
Dockerfile.multiarch
File metadata and controls
153 lines (115 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
ARG OS=
ARG ARCH=
ARG TOOLCHAIN=
ARG TOOLCHAIN_PREFIX=
ARG AWS_LC_VERSION=
ARG AWS_LC_SHA256=
ARG PCRE2_VERSION=
ARG PCRE2_SHA256=
ARG HAPROXY_MAJOR=
ARG HAPROXY_VERSION=
ARG HAPROXY_SHA256=
ARG LUA_VERSION=
ARG LUA_MD5=
# Build using cross-compilation, using $TOOLCHAIN to target $ARCH
FROM $OS as builder
ARG ARCH
ARG TOOLCHAIN
ARG ARCH_FLAGS
RUN dpkg --add-architecture "${ARCH}" && \
apt-get update && \
apt-get install --no-install-recommends -y \
gcc-12-${TOOLCHAIN} g++-12-${TOOLCHAIN} libc6-dev-${ARCH}-cross make file libc6-dev perl libtext-template-perl \
libreadline-dev curl ca-certificates libcrypt-dev:${ARCH} gcc-12 g++-12 binutils-${TOOLCHAIN} binutils \
cmake ninja-build golang
### AWS-LC
FROM builder as awslc
ARG ARCH
ARG TOOLCHAIN
ARG TOOLCHAIN_PREFIX
ARG ARCH_FLAGS
ARG AWS_LC_VERSION
ARG AWS_LC_SHA256
RUN curl -OJL https://github.com/aws/aws-lc/archive/refs/tags/${AWS_LC_VERSION}.tar.gz && \
echo ${AWS_LC_SHA256} aws-lc-${AWS_LC_VERSION#v}.tar.gz | sha256sum -c && \
tar zxvf aws-lc-${AWS_LC_VERSION#v}.tar.gz && \
cd aws-lc-${AWS_LC_VERSION#v} && \
if [ "${ARCH}" = "amd64" ]; then CMAKE_ARCH="x86_64"; elif [ "${ARCH}" = "arm64" ]; then CMAKE_ARCH="aarch64"; else CMAKE_ARCH="${ARCH}"; fi && \
cmake -GNinja \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=${CMAKE_ARCH} \
-DCMAKE_C_COMPILER=/usr/bin/${TOOLCHAIN_PREFIX}-gcc-12 \
-DCMAKE_CXX_COMPILER=/usr/bin/${TOOLCHAIN_PREFIX}-g++-12 \
-DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=/tmp/awslc \
. && \
ninja && \
ninja install
### PCRE2
FROM builder as pcre2
ARG ARCH
ARG TOOLCHAIN
ARG TOOLCHAIN_PREFIX
ARG ARCH_FLAGS
ARG PCRE2_VERSION
ARG PCRE2_SHA256
RUN curl -OJL "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-${PCRE2_VERSION}/pcre2-${PCRE2_VERSION}.tar.gz" && \
echo ${PCRE2_SHA256} pcre2-${PCRE2_VERSION}.tar.gz | sha256sum -c && \
tar zxvf pcre2-${PCRE2_VERSION}.tar.gz && \
cd pcre2-${PCRE2_VERSION} && \
CC=/usr/bin/${TOOLCHAIN_PREFIX}-gcc-12 CFLAGS="-O3 -march=${ARCH_FLAGS} -g" \
./configure --prefix=/tmp/pcre2 --disable-shared --enable-jit --host=${TOOLCHAIN} && \
make install
# Lua
FROM builder as lua
ARG ARCH
ARG TOOLCHAIN
ARG TOOLCHAIN_PREFIX
ARG ARCH_FLAGS
ARG LUA_VERSION
ARG LUA_MD5
RUN curl -OJL "http://www.lua.org/ftp/lua-${LUA_VERSION}.tar.gz" && \
echo "${LUA_MD5} lua-${LUA_VERSION}.tar.gz" | md5sum -c && \
tar zxf lua-${LUA_VERSION}.tar.gz && \
cd lua-${LUA_VERSION} && \
make CC="/usr/bin/${TOOLCHAIN_PREFIX}-gcc-12" \
MYCFLAGS="-march=${ARCH_FLAGS} -g" \
AR="/usr/bin/${TOOLCHAIN_PREFIX}-ar rcu" \
RANLIB=/usr/bin/${TOOLCHAIN_PREFIX}-ranlib && \
make install INSTALL_TOP=/tmp/lua
### HAProxy
FROM builder as haproxy
COPY --from=awslc /tmp/awslc /tmp/awslc
COPY --from=pcre2 /tmp/pcre2 /tmp/pcre2
COPY --from=lua /tmp/lua /tmp/lua
ARG ARCH
ARG TOOLCHAIN
ARG TOOLCHAIN_PREFIX
ARG ARCH_FLAGS
ARG HAPROXY_MAJOR
ARG HAPROXY_VERSION
ARG HAPROXY_SHA256
RUN curl -OJL "http://www.haproxy.org/download/${HAPROXY_MAJOR}/src/haproxy-${HAPROXY_VERSION}.tar.gz" && \
echo "${HAPROXY_SHA256} haproxy-${HAPROXY_VERSION}.tar.gz" | sha256sum -c && \
tar zxvf haproxy-${HAPROXY_VERSION}.tar.gz && \
make -C haproxy-${HAPROXY_VERSION} \
TARGET=linux-glibc \
ARCH_FLAGS="-march=${ARCH_FLAGS}" \
CC=/usr/bin/${TOOLCHAIN_PREFIX}-gcc-12 \
USE_SLZ=1 \
USE_STATIC_PCRE2=1 USE_PCRE2_JIT=1 PCRE2DIR=/tmp/pcre2 \
USE_OPENSSL=1 SSL_INC=/tmp/awslc/include SSL_LIB=/tmp/awslc/lib \
USE_LUA=1 LUA_LIB=/tmp/lua/lib LUA_INC=/tmp/lua/include \
USE_PROMEX=1 \
DESTDIR=/tmp/haproxy PREFIX= \
all \
install-bin && \
mkdir -p /tmp/haproxy/etc/haproxy && \
cp -R haproxy-${HAPROXY_VERSION}/examples/errorfiles /tmp/haproxy/etc/haproxy/errors
# Switch to target platform
FROM --platform=linux/$ARCH $OS as runtime
RUN apt-get update && \
apt-get install --no-install-recommends -y curl ca-certificates
COPY --from=haproxy /tmp/haproxy /usr/local/
RUN rm -rf /var/lib/apt/lists/*
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]