This is an automated email from the ASF dual-hosted git repository. bneradt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/trafficserver-ci.git
The following commit(s) were added to refs/heads/main by this push: new fddd769 Adding Dockerfile for fedora:35 (#82) fddd769 is described below commit fddd769dafdb97a2a45e0cf87e1a45094199a2f6 Author: Brian Neradt <brian.ner...@gmail.com> AuthorDate: Tue Feb 22 15:34:24 2022 -0600 Adding Dockerfile for fedora:35 (#82) --- docker/fedora35/Dockerfile | 73 ++++++++++++++++ docker/fedora35/build_h3_tools.sh | 169 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 242 insertions(+) diff --git a/docker/fedora35/Dockerfile b/docker/fedora35/Dockerfile new file mode 100644 index 0000000..b2f0fbc --- /dev/null +++ b/docker/fedora35/Dockerfile @@ -0,0 +1,73 @@ +FROM fedora:35 + +RUN yum -y install epel-release dnf-plugins-core; yum config-manager --set-enabled powertools; yum repolist; \ + + yum -y update; \ + # Compilers + yum -y install ccache make pkgconfig bison flex gcc-c++ clang \ + # Autoconf + autoconf automake libtool \ + # Various other tools + sudo git rpm-build distcc-server file wget openssl hwloc nghttp2 libnghttp2-devel; \ + # Devel packages that ATS needs + yum -y install openssl-devel expat-devel pcre-devel libcap-devel hwloc-devel libunwind-devel \ + xz-devel libcurl-devel ncurses-devel jemalloc-devel GeoIP-devel luajit-devel brotli-devel \ + ImageMagick-devel ImageMagick-c++-devel hiredis-devel zlib-devel libmaxminddb-devel \ + perl-ExtUtils-MakeMaker perl-Digest-SHA perl-URI curl tcl-devel java; \ + # autest stuff + yum -y install python3 httpd-tools procps-ng nmap-ncat python3-pip \ + python3-gunicorn python3-requests python3-devel python3-psutil telnet golang; + +RUN pip3 install pipenv httpbin + +# Install openssl-quic +RUN yum -y install libev-devel jemalloc-devel libxml2-devel \ + c-ares-devel libevent-devel jansson-devel zlib-devel systemd-devel \ + perl-FindBin + +ARG h3_tools_dir=/root/build_h3_tools +RUN mkdir -p ${h3_tools_dir} +WORKDIR ${h3_tools_dir} +COPY /build_h3_tools.sh ${h3_tools_dir}/build_h3_tools.sh +# This will install OpenSSL QUIC and related tools in /opt. +RUN bash ${h3_tools_dir}/build_h3_tools.sh +WORKDIR /root + +# Make sure we pick up this built version of curl, which is in /opt/bin. +RUN echo 'PATH=/opt/bin:$PATH' | tee -a /etc/profile.d/curl_http3.sh + +RUN echo 'export GOROOT=/usr/local/go' | tee -a /etc/profile +RUN echo 'export PATH=$PATH:/usr/local/go/bin' | tee -a /etc/profile +RUN source /etc/profile +RUN go install github.com/summerwind/h2spec/cmd/h2spec@latest +RUN cp /root/go/bin/h2spec /usr/local/bin +RUN yum clean all + +# Add the CI's test user. N.B: 1200 is the uid that our jenkins user is +# configured with, so that has to be used. Otherwise there will be permissions +# issues. +ARG username=jenkins +ARG uid=1200 +RUN useradd \ + --home-dir /home/${username} \ + --groups users,wheel \ + --uid ${uid} \ + --shell /bin/bash \ + --create-home \ + ${username} +RUN echo "${username} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers +RUN chown -R ${username} /home/${username} + +# Install lcov requirements. +RUN yum install -y perl-IO-Compress +ARG lcov_build_dir=/var/tmp/lcov_build_dir +RUN mkdir -p ${lcov_build_dir} +WORKDIR ${lcov_build_dir} +RUN git clone https://github.com/linux-test-project/lcov.git; \ + cd lcov; \ + # v1.15 is required for g++ version 9 compiled files. + git checkout v1.15; \ + make install +WORKDIR /root +RUN rm -rf ${lcov_build_dir} +RUN yum clean all diff --git a/docker/fedora35/build_h3_tools.sh b/docker/fedora35/build_h3_tools.sh new file mode 100644 index 0000000..54e56a4 --- /dev/null +++ b/docker/fedora35/build_h3_tools.sh @@ -0,0 +1,169 @@ +#!/usr/bin/env bash +# +# Simple script to build OpenSSL and various tools with H3 and QUIC support. +# This probably needs to be modified based on platform. +# +# 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. + + + +# This is a slightly modified version of: +# https://github.com/apache/trafficserver/blob/19dfdd4753232d0b77ca555f7ef5f5ba3d2ccae1/tools/build_h3_tools.sh +# +# This present script been modified from the latter in the following ways: +# +# * This version checks out specific commits of the repos so that people +# creating images from the corresponding Dockerfile do not get different +# versions of these over time. +# +# * It also doesn't run sudo since the Dockerfile will run this as root. + + +set -e + +# Update this as the draft we support updates. +OPENSSL_BRANCH=${OPENSSL_BRANCH:-"OpenSSL_1_1_1m+quic"} + +# Set these, if desired, to change these to your preferred installation +# directory +BASE=${BASE:-"/opt"} +OPENSSL_BASE=${OPENSSL_BASE:-"${BASE}/openssl-quic"} +OPENSSL_PREFIX=${OPENSSL_PREFIX:-"${OPENSSL_BASE}-${OPENSSL_BRANCH}"} +MAKE="make" + +# These are for Linux like systems, specially the LDFLAGS, also depends on dirs above +CFLAGS=${CFLAGS:-"-O3 -g"} +CXXFLAGS=${CXXFLAGS:-"-O3 -g"} +LDFLAGS=${LDFLAGS:-"-Wl,-rpath=${OPENSSL_PREFIX}/lib"} + +if [ -e /etc/redhat-release ]; then + MAKE="gmake" + echo "+-------------------------------------------------------------------------+" + echo "| You probably need to run this, or something like this, for your system: |" + echo "| |" + echo "| sudo yum -y install libev-devel jemalloc-devel python2-devel |" + echo "| sudo yum -y install libxml2-devel c-ares-devel libevent-devel |" + echo "| sudo yum -y install jansson-devel zlib-devel systemd-devel |" + echo "+-------------------------------------------------------------------------+" + echo + echo +elif [ -e /etc/debian_version ]; then + echo "+-------------------------------------------------------------------------+" + echo "| You probably need to run this, or something like this, for your system: |" + echo "| |" + echo "| sudo apt -y install libev-dev libjemalloc-dev python2-dev libxml2-dev |" + echo "| sudo apt -y install libpython2-dev libc-ares-dev libsystemd-dev |" + echo "| sudo apt -y install libevent-dev libjansson-dev zlib1g-dev |" + echo "+-------------------------------------------------------------------------+" + echo + echo +fi + +set -x + +# OpenSSL needs special hackery ... Only grabbing the branch we need here... Bryan has shit for network. +echo "Building OpenSSL with QUIC support" +[ ! -d openssl-quic ] && git clone -b ${OPENSSL_BRANCH} https://github.com/quictls/openssl.git openssl-quic +cd openssl-quic +git checkout 7c0006ccf891c20cd0b1e9e6a436f9d1f3153b7b +./config --prefix=${OPENSSL_PREFIX} +${MAKE} -j $(nproc) +${MAKE} install_sw + +# The symlink target provides a more convenient path for the user while also +# providing, in the symlink source, the precise branch of the OpenSSL build. +ln -sf ${OPENSSL_PREFIX} ${OPENSSL_BASE} +cd .. + +# Then nghttp3 +echo "Building nghttp3..." +[ ! -d nghttp3 ] && git clone https://github.com/ngtcp2/nghttp3.git +cd nghttp3 +git checkout b9e565cb48e92ded110162a65511f78681fb13c3 +autoreconf -if +./configure \ + --prefix=${BASE} \ + PKG_CONFIG_PATH=${BASE}/lib/pkgconfig:${OPENSSL_PREFIX}/lib/pkgconfig \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + --enable-lib-only +${MAKE} -j $(nproc) +${MAKE} install +cd .. + +# Now ngtcp2 +echo "Building ngtcp2..." +[ ! -d ngtcp2 ] && git clone https://github.com/ngtcp2/ngtcp2.git +cd ngtcp2 +git checkout 982502f9ac594a45bc13804416a443522d906f29 +autoreconf -if +./configure \ + --prefix=${BASE} \ + PKG_CONFIG_PATH=${BASE}/lib/pkgconfig:${OPENSSL_PREFIX}/lib/pkgconfig \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + --enable-lib-only +${MAKE} -j $(nproc) +${MAKE} install +cd .. + +# Then nghttp2, with support for H3 +echo "Building nghttp2 ..." +[ ! -d nghttp2 ] && git clone https://github.com/tatsuhiro-t/nghttp2.git +cd nghttp2 + +# This commit will be removed whenever the nghttp2 author rebases origin/quic. +# For reference, this commit is currently described as: +# +# commit 25f29e7634a2c8c5ba5c63432e5d94217a6535ef +# Author: Tatsuhiro Tsujikawa <tatsuhir...@gmail.com> +# Date: Mon Aug 16 16:58:11 2021 +0900 +# +# Compile with the latest ngtcp2 +git checkout 25f29e7634a2c8c5ba5c63432e5d94217a6535ef + +autoreconf -if +./configure \ + --prefix=${BASE} \ + PKG_CONFIG_PATH=${BASE}/lib/pkgconfig:${OPENSSL_PREFIX}/lib/pkgconfig \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" \ + --enable-lib-only +${MAKE} -j $(nproc) +${MAKE} install +cd .. + +# And finally curl +echo "Building curl ..." +[ ! -d curl ] && git clone https://github.com/curl/curl.git +cd curl +git checkout 2bfa57bff184437028025933d26fecb215355173 +autoreconf -i +./configure \ + --prefix=${BASE} \ + --with-ssl=${OPENSSL_PREFIX} \ + --with-nghttp2=${BASE} \ + --with-nghttp3=${BASE} \ + --with-ngtcp2=${BASE} \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" +${MAKE} -j $(nproc) +${MAKE} install