This is an automated email from the ASF dual-hosted git repository.

cmcfarlen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 59e60af7d0 Add Dockerfile in contrib (#11801)
59e60af7d0 is described below

commit 59e60af7d02e82fae46b62c4321db661a3b13242
Author: Chris McFarlen <[email protected]>
AuthorDate: Mon Oct 7 17:17:36 2024 -0500

    Add Dockerfile in contrib (#11801)
    
    * Add Dockerfile in contrib
    
    * Add license
    
    * Add PATH,EXPOSE and CMD
    
    * Remove additional args
    
    ---------
    
    Co-authored-by: Chris McFarlen <[email protected]>
---
 contrib/docker/ubuntu/noble/Dockerfile | 239 +++++++++++++++++++++++++++++++++
 1 file changed, 239 insertions(+)

diff --git a/contrib/docker/ubuntu/noble/Dockerfile 
b/contrib/docker/ubuntu/noble/Dockerfile
new file mode 100644
index 0000000000..7c70940346
--- /dev/null
+++ b/contrib/docker/ubuntu/noble/Dockerfile
@@ -0,0 +1,239 @@
+#######################
+#
+#  Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+#  agreements.  See the NOTICE file distributed with this work for additional 
information regarding
+#  copyright ownership.  The ASF licenses this file to you under the Apache 
License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with the 
License.  You may obtain
+#  a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software 
distributed under the License
+#  is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+#  or implied. See the License for the specific language governing permissions 
and limitations under
+#  the License.
+#
+#######################
+FROM ubuntu:noble AS build
+
+ARG LLVM_VERSION=18
+ARG BASE=/opt
+ARG ATS_VERSION=10.0.0
+
+RUN apt update \
+ && apt upgrade --yes \
+ && apt install --no-install-recommends --yes \
+    ca-certificates \
+    clang-${LLVM_VERSION} \
+    libc++-${LLVM_VERSION}-dev \
+    cmake \
+    ninja-build \
+    libc-ares-dev \
+    libsystemd-dev \
+    libev-dev \
+    libevent-dev \
+    zlib1g-dev \
+    cargo \
+    wget \
+    git \
+    libtool \
+    make \
+    pkg-config \
+# ATS deps
+    libxml2-dev \
+    libjemalloc-dev \
+    libhwloc-dev \
+    libfmt-dev \
+    libpcre2-dev \
+    libpcre3-dev \
+    hwloc \
+    libbrotli-dev \
+    luajit \
+    libcap-dev \
+    libmagick++-dev \
+    libmaxminddb-dev \
+    libcjose-dev \
+    libcjose0 \
+    libjansson-dev \
+ # needed to appease nghttp2 but unused
+    libssl-dev \
+ && apt clean --yes
+
+RUN mkdir -p ${BASE} && chmod a+rX ${BASE}
+
+RUN if [ `uname -m` = "arm64" -o `uname -m` = "aarch64" ]; then echo "arm64" > 
/arch; else echo "amd64" > /arch; fi \
+  && wget -qO- https://go.dev/dl/go1.21.6.linux-$(cat /arch).tar.gz | tar -C 
${BASE} -xzf -
+
+ENV CC=clang-${LLVM_VERSION}
+ENV CXX=clang++-${LLVM_VERSION}
+ENV GO_BINARY_PATH=${BASE}/go/bin/go
+
+RUN git clone https://boringssl.googlesource.com/boringssl \
+ && cd boringssl \
+ && git checkout 45b2464158379f48cec6e35a1ef503ddea1511a6 \
+ && cmake \
+  -B build-shared \
+  -G Ninja \
+  -DGO_EXECUTABLE=${GO_BINARY_PATH} \
+  -DCMAKE_INSTALL_PREFIX=${BASE}/boringssl \
+  -DCMAKE_BUILD_TYPE=Release \
+  -DCMAKE_CXX_FLAGS='-Wno-error=ignored-attributes -UBORINGSSL_HAVE_LIBUNWIND' 
\
+  -DCMAKE_C_FLAGS=${BSSL_C_FLAGS} \
+  -DBUILD_SHARED_LIBS=1 \
+ && cmake \
+  -B build-static \
+  -G Ninja \
+  -DGO_EXECUTABLE=${GO_BINARY_PATH} \
+  -DCMAKE_INSTALL_PREFIX=${BASE}/boringssl \
+  -DCMAKE_BUILD_TYPE=Release \
+  -DCMAKE_CXX_FLAGS='-Wno-error=ignored-attributes -UBORINGSSL_HAVE_LIBUNWIND' 
\
+  -DCMAKE_C_FLAGS="${BSSL_C_FLAGS}" \
+  -DBUILD_SHARED_LIBS=0 \
+ && cmake --build build-shared  \
+ && cmake --build build-static  \
+ && cmake --install build-shared \
+ && cmake --install build-static \
+ && cd .. \
+ && rm -rf boringssl
+
+ENV QUICHE_BASE="${BASE}/quiche"
+
+RUN git clone -b 0.22.0 --depth 1 https://github.com/cloudflare/quiche.git \
+ && cd quiche \
+ && QUICHE_BSSL_PATH=${BASE}/boringssl/lib QUICHE_BSSL_LINK_KIND=dylib \
+    cargo build -j$(nproc) --package quiche --release --features 
ffi,pkg-config-meta,qlog \
+ && mkdir -p ${QUICHE_BASE}/lib/pkgconfig \
+ && mkdir -p ${QUICHE_BASE}/include \
+ && cp target/release/libquiche.a ${QUICHE_BASE}/lib/ \
+ && cp target/release/libquiche.so ${QUICHE_BASE}/lib/ \
+ && ln -s ${QUICHE_BASE}/lib/libquiche.so ${QUICHE_BASE}/lib/libquiche.so.0 \
+ && cp quiche/include/quiche.h ${QUICHE_BASE}/include/ \
+ && cp target/release/quiche.pc ${QUICHE_BASE}/lib/pkgconfig \
+ && cd .. \
+ && rm -rf quiche
+
+ENV LDFLAGS="-Wl,-rpath,${BASE}/boringssl/lib"
+ENV CFLAGS="-O3"
+ENV CXXFLAGS="-O3"
+ENV 
PKG_CONFIG_PATH="${BASE}/lib/pkgconfig:${BASE}/boringssl/lib/pkgconfig:${BASE}/quiche/lib/pkgconfig"
+
+RUN git clone --depth 1 -b v1.2.0 https://github.com/ngtcp2/nghttp3.git \
+ && cd nghttp3 \
+ && git submodule update --init \
+ && autoreconf -if \
+ && ./configure \
+  --prefix=${BASE} \
+  CFLAGS="${CFLAGS}" \
+  CXXFLAGS="${CXXFLAGS}" \
+  LDFLAGS="${LDFLAGS}" \
+  --enable-lib-only \
+ && make -j $(nproc) \
+ && make install \
+ && cd .. \
+ && rm -rf nghttp3
+
+
+RUN git clone --depth 1 -b v1.4.0 https://github.com/ngtcp2/ngtcp2.git \
+ && cd ngtcp2 \
+ && autoreconf -if \
+ && ./configure \
+  --prefix=${BASE} \
+  --with-boringssl \
+  BORINGSSL_CFLAGS="-I${BASE}/boringssl/include" \
+  BORINGSSL_LIBS="-L${BASE}/boringssl/lib -lssl -lcrypto" \
+  CFLAGS="${CFLAGS} -fPIC" \
+  CXXFLAGS="${CXXFLAGS} -fPIC" \
+  LDFLAGS="${LDFLAGS}" \
+  --enable-lib-only \
+ && make -j $(nproc) \
+ && make install \
+ && cd .. \
+ && rm -rf ngtcp2
+
+RUN git clone --depth 1 -b v1.60.0 https://github.com/tatsuhiro-t/nghttp2.git \
+ && cd nghttp2 \
+ && git submodule update --init \
+ && autoreconf -if \
+ && ./configure \
+  --prefix=${BASE} \
+  CFLAGS="${CFLAGS} -I${BASE}/boringssl/include" \
+  CXXFLAGS="${CXXFLAGS} -I${BASE}/boringssl/include" \
+  LDFLAGS="${LDFLAGS}" \
+  OPENSSL_LIBS="-L${BASE}/boringssl/lib -lcrypto -lssl" \
+  --enable-http3 \
+  --disable-examples \
+  --enable-app \
+ && make -j $(nproc) \
+ && make install \
+ && cd .. \
+ && rm -rf nghttp2
+
+RUN git clone --depth 1 -b curl-8_7_1 https://github.com/curl/curl.git \
+ && cd curl \
+ && autoreconf -fi \
+ && ./configure \
+  --prefix=${BASE} \
+  --with-openssl="${BASE}/boringssl" \
+  --with-nghttp2=${BASE} \
+  --with-nghttp3=${BASE} \
+  --with-ngtcp2=${BASE} \
+  LDFLAGS="${LDFLAGS} -L${BASE}/boringssl/lib 
-Wl,-rpath,${BASE}/boringssl/lib" \
+  CFLAGS="${CFLAGS}" \
+  CXXFLAGS="${CXXFLAGS}" \
+ && make -j $(nproc) \
+ && make install \
+ && cd .. \
+ && rm -rf curl
+
+RUN git clone --depth 1 -b ${ATS_VERSION} 
https://github.com/apache/trafficserver.git \
+ && cmake \
+     -Strafficserver \
+     -Bbuild \
+     -GNinja \
+     -DCMAKE_INSTALL_PREFIX=${BASE} \
+     -DCMAKE_BUILD_TYPE=Release \
+     -DBUILD_TESTING=OFF \
+     -DBUILD_REGRESSION_TESTING=OFF \
+     -DENABLE_AUTEST=OFF \
+     -DBUILD_EXPERIMENTAL_PLUGINS=ON \
+     -DENABLE_JEMALLOC=ON \
+     -DENABLE_MALLOC_ALLOCATOR=ON \
+     -DENABLE_QUICHE=ON \
+     -DENABLE_CRIPTS=ON \
+     -DENABLE_EXAMPLE=OFF \
+     -DOPENSSL_ROOT_DIR=${BASE}/boringssl \
+     -Dquiche_ROOT=${QUICHE_BASE} \
+ && cmake --build build \
+ && cmake --install build \
+ && rm -rf build trafficserver
+
+FROM ubuntu:noble
+
+RUN apt update \
+ && apt upgrade --yes \
+ && apt install --no-install-recommends --yes \
+    ca-certificates \
+    libjemalloc2 \
+    libxml2 \
+    hwloc \
+    libmaxminddb0 \
+    libfmt9 \
+    libpcre2-8-0 \
+    libpcre3 \
+    libbrotli1 \
+    luajit \
+    libcap2 \
+    libmagick++-6.q16-9t64 \
+    libmagickcore-6.q16-7t64 \
+    libmagickwand-6.q16-7t64 \
+    libcjose0 \
+    libjansson4 \
+ && apt clean --yes
+
+COPY --from=build /opt /opt
+RUN chown nobody /opt/var/trafficserver /opt/var/log/trafficserver
+ENV PATH="$PATH:/opt/bin"
+
+EXPOSE 8080
+
+CMD ["traffic_server"]

Reply via email to