From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 763D642FD5; Fri, 4 Aug 2023 16:02:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 561B840EE1; Fri, 4 Aug 2023 16:02:17 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id BB80A40E2D for ; Fri, 4 Aug 2023 16:02:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1691157735; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=lphGgbro/tYjO4EgJM91uU3pbLMh8OuwaX0BFhaYEok=; b=ciqd8pOyEHKBIs+Q19baTkxukKzZGBCcQKNJ8oNlXTavIuFWcT8O0gMDggR3FlBrlAxkpx 9DOHTzgh4jhb0PzmRhMie4rMKMeH2Szq/II5+NffHxYT/Rv7Lmxm/ctzJC17mBewERlbWT UG1qu49BLYPqTDaTQLZU3Q6/A22+vEM= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-154-CJKa5K8MOvC7bL58BHpfbQ-1; Fri, 04 Aug 2023 10:02:13 -0400 X-MC-Unique: CJKa5K8MOvC7bL58BHpfbQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 115E4830DB0; Fri, 4 Aug 2023 14:02:13 +0000 (UTC) Received: from RHTPC1VM0NT (unknown [10.22.33.16]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4F55A477F63; Fri, 4 Aug 2023 14:02:12 +0000 (UTC) From: Aaron Conole To: Adam Hassick Cc: ci@dpdk.org, alialnu@nvidia.com, Owen Hilyard Subject: Re: [PATCH v8 4/6] containers/templates: Templates for Dockerfiles References: <20230717210815.29737-1-ahassick@iol.unh.edu> <20230717210815.29737-5-ahassick@iol.unh.edu> Date: Fri, 04 Aug 2023 10:02:11 -0400 In-Reply-To: <20230717210815.29737-5-ahassick@iol.unh.edu> (Adam Hassick's message of "Mon, 17 Jul 2023 17:08:13 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-BeenThere: ci@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK CI discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ci-bounces@dpdk.org Adam Hassick writes: > From: Owen Hilyard > > Adds a variety of extensible templates used to create the Dockerfiles > for each target. All templates inherit from base, and most distros and > distro families have their own templates that are used to define common > functionality. Multiple versions of a distro may use a single template > if they are similar enough (ex: fedora). > > Signed-off-by: Owen Hilyard > Signed-off-by: Adam Hassick > --- > .../templates/containers.makefile.j2 | 73 +++++++++++ > .../templates/containers/alpine.dockerfile.j2 | 3 + > .../templates/containers/arch.dockerfile.j2 | 39 ++++++ > .../templates/containers/base.dockerfile.j2 | 120 ++++++++++++++++++ > .../containers/centos8.dockerfile.j2 | 21 +++ > .../containers/centos9.dockerfile.j2 | 17 +++ > .../templates/containers/debian.dockerfile.j2 | 7 + > .../containers/debian10.dockerfile.j2 | 3 + > .../containers/debian11.dockerfile.j2 | 3 + > .../debian11_arm_ipsec.dockerfile.j2 | 16 +++ > .../containers/debian_bullseye.dockerfile.j2 | 3 + > .../containers/debian_buster.dockerfile.j2 | 3 + > .../templates/containers/fedora.dockerfile.j2 | 11 ++ > .../containers/fedora36_clang.dockerfile.j2 | 7 + > .../containers/fedora_clang.dockerfile.j2 | 8 ++ > .../containers/fedora_coverity.dockerfile.j2 | 10 ++ > .../containers/opensuse.dockerfile.j2 | 10 ++ > .../containers/redhat_family.dockerfile.j2 | 5 + > .../templates/containers/rhel.dockerfile.j2 | 16 +++ > .../templates/containers/rhel7.dockerfile.j2 | 15 +++ > .../templates/containers/rhel8.dockerfile.j2 | 15 +++ > .../templates/containers/rhel9.dockerfile.j2 | 19 +++ > .../templates/containers/rpm.dockerfile.j2 | 3 + > .../templates/containers/ubuntu.dockerfile.j2 | 3 + > .../containers/ubuntu20.04.dockerfile.j2 | 12 ++ > .../containers/ubuntu22.04.dockerfile.j2 | 3 + > .../containers/ubuntu_cross.dockerfile.j2 | 11 ++ > .../containers/ubuntu_sve.dockerfile.j2 | 12 ++ > 28 files changed, 468 insertions(+) > create mode 100644 containers/template_engine/templates/containers.makefile.j2 > create mode 100644 containers/template_engine/templates/containers/alpine.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/arch.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/base.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/centos8.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/centos9.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/debian.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/debian10.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/debian11.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/debian_buster.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/fedora.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/fedora_clang.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/opensuse.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/redhat_family.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/rhel.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/rhel7.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/rhel8.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/rhel9.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/rpm.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/ubuntu.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2 > create mode 100644 containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2 > > diff --git a/containers/template_engine/templates/containers.makefile.j2 b/containers/template_engine/templates/containers.makefile.j2 > new file mode 100644 > index 0000000..900bfc8 > --- /dev/null > +++ b/containers/template_engine/templates/containers.makefile.j2 > @@ -0,0 +1,73 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} 2023? This is everywhere set to 2022, but I guess it should really be 2023, or 2022,2023 > +#################### START VARS ################# > +DPDK_CI_CONTAINER_BUILDER_PROGRAM?=podman > +DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS?= > +DPDK_CI_CONTAINERS_REGISTRY_HOSTNAME?={{ registry_hostname }} > + > +#################### END VARS ################# > + > +.PHONY: build_all > +build_all:{% for container in dockerfiles.targets %} build_{{ container.name }}{% endfor %} > + > +.PHONY: push_image_all > +push_image_all:{% for container in dockerfiles.targets %} push_image_{{ container.name }}{% endfor %} > + > +.PHONY: push_manifest_all > +push_manifest_all: > +{%- if is_builder %} > + echo "Disabled: Builder mode was enabled." > +{%- else -%} > + {% for container in dockerfiles.targets %} push_manifest_{{ container.name }}{% endfor %} > +{%- endif %} > + > +{%- macro push_indx(container, is_docker) %} > + {%- for tag in container.tags -%} > + {%- set formatted_tag = tag | replace('$R', registry_hostname) | replace('$T', timestamp) | replace('$N', container.name) | replace(':', '\\:') -%} > + {%- set trunk_tag = formatted_tag.split('/')[1] -%} > + {%- if is_docker -%} > + {%- set ref_tag = formatted_tag -%} > + {%- set push_xargs = '' -%} > + {%- else -%} > + {%- set ref_tag = trunk_tag -%} > + {%- set push_xargs = ' docker\://%s' | format(formatted_tag) -%} > + {%- endif -%} > + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest rm {{ ref_tag }} || echo "Image {{ ref_tag }} did not exist initially." > + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest create {{ ref_tag }} > + {%- for platform in container.platforms -%} > + {%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container.name, platform.replace('/', ''), timestamp) %} \ > + {{ plat_tag -}} {% endfor %} > + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest push $(DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS) {{ ref_tag }} {{- push_xargs }} > + {% endfor -%} > +{% endmacro %} > + > +{% for container in dockerfiles.targets %} > +#################### START {{ container.name }} ##################### > + {% set container_id = container.name %} > +.PHONY: build_{{ container_id }} > + > +build_{{ container_id }}: > + {%- for platform in container.platforms -%} > + {%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container_id, platform.replace('/', ''), timestamp) %} > + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) build --target {{container.name}} --platform {{ platform }} \ > + -t {{ plat_tag }} -f {{ container_id }}.dockerfile $(CURDIR) {%- endfor %} > + > +.PHONY: push_image_{{ container_id }} > +push_image_{{ container_id }}: build_{{ container_id }} > + {%- for platform in container.platforms -%} > + {%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container_id, platform.replace('/', ''), timestamp) %} > + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) push $(DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS) {{ plat_tag }} > + {%- endfor %} > +{% if not is_builder %} > +.PHONY: push_manifest_{{ container_id }} > +push_manifest_{{ container_id }}: > +{%- if host_arch_only and not is_builder %} push_image_{{ container_id }}{% endif %} > +ifeq ($(DPDK_CI_CONTAINER_BUILDER_PROGRAM), docker) > + {{ push_indx(container, true) }} > +else > + {{ push_indx(container, false) }} > +endif > +{% endif %} > + > +#################### END {{ container.name }} ##################### > +{% endfor %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/alpine.dockerfile.j2 b/containers/template_engine/templates/containers/alpine.dockerfile.j2 > new file mode 100644 > index 0000000..f386b42 > --- /dev/null > +++ b/containers/template_engine/templates/containers/alpine.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/base.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/arch.dockerfile.j2 b/containers/template_engine/templates/containers/arch.dockerfile.j2 > new file mode 100644 > index 0000000..edfa6d4 > --- /dev/null > +++ b/containers/template_engine/templates/containers/arch.dockerfile.j2 > @@ -0,0 +1,39 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/base.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +RUN pacman-key --init > +RUN pacman -Sy --noconfirm archlinux-keyring && pacman -Su --noconfirm > +{% endblock %} > + > + > +{% block pip_installs %} > +RUN mkdir -p ~/.config/pip \ > + && printf '[global]\nbreak-system-packages = true\n' >> ~/.config/pip/pip.conf \ > + && python3 -m pip install ninja pyelftools > +{% endblock %} > + > +{% block before_meson_after_pip %} > +# add user for building aur packages > +RUN useradd builder && \ > + mkdir /home/builder && \ > + chown builder:builder /home/builder > + > +# switch user to make packages from aur > +USER builder > + > +# clone and make rdma-core packages > +RUN cd /home/builder && git clone https://aur.archlinux.org/rdma-core.git > +RUN cd /home/builder/rdma-core && makepkg > + > +USER root > + > +RUN cd /home/builder/rdma-core && pacman --noconfirm -U rdma-core-*.pkg.tar.* > + > +RUN rm -rf /home/builder > +{% endblock %} > + > +{% block install_libabigail %} > +{# Installed via package manager #} > +{% endblock install_libabigail %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/base.dockerfile.j2 b/containers/template_engine/templates/containers/base.dockerfile.j2 > new file mode 100644 > index 0000000..92f5cb5 > --- /dev/null > +++ b/containers/template_engine/templates/containers/base.dockerfile.j2 > @@ -0,0 +1,120 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +# ------------------------ Begin {{ target.name }} ------------------------------------------------ > + > +{%- set build_base_img = target.name + "_base" %} > +FROM {{ target.base_image }} as {% if build_abi and not target.force_disable_abi -%} > +{{ build_base_img }} > +{%- else -%} > +{{ target.name }} > +{%- endif %} > + > +ENV CCACHE_DIR=/ccache/ > +ENV CCACHE_COMPILERCHECK=content > +ENV CCACHE_NAMESPACE="{{ target.name }}-{{ build_timestamp }}" > +ENV BUILD_TIMESTAMP="{{ build_timestamp }}" > + > +{% block extra_env_vars -%}{%- endblock extra_env_vars %} > + > +{% block pre_package_manager -%}{%- endblock pre_package_manager %} > + > +# Install packages > +RUN {{ target.package_manager_command }} {{ target.packages | join(" ") }} > + > +# Installs from pip > +{% block pip_installs -%}{%- endblock pip_installs %} > + > +# Extra setup after python libs are installed > +{% block before_meson_after_pip -%}{%- endblock %} > + > +# install libabigail > +{% block install_libabigail %} > +{% if build_libabigail and build_abi and (not "force_disable_abi" in target or not target.force_disable_abi) %} > +COPY libabigail /libabigail > +RUN --mount=type=cache,target=/ccache,z cd /libabigail > +{%- if "libabigail_revision" in target %} && git checkout {{ target.libabigail_revision }} {%- endif %} && mkdir build && autoreconf -i && cd build && ../configure --prefix=/usr/local && make all install && \ > + ldconfig && cd / && rm -rf /libabigail > +{% else %} > +# libabigail build is disabled > +{% endif %} > +{% endblock install_libabigail %} > + > +# cross compilation setup > +{% block cross_compilation_setup %} > +{% endblock cross_compilation_setup %} > + > +# Copy externally pulled DPDK into the container > +RUN mkdir /dpdk > +COPY dpdk-stable /dpdk-stable > + > +# Install meson > +{% block install_meson %} > +# Install meson from dpdk main > +# Writes to the mount are discarded once the container is built and is not shared with other containers or the host > +COPY dpdk /dpdk > +RUN --mount=type=cache,target=/ccache,z cd /dpdk && chown -R root /dpdk && git checkout main && sh .ci/linux-setup.sh > +RUN rm -rf /dpdk > +{% endblock install_meson %} > + > +ENV RTE_KERNELDIR CHANGE_ME > + > +RUN mkdir /references > +WORKDIR /references > +RUN touch abi_versions > +# build the abi > +{% if build_abi and not target.force_disable_abi %} > + {% block build_abi %} > + {% for version in abi.versions %} > + {%- set abi_version_str = (version.abi_version.major|string) + "." + (version.abi_version.minor|string) -%} > + {%- set abi_stage_name = target.name + "_" + abi_version_str -%} > + {%- set abi_folder = "/references/" + abi_version_str + "_reference" %} > + {%- set meets_version_requirements = "minimum_dpdk_version" in target and version.dpdk_version.major >= target.minimum_dpdk_version.major and version.dpdk_version.minor >= target.minimum_dpdk_version.minor and version.dpdk_version.revision >= target.minimum_dpdk_version.revision -%} > + {% if meets_version_requirements %} > + > +FROM {{ build_base_img }} AS {{ abi_stage_name }} > +RUN echo '{{ abi_version_str }}' >> abi_versions > +RUN mkdir -p {{ abi_folder }} > +# compile DPDK > +RUN --mount=type=cache,target=/ccache,z \ > + mkdir -p /dpdk-stable/build && rm -rf /dpdk-stable/build && cd /dpdk-stable && git clean -xfd && git fetch --tags && git checkout {{ version.dpdk_version.git_tag }} && cd /references && \ > + meson /dpdk-stable /dpdk-stable/build {% if "cross_file" in target -%} > + --cross-file=/dpdk-stable/{{ target.cross_file }} > + {%- endif %} -Dexamples=all --buildtype=debugoptimized && DESTDIR={{ abi_folder }} ninja {% if ninja_workers -%} > + -j {{ ninja_workers }} {% endif -%} -C /dpdk-stable/build install && \ > + {%- if (abi_version_str == '22.0' or abi_version_str == '23.10') %} > + bash /dpdk-stable/devtools/gen-abi.sh {{ abi_folder }} && mv {{ abi_folder }}/usr/local/include {{ abi_folder }} && \ > + rm -rf {{ abi_folder }}/usr > + {%- else %} > + find {{ abi_folder }}/usr/local -name '*.a' -delete && rm -rf {{ abi_folder }}/usr/local/bin && rm -rf {{ abi_folder }}/usr/local/share > + {%- endif %} && rm -rf /dpdk-stable/build > + {% endif %} > + {% endfor %} > + > +FROM {{ build_base_img }} AS {{ target.name }} > + {% for version in abi.versions %} > + {%- set abi_version_str = (version.abi_version.major|string) + "." + (version.abi_version.minor|string) -%} > + {%- set abi_stage_name = target.name + "_" + abi_version_str -%} > + {%- set abi_folder = "/references/" + abi_version_str + "_reference" %} > + {%- set meets_version_requirements = "minimum_dpdk_version" in target and version.dpdk_version.major >= target.minimum_dpdk_version.major and version.dpdk_version.minor >= target.minimum_dpdk_version.minor and version.dpdk_version.revision >= target.minimum_dpdk_version.revision -%} > + {% if meets_version_requirements %} > +RUN mkdir -p {{ abi_folder }} > +COPY --from={{ abi_stage_name }} {{ abi_folder }} {{ abi_folder }} > + {%- endif %} > + {%- endfor %} > + {% endblock build_abi %} > +RUN chmod -R 777 . > +{% else %} > +{% endif %} > + > +# Embed extra target information into the container > +{% if 'extra_information' in target %} > +RUN echo '{{ target.extra_information | tojson }}' > /container_info.json > +{% endif %} > + > +WORKDIR / > + > +{% block copy_extras -%} > +COPY scripts scripts > +{%- endblock copy_extras %} > + > +# ------------------------ End {{ target.name }} ------------------------------------------------ > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/centos8.dockerfile.j2 b/containers/template_engine/templates/containers/centos8.dockerfile.j2 > new file mode 100644 > index 0000000..bda024a > --- /dev/null > +++ b/containers/template_engine/templates/containers/centos8.dockerfile.j2 > @@ -0,0 +1,21 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/redhat_family.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +# For ninja-build, meson, libmnl-devel, nasm, and CUnit-devel > +RUN dnf install -y dnf-command\(config-manager\) dnf-plugins-core > +# Install EPEL repository for ccache > +RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm > +# Enable powertools repository for libpcap-devel > +RUN dnf config-manager --set-enabled powertools > +{% endblock %} > + > +{% block pip_installs %} > +RUN python3 -m pip install --upgrade pip > +RUN python3 -m pip install pyelftools ninja > +{% endblock %} > + > +{% block install_libabigail %} > +{# Install via package manager #} > +{% endblock install_libabigail %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/centos9.dockerfile.j2 b/containers/template_engine/templates/containers/centos9.dockerfile.j2 > new file mode 100644 > index 0000000..8cacb99 > --- /dev/null > +++ b/containers/template_engine/templates/containers/centos9.dockerfile.j2 > @@ -0,0 +1,17 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/redhat_family.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +# For ninja-build, meson, libmnl-devel, nasm, and CUnit-devel > +RUN dnf install -y dnf-command\(config-manager\) dnf-plugins-core > +# Install EPEL repository for ccache > +RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm > +# Enable powertools repository for libpcap-devel > +RUN dnf config-manager --set-enabled crb > +{% endblock %} > + > +{% block pip_installs %} > +RUN python3 -m pip install --upgrade pip > +RUN python3 -m pip install pyelftools ninja > +{% endblock %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/debian.dockerfile.j2 b/containers/template_engine/templates/containers/debian.dockerfile.j2 > new file mode 100644 > index 0000000..74b56b6 > --- /dev/null > +++ b/containers/template_engine/templates/containers/debian.dockerfile.j2 > @@ -0,0 +1,7 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/base.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +ENV DEBIAN_FRONTEND=noninteractive > +{% endblock %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/debian10.dockerfile.j2 b/containers/template_engine/templates/containers/debian10.dockerfile.j2 > new file mode 100644 > index 0000000..c52f866 > --- /dev/null > +++ b/containers/template_engine/templates/containers/debian10.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/debian.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/debian11.dockerfile.j2 b/containers/template_engine/templates/containers/debian11.dockerfile.j2 > new file mode 100644 > index 0000000..c52f866 > --- /dev/null > +++ b/containers/template_engine/templates/containers/debian11.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/debian.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2 b/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2 > new file mode 100644 > index 0000000..32fad51 > --- /dev/null > +++ b/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2 > @@ -0,0 +1,16 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/debian11.dockerfile.j2' %} > + > +{% block before_meson_after_pip %} > +WORKDIR /opt > + > +# I would use ADD on a git repo, but the support for this was added so recently it doesn't run on my machine. What is the minimum supported version for that? > +RUN git clone --depth 1 --branch SECLIB-IPSEC-2022.05.25 https://git.gitlab.arm.com/arm-reference-solutions/ipsec-mb.git > + > +WORKDIR /opt/ipsec-mb > +RUN make -j $(nproc) && make install > + > +WORKDIR / > + > +{% endblock before_meson_after_pip %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2 b/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2 > new file mode 100644 > index 0000000..c52f866 > --- /dev/null > +++ b/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/debian.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/debian_buster.dockerfile.j2 b/containers/template_engine/templates/containers/debian_buster.dockerfile.j2 > new file mode 100644 > index 0000000..c52f866 > --- /dev/null > +++ b/containers/template_engine/templates/containers/debian_buster.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/debian.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/fedora.dockerfile.j2 b/containers/template_engine/templates/containers/fedora.dockerfile.j2 > new file mode 100644 > index 0000000..97e438e > --- /dev/null > +++ b/containers/template_engine/templates/containers/fedora.dockerfile.j2 > @@ -0,0 +1,11 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/redhat_family.dockerfile.j2' %} > + > +{%- block pip_installs -%} > +RUN python3 -m pip install ninja > +{%- endblock -%} > + > +{% block install_libabigail %} > +# installed by package manager > +{% endblock install_libabigail %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2 b/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2 > new file mode 100644 > index 0000000..bc104ba > --- /dev/null > +++ b/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2 > @@ -0,0 +1,7 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/fedora.dockerfile.j2' %} > + > +{% block extra_env_vars -%} > +ENV CC=clang > +{%- endblock extra_env_vars %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2 b/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2 > new file mode 100644 > index 0000000..18ea757 > --- /dev/null > +++ b/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2 > @@ -0,0 +1,8 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/fedora.dockerfile.j2' %} > + > +{% block extra_env_vars -%} > +#ENV CCACHE_CC=clang > +ENV CC=clang > +{%- endblock extra_env_vars %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2 b/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2 > new file mode 100644 > index 0000000..f17eb7a > --- /dev/null > +++ b/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2 > @@ -0,0 +1,10 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2023 University of New Hampshire -#} > +{% extends 'containers/fedora.dockerfile.j2' %} > + > +{% block copy_extras -%} > +COPY scripts scripts > +COPY coverity coverity > + > +ENTRYPOINT /scripts/coverity.sh > +{%- endblock copy_extras %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/opensuse.dockerfile.j2 b/containers/template_engine/templates/containers/opensuse.dockerfile.j2 > new file mode 100644 > index 0000000..48d2502 > --- /dev/null > +++ b/containers/template_engine/templates/containers/opensuse.dockerfile.j2 > @@ -0,0 +1,10 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/rpm.dockerfile.j2' %} > + > +{% block pip_installs %} > +{% endblock %} > + > +{% block install_libabigail %} > +{# Install via package manager #} > +{% endblock install_libabigail %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/redhat_family.dockerfile.j2 b/containers/template_engine/templates/containers/redhat_family.dockerfile.j2 > new file mode 100644 > index 0000000..9ae6577 > --- /dev/null > +++ b/containers/template_engine/templates/containers/redhat_family.dockerfile.j2 > @@ -0,0 +1,5 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/rpm.dockerfile.j2' %} > + > +{# All of the distros in the Redhat Linux Lineage, ex: RHEL, Fedora, CentOS #} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/rhel.dockerfile.j2 b/containers/template_engine/templates/containers/rhel.dockerfile.j2 > new file mode 100644 > index 0000000..b50b2e9 > --- /dev/null > +++ b/containers/template_engine/templates/containers/rhel.dockerfile.j2 > @@ -0,0 +1,16 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/redhat_family.dockerfile.j2' %} > + > +{% block pip_installs %} > +RUN python3 -m pip install pyelftools > +{% endblock %} > + > + > +{% block before_meson_after_pip %} > +RUN yum clean all > +{% endblock %} > + > +{% block install_libabigail %} > +{# Install via package manager #} > +{% endblock install_libabigail %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/rhel7.dockerfile.j2 b/containers/template_engine/templates/containers/rhel7.dockerfile.j2 > new file mode 100644 > index 0000000..7045b99 > --- /dev/null > +++ b/containers/template_engine/templates/containers/rhel7.dockerfile.j2 > @@ -0,0 +1,15 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/rhel.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +# repolist is needed to refresh the RHEL repos from the host this is being built on > +RUN yum repolist > +# Yes this next step is gross, there is no better way to enable the repos in the UBI containers. > +RUN sed -i '/\[rhel-7-server-extras-rpms\]/,/^ *\[/ s/enabled\ =\ 0/enabled\ =\ 1/' /etc/yum.repos.d/redhat.repo \ > + && sed -i '/\[rhel-7-server-optional-rpms\]/,/^ *\[/ s/enabled\ =\ 0/enabled\ =\ 1/' /etc/yum.repos.d/redhat.repo > +RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm > +RUN yum update -y > + > +RUN yum groupinstall -y 'Development Tools' > +{% endblock %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/rhel8.dockerfile.j2 b/containers/template_engine/templates/containers/rhel8.dockerfile.j2 > new file mode 100644 > index 0000000..2824bfd > --- /dev/null > +++ b/containers/template_engine/templates/containers/rhel8.dockerfile.j2 > @@ -0,0 +1,15 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/rhel.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +# repolist is needed to refresh the RHEL repos from the host this is being built on > +RUN yum repolist > +RUN yum update -y > +RUN yum config-manager --set-enable codeready-builder-for-rhel-8-$(uname -i)-rpms > + > +# Required to install ccache > +RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm && yum upgrade -y > + > +RUN yum groupinstall -y 'Development Tools' > +{% endblock %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/rhel9.dockerfile.j2 b/containers/template_engine/templates/containers/rhel9.dockerfile.j2 > new file mode 100644 > index 0000000..695f573 > --- /dev/null > +++ b/containers/template_engine/templates/containers/rhel9.dockerfile.j2 > @@ -0,0 +1,19 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/rhel.dockerfile.j2' %} > + > +{% block pre_package_manager %} > +# repolist is needed to refresh the RHEL repos from the host this is being built on > +RUN yum repolist > +RUN yum config-manager --set-enable codeready-builder-for-rhel-9-$(uname -i)-rpms > +RUN yum update -y > + > +# Required to install ccache > +RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && yum upgrade -y > + > +RUN yum groupinstall -y 'Development Tools' > +{% endblock %} > + > +{% block pip_installs %} > +RUN python3 -m pip install pyelftools ninja > +{% endblock %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/rpm.dockerfile.j2 b/containers/template_engine/templates/containers/rpm.dockerfile.j2 > new file mode 100644 > index 0000000..f386b42 > --- /dev/null > +++ b/containers/template_engine/templates/containers/rpm.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/base.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/ubuntu.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu.dockerfile.j2 > new file mode 100644 > index 0000000..c52f866 > --- /dev/null > +++ b/containers/template_engine/templates/containers/ubuntu.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/debian.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2 > new file mode 100644 > index 0000000..59d2c28 > --- /dev/null > +++ b/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2 > @@ -0,0 +1,12 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/ubuntu.dockerfile.j2' %} > + > +{% block pip_installs -%} > +RUN python3 -m pip install --no-cache-dir requests > +{%- endblock pip_installs %} > + > +{% block before_meson_after_pip -%} > +ADD https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip / > +ADD https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip / > +{%- endblock %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2 > new file mode 100644 > index 0000000..ba22471 > --- /dev/null > +++ b/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2 > @@ -0,0 +1,3 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/ubuntu.dockerfile.j2' %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2 > new file mode 100644 > index 0000000..236efbc > --- /dev/null > +++ b/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2 > @@ -0,0 +1,11 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/ubuntu20.04.dockerfile.j2' %} > + > +{% block cross_compilation_setup %} > +# Link ccache to different compilers > + # aarch64 -> ccache > +RUN ln -s $(which ccache) /usr/local/bin/aarch64-linux-gnu-gcc && \ > + # aarch32 -> ccache > + ln -s $(which ccache) /usr/local/bin/arm-linux-gnueabihf-gcc > +{% endblock cross_compilation_setup %} > \ No newline at end of file > diff --git a/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2 > new file mode 100644 > index 0000000..5e940bf > --- /dev/null > +++ b/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2 > @@ -0,0 +1,12 @@ > +{#- SPDX-License-Identifier: BSD-3-Clause -#} > +{#- Copyright (c) 2022 University of New Hampshire -#} > +{% extends 'containers/ubuntu20.04.dockerfile.j2' %} > +{% block cross_compilation_setup %} > +RUN ln -s $(which ccache) /usr/local/bin/gcc-10 > +{% endblock cross_compilation_setup %} > + > +{% block build_abi %} > +# ABI is disabled for this container > + > +FROM {{ build_base_img }} AS {{ target.name }} > +{% endblock build_abi %} > \ No newline at end of file