Skip to content

Commit 2900889

Browse files
committed
Major changes for 3.x images:
- Start building with AWS-LC instead of OpenSSL - Stop shipping dataplaneapi v2 - Stop building dataplaneapi v3 and use prebuilt packages - Add 3.4 branch - Set 3.3 as base/default/stable branch
1 parent 7621298 commit 2900889

File tree

32 files changed

+1175
-274
lines changed

32 files changed

+1175
-274
lines changed

.github/workflows/docker_auto.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
env:
1414
DOCKER_PLATFORMS: linux/amd64,linux/arm/v7,linux/arm64
1515
DOCKER_IMAGE: haproxytech/haproxy-ubuntu
16-
STABLE_BRANCH: "3.2"
16+
STABLE_BRANCH: "3.3"
1717
steps:
1818
- name: Login to Docker Hub
1919
id: login_docker

.github/workflows/docker_manual.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ jobs:
99
packages: write
1010
strategy:
1111
matrix:
12-
branch: ["2.4", "2.6", "2.8", "3.0", "3.1", "3.2", "3.3"]
12+
branch: ["2.4", "2.6", "2.8", "3.0", "3.1", "3.2", "3.3", "3.4"]
1313
env:
1414
DOCKER_PLATFORMS: linux/amd64,linux/arm/v7,linux/arm64
1515
DOCKER_IMAGE: haproxytech/haproxy-ubuntu
16-
STABLE_BRANCH: "3.2"
16+
STABLE_BRANCH: "3.3"
1717
steps:
1818
- name: Login to Docker Hub
1919
id: login_docker

3.0/Dockerfile

Lines changed: 78 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,48 @@
1-
FROM golang:alpine AS builder
1+
FROM ubuntu:noble AS awslc-builder
22

3-
ENV DATAPLANE_MINOR 3.0.16
4-
ENV DATAPLANE_V2_MINOR 2.9.20
5-
ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi.git
6-
7-
RUN apk add --no-cache ca-certificates git make && \
8-
git clone "${DATAPLANE_URL}" "${GOPATH}/src/github.com/haproxytech/dataplaneapi" && \
9-
cd "${GOPATH}/src/github.com/haproxytech/dataplaneapi" && \
10-
git checkout "v${DATAPLANE_MINOR}" && \
11-
make build && cp build/dataplaneapi /dataplaneapi && \
12-
make clean && \
13-
git checkout "v${DATAPLANE_V2_MINOR}" && \
14-
make build && cp build/dataplaneapi /dataplaneapi-v2
3+
ENV AWSLC_URL https://github.com/aws/aws-lc.git
4+
ENV AWSLC_TAG v1.65.1
5+
6+
ENV DEBIAN_FRONTEND noninteractive
7+
8+
RUN apt-get update && \
9+
apt-get install -y --no-install-recommends build-essential ca-certificates git cmake ninja-build golang && \
10+
git clone --depth 1 --branch "${AWSLC_TAG}" "${AWSLC_URL}" /tmp/aws-lc && \
11+
mkdir /tmp/aws-lc/build && \
12+
cd /tmp/aws-lc/build && \
13+
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/opt/aws-lc -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. && \
14+
ninja install && \
15+
rm -rf /tmp/aws-lc
16+
17+
FROM ubuntu:noble AS hapce-builder
18+
19+
ENV HAPROXY_BRANCH 3.0
20+
ENV HAPROXY_MINOR 3.0.12
21+
ENV HAPROXY_SHA256 cd2bade59a7e2d61f2d62be7c6c4cfc0e2b3a90431023720cae7c43843b0570b
22+
ENV HAPROXY_SRC_URL http://www.haproxy.org/download
23+
24+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
25+
26+
ENV DEBIAN_FRONTEND noninteractive
27+
28+
RUN apt-get update && \
29+
apt-get install -y --no-install-recommends procps libssl3t64 zlib1g "libpcre2-*" liblua5.4-0 libatomic1 tar curl socat ca-certificates libjemalloc2 && \
30+
apt-get install -y --no-install-recommends gcc make libc6-dev libssl-dev libpcre3-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
31+
c_rehash && \
32+
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
33+
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
34+
mkdir -p /tmp/haproxy && \
35+
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
36+
rm -f haproxy.tar.gz && \
37+
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-glibc CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
38+
USE_TFO=1 USE_LINUX_TPROXY=1 USE_LUA=1 USE_GETADDRINFO=1 \
39+
USE_PROMEX=1 USE_SLZ=1 \
40+
USE_OPENSSL_AWSLC=1 USE_PTHREAD_EMULATION=1 \
41+
SSL_INC=/opt/aws-lc/include SSL_LIB=/opt/aws-lc/lib USE_QUIC=1 \
42+
LDFLAGS="-L/opt/aws-lc/lib -Wl,-rpath,/opt/aws-lc/lib" \
43+
ADDLIB=-ljemalloc \
44+
all && \
45+
make -C /tmp/haproxy TARGET=linux-glibc install-bin
1546

1647
FROM ubuntu:noble
1748

@@ -31,45 +62,54 @@ ENV HAPROXY_SRC_URL http://www.haproxy.org/download
3162
ENV HAPROXY_UID haproxy
3263
ENV HAPROXY_GID haproxy
3364

65+
ENV DATAPLANE_MINOR 3.0.16
66+
ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi/releases/download
67+
3468
ENV DEBIAN_FRONTEND noninteractive
3569

36-
COPY --from=builder /dataplaneapi /usr/local/bin/dataplaneapi
37-
COPY --from=builder /dataplaneapi-v2 /usr/local/bin/dataplaneapi-v2
70+
ARG TARGETPLATFORM
71+
72+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
73+
COPY --from=hapce-builder /usr/local/sbin/haproxy /usr/local/sbin/haproxy
74+
COPY --from=hapce-builder /tmp/haproxy/examples/errorfiles/ /usr/local/etc/haproxy/errors
3875

3976
RUN apt-get update && \
4077
apt-get install -y --no-install-recommends procps libssl3t64 zlib1g "libpcre2-*" liblua5.4-0 libatomic1 tar curl socat ca-certificates libjemalloc2 && \
41-
apt-get install -y --no-install-recommends gcc make libc6-dev libssl-dev libpcre3-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
42-
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
43-
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
78+
c_rehash && \
4479
groupadd "$HAPROXY_GID" && \
4580
useradd -g "$HAPROXY_GID" "$HAPROXY_UID" && \
46-
mkdir -p /tmp/haproxy && \
47-
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
48-
rm -f haproxy.tar.gz && \
49-
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-glibc CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
50-
USE_TFO=1 USE_LINUX_TPROXY=1 USE_LUA=1 USE_GETADDRINFO=1 \
51-
USE_PROMEX=1 USE_SLZ=1 \
52-
USE_OPENSSL=1 USE_PTHREAD_EMULATION=1 \
53-
USE_QUIC=1 USE_QUIC_OPENSSL_COMPAT=1 \
54-
ADDLIB=-ljemalloc \
55-
all && \
56-
make -C /tmp/haproxy TARGET=linux-glibc install-bin install-man && \
81+
chmod +x /usr/local/sbin/haproxy && \
5782
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy && \
5883
mkdir -p /var/lib/haproxy && \
5984
chown "$HAPROXY_UID:$HAPROXY_GID" /var/lib/haproxy && \
6085
mkdir -p /usr/local/etc/haproxy && \
6186
ln -s /usr/local/etc/haproxy /etc/haproxy && \
62-
cp -R /tmp/haproxy/examples/errorfiles /usr/local/etc/haproxy/errors && \
63-
rm -rf /tmp/haproxy && \
64-
apt-get purge -y --auto-remove gcc make libc6-dev libssl-dev libpcre2-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
65-
apt-get clean && \
66-
rm -rf /var/lib/apt/lists/* && \
87+
case "${TARGETPLATFORM}" in \
88+
"linux/arm64") API_ARCH=arm64 ;; \
89+
"linux/amd64") API_ARCH=x86_64 ;; \
90+
"linux/arm/v6") API_ARCH=arm ;; \
91+
"linux/arm/v7") API_ARCH=arm ;; \
92+
*) echo "ARG TARGETPLATFORM undeclared" >&2 && exit 1 ;; \
93+
esac && \
94+
curl -sfSL "${DATAPLANE_URL}/v${DATAPLANE_MINOR}/dataplaneapi_${DATAPLANE_MINOR}_linux_${API_ARCH}.tar.gz" -o dataplaneapi.tar.gz && \
95+
mkdir -p /tmp/dataplaneapi && \
96+
tar -xzf dataplaneapi.tar.gz -C /tmp/dataplaneapi && \
97+
rm -f dataplaneapi.tar.gz && \
98+
cp /tmp/dataplaneapi/dataplaneapi /usr/local/bin/dataplaneapi && \
6799
chmod +x /usr/local/bin/dataplaneapi && \
68-
ln -s /usr/local/bin/dataplaneapi /usr/bin/dataplaneapi && \
69-
chmod +x /usr/local/bin/dataplaneapi-v2 && \
70-
ln -s /usr/local/bin/dataplaneapi-v2 /usr/bin/dataplaneapi-v2 && \
71100
touch /usr/local/etc/haproxy/dataplaneapi.yml && \
72-
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml
101+
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml && \
102+
mkdir -p /usr/local/var/lib/dataplaneapi && \
103+
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/var/lib/dataplaneapi && \
104+
ln -s /usr/local/var/lib/dataplaneapi /var/lib/dataplaneapi && \
105+
rm -rf /tmp/dataplaneapi && \
106+
apt-get clean && \
107+
rm -rf /var/lib/apt/lists/* && \
108+
echo "/opt/aws-lc/lib" > /etc/ld.so.conf.d/awslc.conf && \
109+
mkdir -p /opt/aws-lc/ssl && \
110+
rm -rf /opt/aws-lc/ssl/certs && \
111+
ln -s /etc/ssl/certs /opt/aws-lc/ssl/certs && \
112+
ldconfig
73113

74114
COPY haproxy.cfg /usr/local/etc/haproxy
75115
COPY docker-entrypoint.sh /

3.0/Dockerfile.api

Lines changed: 68 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,49 @@
1+
FROM ubuntu:noble AS awslc-builder
2+
3+
ENV AWSLC_URL https://github.com/aws/aws-lc.git
4+
ENV AWSLC_TAG v1.65.1
5+
6+
ENV DEBIAN_FRONTEND noninteractive
7+
8+
RUN apt-get update && \
9+
apt-get install -y --no-install-recommends build-essential ca-certificates git cmake ninja-build golang && \
10+
git clone --depth 1 --branch "${AWSLC_TAG}" "${AWSLC_URL}" /tmp/aws-lc && \
11+
mkdir /tmp/aws-lc/build && \
12+
cd /tmp/aws-lc/build && \
13+
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/opt/aws-lc -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. && \
14+
ninja install && \
15+
rm -rf /tmp/aws-lc
16+
17+
FROM ubuntu:noble AS hapce-builder
18+
19+
ENV HAPROXY_BRANCH 3.0
20+
ENV HAPROXY_MINOR 3.0.12
21+
ENV HAPROXY_SHA256 cd2bade59a7e2d61f2d62be7c6c4cfc0e2b3a90431023720cae7c43843b0570b
22+
ENV HAPROXY_SRC_URL http://www.haproxy.org/download
23+
24+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
25+
26+
ENV DEBIAN_FRONTEND noninteractive
27+
28+
RUN apt-get update && \
29+
apt-get install -y --no-install-recommends procps libssl3t64 zlib1g "libpcre2-*" liblua5.4-0 libatomic1 tar curl socat ca-certificates libjemalloc2 && \
30+
apt-get install -y --no-install-recommends gcc make libc6-dev libssl-dev libpcre3-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
31+
c_rehash && \
32+
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
33+
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
34+
mkdir -p /tmp/haproxy && \
35+
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
36+
rm -f haproxy.tar.gz && \
37+
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-glibc CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
38+
USE_TFO=1 USE_LINUX_TPROXY=1 USE_LUA=1 USE_GETADDRINFO=1 \
39+
USE_PROMEX=1 USE_SLZ=1 \
40+
USE_OPENSSL_AWSLC=1 USE_PTHREAD_EMULATION=1 \
41+
SSL_INC=/opt/aws-lc/include SSL_LIB=/opt/aws-lc/lib USE_QUIC=1 \
42+
LDFLAGS="-L/opt/aws-lc/lib -Wl,-rpath,/opt/aws-lc/lib" \
43+
ADDLIB=-ljemalloc \
44+
all && \
45+
make -C /tmp/haproxy TARGET=linux-glibc install-bin
46+
147
FROM ubuntu:noble
248

349
MAINTAINER Dinko Korunic <dkorunic@haproxy.com>
@@ -16,47 +62,35 @@ ENV HAPROXY_SRC_URL http://www.haproxy.org/download
1662
ENV HAPROXY_UID haproxy
1763
ENV HAPROXY_GID haproxy
1864

19-
ENV DEBIAN_FRONTEND noninteractive
20-
2165
ENV DATAPLANE_MINOR 3.0.16
2266
ENV DATAPLANE_URL https://github.com/haproxytech/dataplaneapi/releases/download
2367

68+
ENV DEBIAN_FRONTEND noninteractive
69+
2470
ARG TARGETPLATFORM
2571

26-
ARG S6_OVERLAY_VERSION=3.2.1.0
27-
ENV S6_OVERLAY_VERSION $S6_OVERLAY_VERSION
28-
ENV S6_READ_ONLY_ROOT=1
29-
ENV S6_USER=haproxy
30-
ENV S6_GROUP=haproxy
72+
COPY --from=awslc-builder /opt/aws-lc /opt/aws-lc
73+
COPY --from=hapce-builder /usr/local/sbin/haproxy /usr/local/sbin/haproxy
74+
COPY --from=hapce-builder /tmp/haproxy/examples/errorfiles/ /usr/local/etc/haproxy/errors
75+
76+
ENV S6_OVERLAY_VERSION 3.2.1.0
77+
ENV S6_READ_ONLY_ROOT 1
78+
ENV S6_USER haproxy
79+
ENV S6_GROUP haproxy
3180

3281
COPY /fs /
3382

3483
RUN apt-get update && \
3584
apt-get install -y --no-install-recommends procps libssl3t64 zlib1g "libpcre2-*" liblua5.4-0 libatomic1 tar xz-utils curl socat ca-certificates libjemalloc2 && \
36-
apt-get install -y --no-install-recommends gcc make libc6-dev libssl-dev libpcre3-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
37-
curl -sfSL "${HAPROXY_SRC_URL}/${HAPROXY_BRANCH}/src/haproxy-${HAPROXY_MINOR}.tar.gz" -o haproxy.tar.gz && \
38-
echo "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c - && \
85+
c_rehash && \
3986
groupadd "$HAPROXY_GID" && \
4087
useradd -g "$HAPROXY_GID" "$HAPROXY_UID" && \
41-
mkdir -p /tmp/haproxy && \
42-
tar -xzf haproxy.tar.gz -C /tmp/haproxy --strip-components=1 && \
43-
rm -f haproxy.tar.gz && \
44-
make -C /tmp/haproxy -j"$(nproc)" TARGET=linux-glibc CPU=generic USE_PCRE2=1 USE_PCRE2_JIT=1 \
45-
USE_TFO=1 USE_LINUX_TPROXY=1 USE_LUA=1 USE_GETADDRINFO=1 \
46-
USE_PROMEX=1 USE_SLZ=1 \
47-
USE_OPENSSL=1 USE_PTHREAD_EMULATION=1 \
48-
USE_QUIC=1 USE_QUIC_OPENSSL_COMPAT=1 \
49-
ADDLIB=-ljemalloc \
50-
all && \
51-
make -C /tmp/haproxy TARGET=linux-glibc install-bin install-man && \
88+
chmod +x /usr/local/sbin/haproxy && \
5289
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy && \
5390
mkdir -p /var/lib/haproxy && \
5491
chown "$HAPROXY_UID:$HAPROXY_GID" /var/lib/haproxy && \
5592
mkdir -p /usr/local/etc/haproxy && \
56-
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy && \
5793
ln -s /usr/local/etc/haproxy /etc/haproxy && \
58-
cp -R /tmp/haproxy/examples/errorfiles /usr/local/etc/haproxy/errors && \
59-
rm -rf /tmp/haproxy && \
6094
case "${TARGETPLATFORM}" in \
6195
"linux/arm64") API_ARCH=arm64 ;; \
6296
"linux/amd64") API_ARCH=x86_64 ;; \
@@ -69,11 +103,20 @@ RUN apt-get update && \
69103
tar -xzf dataplaneapi.tar.gz -C /tmp/dataplaneapi && \
70104
rm -f dataplaneapi.tar.gz && \
71105
cp /tmp/dataplaneapi/dataplaneapi /usr/local/bin/dataplaneapi && \
106+
chmod +x /usr/local/bin/dataplaneapi && \
107+
touch /usr/local/etc/haproxy/dataplaneapi.yml && \
72108
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/etc/haproxy/dataplaneapi.yml && \
73109
mkdir -p /usr/local/var/lib/dataplaneapi && \
74110
chown "$HAPROXY_UID:$HAPROXY_GID" /usr/local/var/lib/dataplaneapi && \
75111
ln -s /usr/local/var/lib/dataplaneapi /var/lib/dataplaneapi && \
76112
rm -rf /tmp/dataplaneapi && \
113+
apt-get clean && \
114+
rm -rf /var/lib/apt/lists/* && \
115+
echo "/opt/aws-lc/lib" > /etc/ld.so.conf.d/awslc.conf && \
116+
mkdir -p /opt/aws-lc/ssl && \
117+
rm -rf /opt/aws-lc/ssl/certs && \
118+
ln -s /etc/ssl/certs /opt/aws-lc/ssl/certs && \
119+
ldconfig && \
77120
case "${TARGETPLATFORM}" in \
78121
"linux/arm64") S6_ARCH=aarch64 ;; \
79122
"linux/amd64") S6_ARCH=x86_64 ;; \
@@ -87,10 +130,7 @@ RUN apt-get update && \
87130
tar -C / -Jxpf /tmp/s6-overlay-binaries.tar.xz && \
88131
rm -f /tmp/s6-overlay-scripts.tar.xz /tmp/s6-overlay-binaries.tar.xz && \
89132
chown -R "${S6_USER}:${S6_GROUP}" /init /etc/s6-overlay && \
90-
chmod u+x /init /etc/s6-overlay/scripts/* && \
91-
apt-get purge -y --auto-remove gcc make libc6-dev libssl-dev libpcre2-dev zlib1g-dev liblua5.4-dev libjemalloc-dev && \
92-
apt-get clean && \
93-
rm -rf /var/lib/apt/lists/*
133+
chmod u+x /init /etc/s6-overlay/scripts/*
94134

95135
EXPOSE 80
96136
EXPOSE 443

0 commit comments

Comments
 (0)