<div dir="ltr"><div>Using a Git URL as a parameter for an ADD directive is only supported by Docker. This comment is a remnant from when we were developing with Docker, prior to switching over to Podman.<br></div>I will update the copyright dates.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 4, 2023 at 10:02 AM Aaron Conole <<a href="mailto:aconole@redhat.com">aconole@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Adam Hassick <<a href="mailto:ahassick@iol.unh.edu" target="_blank">ahassick@iol.unh.edu</a>> writes:<br>
<br>
> From: Owen Hilyard <<a href="mailto:ohilyard@iol.unh.edu" target="_blank">ohilyard@iol.unh.edu</a>><br>
><br>
> Adds a variety of extensible templates used to create the Dockerfiles<br>
> for each target. All templates inherit from base, and most distros and<br>
> distro families have their own templates that are used to define common<br>
> functionality. Multiple versions of a distro may use a single template<br>
> if they are similar enough (ex: fedora).<br>
><br>
> Signed-off-by: Owen Hilyard <<a href="mailto:ohilyard@iol.unh.edu" target="_blank">ohilyard@iol.unh.edu</a>><br>
> Signed-off-by: Adam Hassick <<a href="mailto:ahassick@iol.unh.edu" target="_blank">ahassick@iol.unh.edu</a>><br>
> ---<br>
> .../templates/containers.makefile.j2 | 73 +++++++++++<br>
> .../templates/containers/alpine.dockerfile.j2 | 3 +<br>
> .../templates/containers/arch.dockerfile.j2 | 39 ++++++<br>
> .../templates/containers/base.dockerfile.j2 | 120 ++++++++++++++++++<br>
> .../containers/centos8.dockerfile.j2 | 21 +++<br>
> .../containers/centos9.dockerfile.j2 | 17 +++<br>
> .../templates/containers/debian.dockerfile.j2 | 7 +<br>
> .../containers/debian10.dockerfile.j2 | 3 +<br>
> .../containers/debian11.dockerfile.j2 | 3 +<br>
> .../debian11_arm_ipsec.dockerfile.j2 | 16 +++<br>
> .../containers/debian_bullseye.dockerfile.j2 | 3 +<br>
> .../containers/debian_buster.dockerfile.j2 | 3 +<br>
> .../templates/containers/fedora.dockerfile.j2 | 11 ++<br>
> .../containers/fedora36_clang.dockerfile.j2 | 7 +<br>
> .../containers/fedora_clang.dockerfile.j2 | 8 ++<br>
> .../containers/fedora_coverity.dockerfile.j2 | 10 ++<br>
> .../containers/opensuse.dockerfile.j2 | 10 ++<br>
> .../containers/redhat_family.dockerfile.j2 | 5 +<br>
> .../templates/containers/rhel.dockerfile.j2 | 16 +++<br>
> .../templates/containers/rhel7.dockerfile.j2 | 15 +++<br>
> .../templates/containers/rhel8.dockerfile.j2 | 15 +++<br>
> .../templates/containers/rhel9.dockerfile.j2 | 19 +++<br>
> .../templates/containers/rpm.dockerfile.j2 | 3 +<br>
> .../templates/containers/ubuntu.dockerfile.j2 | 3 +<br>
> .../containers/ubuntu20.04.dockerfile.j2 | 12 ++<br>
> .../containers/ubuntu22.04.dockerfile.j2 | 3 +<br>
> .../containers/ubuntu_cross.dockerfile.j2 | 11 ++<br>
> .../containers/ubuntu_sve.dockerfile.j2 | 12 ++<br>
> 28 files changed, 468 insertions(+)<br>
> create mode 100644 containers/template_engine/templates/containers.makefile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/alpine.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/arch.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/base.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/centos8.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/centos9.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/debian.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/debian10.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/debian11.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/debian_buster.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/fedora.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/fedora_clang.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/opensuse.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/redhat_family.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/rhel.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/rhel7.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/rhel8.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/rhel9.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/rpm.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/ubuntu.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2<br>
> create mode 100644 containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2<br>
><br>
> diff --git a/containers/template_engine/templates/containers.makefile.j2 b/containers/template_engine/templates/containers.makefile.j2<br>
> new file mode 100644<br>
> index 0000000..900bfc8<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers.makefile.j2<br>
> @@ -0,0 +1,73 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
<br>
2023? This is everywhere set to 2022, but I guess it should really be<br>
2023, or 2022,2023<br>
<br>
> +#################### START VARS #################<br>
> +DPDK_CI_CONTAINER_BUILDER_PROGRAM?=podman<br>
> +DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS?=<br>
> +DPDK_CI_CONTAINERS_REGISTRY_HOSTNAME?={{ registry_hostname }}<br>
> +<br>
> +#################### END VARS #################<br>
> +<br>
> +.PHONY: build_all<br>
> +build_all:{% for container in dockerfiles.targets %} build_{{ <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a> }}{% endfor %}<br>
> +<br>
> +.PHONY: push_image_all<br>
> +push_image_all:{% for container in dockerfiles.targets %} push_image_{{ <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a> }}{% endfor %}<br>
> +<br>
> +.PHONY: push_manifest_all<br>
> +push_manifest_all:<br>
> +{%- if is_builder %}<br>
> + echo "Disabled: Builder mode was enabled."<br>
> +{%- else -%}<br>
> + {% for container in dockerfiles.targets %} push_manifest_{{ <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a> }}{% endfor %}<br>
> +{%- endif %}<br>
> +<br>
> +{%- macro push_indx(container, is_docker) %}<br>
> + {%- for tag in container.tags -%}<br>
> + {%- set formatted_tag = tag | replace('$R', registry_hostname) | replace('$T', timestamp) | replace('$N', <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a>) | replace(':', '\\:') -%}<br>
> + {%- set trunk_tag = formatted_tag.split('/')[1] -%}<br>
> + {%- if is_docker -%}<br>
> + {%- set ref_tag = formatted_tag -%}<br>
> + {%- set push_xargs = '' -%}<br>
> + {%- else -%}<br>
> + {%- set ref_tag = trunk_tag -%}<br>
> + {%- set push_xargs = ' docker\://%s' | format(formatted_tag) -%}<br>
> + {%- endif -%}<br>
> + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest rm {{ ref_tag }} || echo "Image {{ ref_tag }} did not exist initially."<br>
> + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest create {{ ref_tag }}<br>
> + {%- for platform in container.platforms -%}<br>
> + {%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a>, platform.replace('/', ''), timestamp) %} \<br>
> + {{ plat_tag -}} {% endfor %}<br>
> + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) manifest push $(DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS) {{ ref_tag }} {{- push_xargs }}<br>
> + {% endfor -%}<br>
> +{% endmacro %}<br>
> +<br>
> +{% for container in dockerfiles.targets %}<br>
> +#################### START {{ <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a> }} #####################<br>
> + {% set container_id = <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a> %}<br>
> +.PHONY: build_{{ container_id }}<br>
> +<br>
> +build_{{ container_id }}:<br>
> + {%- for platform in container.platforms -%}<br>
> + {%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container_id, platform.replace('/', ''), timestamp) %}<br>
> + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) build --target {{<a href="http://container.name" rel="noreferrer" target="_blank">container.name</a>}} --platform {{ platform }} \<br>
> + -t {{ plat_tag }} -f {{ container_id }}.dockerfile $(CURDIR) {%- endfor %}<br>
> +<br>
> +.PHONY: push_image_{{ container_id }}<br>
> +push_image_{{ container_id }}: build_{{ container_id }}<br>
> + {%- for platform in container.platforms -%}<br>
> + {%- set plat_tag = "%s/%s\:image-%s-%s" | format(registry_hostname, container_id, platform.replace('/', ''), timestamp) %}<br>
> + $(DPDK_CI_CONTAINER_BUILDER_PROGRAM) push $(DPDK_CI_CONTAINERS_EXTRA_PUSH_ARGS) {{ plat_tag }}<br>
> + {%- endfor %}<br>
> +{% if not is_builder %}<br>
> +.PHONY: push_manifest_{{ container_id }}<br>
> +push_manifest_{{ container_id }}:<br>
> +{%- if host_arch_only and not is_builder %} push_image_{{ container_id }}{% endif %}<br>
> +ifeq ($(DPDK_CI_CONTAINER_BUILDER_PROGRAM), docker)<br>
> + {{ push_indx(container, true) }}<br>
> +else<br>
> + {{ push_indx(container, false) }}<br>
> +endif<br>
> +{% endif %}<br>
> +<br>
> +#################### END {{ <a href="http://container.name" rel="noreferrer" target="_blank">container.name</a> }} #####################<br>
> +{% endfor %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/alpine.dockerfile.j2 b/containers/template_engine/templates/containers/alpine.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..f386b42<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/alpine.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/base.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/arch.dockerfile.j2 b/containers/template_engine/templates/containers/arch.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..edfa6d4<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/arch.dockerfile.j2<br>
> @@ -0,0 +1,39 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/base.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +RUN pacman-key --init<br>
> +RUN pacman -Sy --noconfirm archlinux-keyring && pacman -Su --noconfirm<br>
> +{% endblock %}<br>
> +<br>
> +<br>
> +{% block pip_installs %}<br>
> +RUN mkdir -p ~/.config/pip \<br>
> + && printf '[global]\nbreak-system-packages = true\n' >> ~/.config/pip/pip.conf \<br>
> + && python3 -m pip install ninja pyelftools<br>
> +{% endblock %}<br>
> +<br>
> +{% block before_meson_after_pip %}<br>
> +# add user for building aur packages<br>
> +RUN useradd builder && \<br>
> + mkdir /home/builder && \<br>
> + chown builder:builder /home/builder<br>
> +<br>
> +# switch user to make packages from aur<br>
> +USER builder<br>
> +<br>
> +# clone and make rdma-core packages<br>
> +RUN cd /home/builder && git clone <a href="https://aur.archlinux.org/rdma-core.git" rel="noreferrer" target="_blank">https://aur.archlinux.org/rdma-core.git</a><br>
> +RUN cd /home/builder/rdma-core && makepkg<br>
> +<br>
> +USER root<br>
> +<br>
> +RUN cd /home/builder/rdma-core && pacman --noconfirm -U rdma-core-*.pkg.tar.*<br>
> +<br>
> +RUN rm -rf /home/builder<br>
> +{% endblock %}<br>
> +<br>
> +{% block install_libabigail %}<br>
> +{# Installed via package manager #}<br>
> +{% endblock install_libabigail %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/base.dockerfile.j2 b/containers/template_engine/templates/containers/base.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..92f5cb5<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/base.dockerfile.j2<br>
> @@ -0,0 +1,120 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +# ------------------------ Begin {{ <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> }} ------------------------------------------------<br>
> +<br>
> +{%- set build_base_img = <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> + "_base" %}<br>
> +FROM {{ target.base_image }} as {% if build_abi and not target.force_disable_abi -%}<br>
> +{{ build_base_img }}<br>
> +{%- else -%}<br>
> +{{ <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> }}<br>
> +{%- endif %}<br>
> +<br>
> +ENV CCACHE_DIR=/ccache/<br>
> +ENV CCACHE_COMPILERCHECK=content<br>
> +ENV CCACHE_NAMESPACE="{{ <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> }}-{{ build_timestamp }}"<br>
> +ENV BUILD_TIMESTAMP="{{ build_timestamp }}"<br>
> +<br>
> +{% block extra_env_vars -%}{%- endblock extra_env_vars %}<br>
> +<br>
> +{% block pre_package_manager -%}{%- endblock pre_package_manager %}<br>
> +<br>
> +# Install packages<br>
> +RUN {{ target.package_manager_command }} {{ target.packages | join(" ") }}<br>
> +<br>
> +# Installs from pip<br>
> +{% block pip_installs -%}{%- endblock pip_installs %}<br>
> +<br>
> +# Extra setup after python libs are installed<br>
> +{% block before_meson_after_pip -%}{%- endblock %}<br>
> +<br>
> +# install libabigail<br>
> +{% block install_libabigail %}<br>
> +{% if build_libabigail and build_abi and (not "force_disable_abi" in target or not target.force_disable_abi) %}<br>
> +COPY libabigail /libabigail<br>
> +RUN --mount=type=cache,target=/ccache,z cd /libabigail<br>
> +{%- if "libabigail_revision" in target %} && git checkout {{ target.libabigail_revision }} {%- endif %} && mkdir build && autoreconf -i && cd build && ../configure --prefix=/usr/local && make all install && \<br>
> + ldconfig && cd / && rm -rf /libabigail<br>
> +{% else %}<br>
> +# libabigail build is disabled<br>
> +{% endif %}<br>
> +{% endblock install_libabigail %}<br>
> +<br>
> +# cross compilation setup<br>
> +{% block cross_compilation_setup %}<br>
> +{% endblock cross_compilation_setup %}<br>
> +<br>
> +# Copy externally pulled DPDK into the container<br>
> +RUN mkdir /dpdk<br>
> +COPY dpdk-stable /dpdk-stable<br>
> +<br>
> +# Install meson<br>
> +{% block install_meson %}<br>
> +# Install meson from dpdk main<br>
> +# Writes to the mount are discarded once the container is built and is not shared with other containers or the host<br>
> +COPY dpdk /dpdk<br>
> +RUN --mount=type=cache,target=/ccache,z cd /dpdk && chown -R root /dpdk && git checkout main && sh .ci/linux-setup.sh<br>
> +RUN rm -rf /dpdk<br>
> +{% endblock install_meson %}<br>
> +<br>
> +ENV RTE_KERNELDIR CHANGE_ME<br>
> +<br>
> +RUN mkdir /references<br>
> +WORKDIR /references<br>
> +RUN touch abi_versions<br>
> +# build the abi<br>
> +{% if build_abi and not target.force_disable_abi %}<br>
> + {% block build_abi %}<br>
> + {% for version in abi.versions %}<br>
> + {%- set abi_version_str = (version.abi_version.major|string) + "." + (version.abi_version.minor|string) -%}<br>
> + {%- set abi_stage_name = <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> + "_" + abi_version_str -%}<br>
> + {%- set abi_folder = "/references/" + abi_version_str + "_reference" %}<br>
> + {%- 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 -%}<br>
> + {% if meets_version_requirements %}<br>
> +<br>
> +FROM {{ build_base_img }} AS {{ abi_stage_name }}<br>
> +RUN echo '{{ abi_version_str }}' >> abi_versions<br>
> +RUN mkdir -p {{ abi_folder }}<br>
> +# compile DPDK<br>
> +RUN --mount=type=cache,target=/ccache,z \<br>
> + 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 && \<br>
> + meson /dpdk-stable /dpdk-stable/build {% if "cross_file" in target -%}<br>
> + --cross-file=/dpdk-stable/{{ target.cross_file }}<br>
> + {%- endif %} -Dexamples=all --buildtype=debugoptimized && DESTDIR={{ abi_folder }} ninja {% if ninja_workers -%}<br>
> + -j {{ ninja_workers }} {% endif -%} -C /dpdk-stable/build install && \<br>
> + {%- if (abi_version_str == '22.0' or abi_version_str == '23.10') %}<br>
> + bash /dpdk-stable/devtools/gen-abi.sh {{ abi_folder }} && mv {{ abi_folder }}/usr/local/include {{ abi_folder }} && \<br>
> + rm -rf {{ abi_folder }}/usr<br>
> + {%- else %}<br>
> + find {{ abi_folder }}/usr/local -name '*.a' -delete && rm -rf {{ abi_folder }}/usr/local/bin && rm -rf {{ abi_folder }}/usr/local/share<br>
> + {%- endif %} && rm -rf /dpdk-stable/build<br>
> + {% endif %}<br>
> + {% endfor %}<br>
> +<br>
> +FROM {{ build_base_img }} AS {{ <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> }}<br>
> + {% for version in abi.versions %}<br>
> + {%- set abi_version_str = (version.abi_version.major|string) + "." + (version.abi_version.minor|string) -%}<br>
> + {%- set abi_stage_name = <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> + "_" + abi_version_str -%}<br>
> + {%- set abi_folder = "/references/" + abi_version_str + "_reference" %}<br>
> + {%- 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 -%}<br>
> + {% if meets_version_requirements %}<br>
> +RUN mkdir -p {{ abi_folder }}<br>
> +COPY --from={{ abi_stage_name }} {{ abi_folder }} {{ abi_folder }}<br>
> + {%- endif %}<br>
> + {%- endfor %}<br>
> + {% endblock build_abi %}<br>
> +RUN chmod -R 777 .<br>
> +{% else %}<br>
> +{% endif %}<br>
> +<br>
> +# Embed extra target information into the container<br>
> +{% if 'extra_information' in target %}<br>
> +RUN echo '{{ target.extra_information | tojson }}' > /container_info.json<br>
> +{% endif %}<br>
> +<br>
> +WORKDIR /<br>
> +<br>
> +{% block copy_extras -%}<br>
> +COPY scripts scripts<br>
> +{%- endblock copy_extras %}<br>
> +<br>
> +# ------------------------ End {{ <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> }} ------------------------------------------------<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/centos8.dockerfile.j2 b/containers/template_engine/templates/containers/centos8.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..bda024a<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/centos8.dockerfile.j2<br>
> @@ -0,0 +1,21 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/redhat_family.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +# For ninja-build, meson, libmnl-devel, nasm, and CUnit-devel<br>
> +RUN dnf install -y dnf-command\(config-manager\) dnf-plugins-core<br>
> +# Install EPEL repository for ccache<br>
> +RUN dnf install -y <a href="https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm" rel="noreferrer" target="_blank">https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm</a><br>
> +# Enable powertools repository for libpcap-devel<br>
> +RUN dnf config-manager --set-enabled powertools<br>
> +{% endblock %}<br>
> +<br>
> +{% block pip_installs %}<br>
> +RUN python3 -m pip install --upgrade pip<br>
> +RUN python3 -m pip install pyelftools ninja<br>
> +{% endblock %}<br>
> +<br>
> +{% block install_libabigail %}<br>
> +{# Install via package manager #}<br>
> +{% endblock install_libabigail %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/centos9.dockerfile.j2 b/containers/template_engine/templates/containers/centos9.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..8cacb99<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/centos9.dockerfile.j2<br>
> @@ -0,0 +1,17 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/redhat_family.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +# For ninja-build, meson, libmnl-devel, nasm, and CUnit-devel<br>
> +RUN dnf install -y dnf-command\(config-manager\) dnf-plugins-core<br>
> +# Install EPEL repository for ccache<br>
> +RUN dnf install -y <a href="https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm" rel="noreferrer" target="_blank">https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm</a><br>
> +# Enable powertools repository for libpcap-devel<br>
> +RUN dnf config-manager --set-enabled crb<br>
> +{% endblock %}<br>
> +<br>
> +{% block pip_installs %}<br>
> +RUN python3 -m pip install --upgrade pip<br>
> +RUN python3 -m pip install pyelftools ninja<br>
> +{% endblock %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/debian.dockerfile.j2 b/containers/template_engine/templates/containers/debian.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..74b56b6<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/debian.dockerfile.j2<br>
> @@ -0,0 +1,7 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/base.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +ENV DEBIAN_FRONTEND=noninteractive<br>
> +{% endblock %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/debian10.dockerfile.j2 b/containers/template_engine/templates/containers/debian10.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..c52f866<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/debian10.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/debian.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/debian11.dockerfile.j2 b/containers/template_engine/templates/containers/debian11.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..c52f866<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/debian11.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/debian.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2 b/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..32fad51<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/debian11_arm_ipsec.dockerfile.j2<br>
> @@ -0,0 +1,16 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/debian11.dockerfile.j2' %}<br>
> +<br>
> +{% block before_meson_after_pip %}<br>
> +WORKDIR /opt<br>
> +<br>
> +# I would use ADD on a git repo, but the support for this was added so recently it doesn't run on my machine.<br>
<br>
What is the minimum supported version for that?<br>
<br>
> +RUN git clone --depth 1 --branch SECLIB-IPSEC-2022.05.25 <a href="https://git.gitlab.arm.com/arm-reference-solutions/ipsec-mb.git" rel="noreferrer" target="_blank">https://git.gitlab.arm.com/arm-reference-solutions/ipsec-mb.git</a><br>
> +<br>
> +WORKDIR /opt/ipsec-mb<br>
> +RUN make -j $(nproc) && make install<br>
> +<br>
> +WORKDIR /<br>
> +<br>
> +{% endblock before_meson_after_pip %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2 b/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..c52f866<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/debian_bullseye.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/debian.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/debian_buster.dockerfile.j2 b/containers/template_engine/templates/containers/debian_buster.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..c52f866<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/debian_buster.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/debian.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/fedora.dockerfile.j2 b/containers/template_engine/templates/containers/fedora.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..97e438e<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/fedora.dockerfile.j2<br>
> @@ -0,0 +1,11 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/redhat_family.dockerfile.j2' %}<br>
> +<br>
> +{%- block pip_installs -%}<br>
> +RUN python3 -m pip install ninja<br>
> +{%- endblock -%}<br>
> +<br>
> +{% block install_libabigail %}<br>
> +# installed by package manager<br>
> +{% endblock install_libabigail %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2 b/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..bc104ba<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/fedora36_clang.dockerfile.j2<br>
> @@ -0,0 +1,7 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/fedora.dockerfile.j2' %}<br>
> +<br>
> +{% block extra_env_vars -%}<br>
> +ENV CC=clang<br>
> +{%- endblock extra_env_vars %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2 b/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..18ea757<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/fedora_clang.dockerfile.j2<br>
> @@ -0,0 +1,8 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/fedora.dockerfile.j2' %}<br>
> +<br>
> +{% block extra_env_vars -%}<br>
> +#ENV CCACHE_CC=clang<br>
> +ENV CC=clang<br>
> +{%- endblock extra_env_vars %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2 b/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..f17eb7a<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/fedora_coverity.dockerfile.j2<br>
> @@ -0,0 +1,10 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2023 University of New Hampshire -#}<br>
> +{% extends 'containers/fedora.dockerfile.j2' %}<br>
> +<br>
> +{% block copy_extras -%}<br>
> +COPY scripts scripts<br>
> +COPY coverity coverity<br>
> +<br>
> +ENTRYPOINT /scripts/coverity.sh<br>
> +{%- endblock copy_extras %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/opensuse.dockerfile.j2 b/containers/template_engine/templates/containers/opensuse.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..48d2502<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/opensuse.dockerfile.j2<br>
> @@ -0,0 +1,10 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/rpm.dockerfile.j2' %}<br>
> +<br>
> +{% block pip_installs %}<br>
> +{% endblock %}<br>
> +<br>
> +{% block install_libabigail %}<br>
> +{# Install via package manager #}<br>
> +{% endblock install_libabigail %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/redhat_family.dockerfile.j2 b/containers/template_engine/templates/containers/redhat_family.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..9ae6577<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/redhat_family.dockerfile.j2<br>
> @@ -0,0 +1,5 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/rpm.dockerfile.j2' %}<br>
> +<br>
> +{# All of the distros in the Redhat Linux Lineage, ex: RHEL, Fedora, CentOS #}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/rhel.dockerfile.j2 b/containers/template_engine/templates/containers/rhel.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..b50b2e9<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/rhel.dockerfile.j2<br>
> @@ -0,0 +1,16 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/redhat_family.dockerfile.j2' %}<br>
> +<br>
> +{% block pip_installs %}<br>
> +RUN python3 -m pip install pyelftools<br>
> +{% endblock %}<br>
> +<br>
> +<br>
> +{% block before_meson_after_pip %}<br>
> +RUN yum clean all<br>
> +{% endblock %}<br>
> +<br>
> +{% block install_libabigail %}<br>
> +{# Install via package manager #}<br>
> +{% endblock install_libabigail %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/rhel7.dockerfile.j2 b/containers/template_engine/templates/containers/rhel7.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..7045b99<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/rhel7.dockerfile.j2<br>
> @@ -0,0 +1,15 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/rhel.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +# repolist is needed to refresh the RHEL repos from the host this is being built on<br>
> +RUN yum repolist<br>
> +# Yes this next step is gross, there is no better way to enable the repos in the UBI containers.<br>
> +RUN sed -i '/\[rhel-7-server-extras-rpms\]/,/^ *\[/ s/enabled\ =\ 0/enabled\ =\ 1/' /etc/yum.repos.d/redhat.repo \<br>
> + && sed -i '/\[rhel-7-server-optional-rpms\]/,/^ *\[/ s/enabled\ =\ 0/enabled\ =\ 1/' /etc/yum.repos.d/redhat.repo<br>
> +RUN yum install -y <a href="https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm" rel="noreferrer" target="_blank">https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm</a><br>
> +RUN yum update -y<br>
> +<br>
> +RUN yum groupinstall -y 'Development Tools'<br>
> +{% endblock %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/rhel8.dockerfile.j2 b/containers/template_engine/templates/containers/rhel8.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..2824bfd<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/rhel8.dockerfile.j2<br>
> @@ -0,0 +1,15 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/rhel.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +# repolist is needed to refresh the RHEL repos from the host this is being built on<br>
> +RUN yum repolist<br>
> +RUN yum update -y<br>
> +RUN yum config-manager --set-enable codeready-builder-for-rhel-8-$(uname -i)-rpms<br>
> +<br>
> +# Required to install ccache<br>
> +RUN yum install -y <a href="https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm" rel="noreferrer" target="_blank">https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm</a> && yum upgrade -y<br>
> +<br>
> +RUN yum groupinstall -y 'Development Tools'<br>
> +{% endblock %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/rhel9.dockerfile.j2 b/containers/template_engine/templates/containers/rhel9.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..695f573<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/rhel9.dockerfile.j2<br>
> @@ -0,0 +1,19 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/rhel.dockerfile.j2' %}<br>
> +<br>
> +{% block pre_package_manager %}<br>
> +# repolist is needed to refresh the RHEL repos from the host this is being built on<br>
> +RUN yum repolist<br>
> +RUN yum config-manager --set-enable codeready-builder-for-rhel-9-$(uname -i)-rpms<br>
> +RUN yum update -y<br>
> +<br>
> +# Required to install ccache<br>
> +RUN yum install -y <a href="https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm" rel="noreferrer" target="_blank">https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm</a> && yum upgrade -y<br>
> +<br>
> +RUN yum groupinstall -y 'Development Tools'<br>
> +{% endblock %}<br>
> +<br>
> +{% block pip_installs %}<br>
> +RUN python3 -m pip install pyelftools ninja<br>
> +{% endblock %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/rpm.dockerfile.j2 b/containers/template_engine/templates/containers/rpm.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..f386b42<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/rpm.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/base.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/ubuntu.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..c52f866<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/ubuntu.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/debian.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..59d2c28<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/ubuntu20.04.dockerfile.j2<br>
> @@ -0,0 +1,12 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/ubuntu.dockerfile.j2' %}<br>
> +<br>
> +{% block pip_installs -%}<br>
> +RUN python3 -m pip install --no-cache-dir requests<br>
> +{%- endblock pip_installs %}<br>
> +<br>
> +{% block before_meson_after_pip -%}<br>
> +ADD <a href="https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip" rel="noreferrer" target="_blank">https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip</a> /<br>
> +ADD <a href="https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip" rel="noreferrer" target="_blank">https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip</a> /<br>
> +{%- endblock %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..ba22471<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/ubuntu22.04.dockerfile.j2<br>
> @@ -0,0 +1,3 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/ubuntu.dockerfile.j2' %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..236efbc<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/ubuntu_cross.dockerfile.j2<br>
> @@ -0,0 +1,11 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/ubuntu20.04.dockerfile.j2' %}<br>
> +<br>
> +{% block cross_compilation_setup %}<br>
> +# Link ccache to different compilers<br>
> + # aarch64 -> ccache<br>
> +RUN ln -s $(which ccache) /usr/local/bin/aarch64-linux-gnu-gcc && \<br>
> + # aarch32 -> ccache<br>
> + ln -s $(which ccache) /usr/local/bin/arm-linux-gnueabihf-gcc<br>
> +{% endblock cross_compilation_setup %}<br>
> \ No newline at end of file<br>
> diff --git a/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2 b/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2<br>
> new file mode 100644<br>
> index 0000000..5e940bf<br>
> --- /dev/null<br>
> +++ b/containers/template_engine/templates/containers/ubuntu_sve.dockerfile.j2<br>
> @@ -0,0 +1,12 @@<br>
> +{#- SPDX-License-Identifier: BSD-3-Clause -#}<br>
> +{#- Copyright (c) 2022 University of New Hampshire -#}<br>
> +{% extends 'containers/ubuntu20.04.dockerfile.j2' %}<br>
> +{% block cross_compilation_setup %}<br>
> +RUN ln -s $(which ccache) /usr/local/bin/gcc-10<br>
> +{% endblock cross_compilation_setup %}<br>
> +<br>
> +{% block build_abi %}<br>
> +# ABI is disabled for this container<br>
> +<br>
> +FROM {{ build_base_img }} AS {{ <a href="http://target.name" rel="noreferrer" target="_blank">target.name</a> }}<br>
> +{% endblock build_abi %}<br>
> \ No newline at end of file<br>
<br>
</blockquote></div><br clear="all"><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div><b><span style="background-color:rgb(255,255,255)"><span style="color:rgb(102,102,102)">Adam Hassick</span></span></b><br></div><span style="color:rgb(102,102,102)"></span></div><div><span style="color:rgb(102,102,102)">Senior Developer</span></div><div><span style="color:rgb(102,102,102)"><span style="color:rgb(11,83,148)"><span style="background-color:rgb(255,255,255)">UNH InterOperability Lab</span></span></span><span style="color:rgb(102,102,102)"></span></div><div><span style="color:rgb(102,102,102)"><a href="mailto:ahassick@iol.unh.edu" target="_blank">ahassick@iol.unh.edu</a><br></span></div><div><span style="color:rgb(102,102,102)"><a href="https://www.iol.unh.edu/" target="_blank">iol.unh.edu</a><br></span></div>+1 (603) 475-8248<br></div></div>