DPDK CI discussions
 help / color / mirror / Atom feed
From: Aaron Conole <aconole@redhat.com>
To: Adam Hassick <ahassick@iol.unh.edu>
Cc: ci@dpdk.org,  alialnu@nvidia.com,  Owen Hilyard <ohilyard@iol.unh.edu>
Subject: Re: [PATCH v8 4/6] containers/templates: Templates for Dockerfiles
Date: Fri, 04 Aug 2023 10:02:11 -0400	[thread overview]
Message-ID: <f7tpm426h3w.fsf@redhat.com> (raw)
In-Reply-To: <20230717210815.29737-5-ahassick@iol.unh.edu> (Adam Hassick's message of "Mon, 17 Jul 2023 17:08:13 -0400")

Adam Hassick <ahassick@iol.unh.edu> writes:

> From: Owen Hilyard <ohilyard@iol.unh.edu>
>
> 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 <ohilyard@iol.unh.edu>
> Signed-off-by: Adam Hassick <ahassick@iol.unh.edu>
> ---
>  .../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


  reply	other threads:[~2023-08-04 14:02 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-17 21:08 [PATCH v8 0/6] Community Lab Containers and Builder Engine Adam Hassick
2023-07-17 21:08 ` [PATCH v8 1/6] containers/docs: Add container builder start Adam Hassick
2023-07-17 21:08 ` [PATCH v8 2/6] containers/inventory: Add inventory for container builder Adam Hassick
2023-08-04 13:58   ` Aaron Conole
2023-08-04 19:30     ` Adam Hassick
2023-07-17 21:08 ` [PATCH v8 3/6] containers/builder: Dockerfile creation script Adam Hassick
2023-08-04 13:59   ` Aaron Conole
2023-07-17 21:08 ` [PATCH v8 4/6] containers/templates: Templates for Dockerfiles Adam Hassick
2023-08-04 14:02   ` Aaron Conole [this message]
2023-08-04 19:34     ` Adam Hassick
2023-07-17 21:08 ` [PATCH v8 5/6] containers/container_builder: Container for python scripts Adam Hassick
2023-08-04 14:03   ` Aaron Conole
2023-07-17 21:08 ` [PATCH v8 6/6] containers/Makefile: Makefile to automate builds Adam Hassick
2023-08-04 14:06   ` Aaron Conole
2023-07-28 20:38 ` [PATCH v8 0/6] Community Lab Containers and Builder Engine Aaron Conole

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f7tpm426h3w.fsf@redhat.com \
    --to=aconole@redhat.com \
    --cc=ahassick@iol.unh.edu \
    --cc=alialnu@nvidia.com \
    --cc=ci@dpdk.org \
    --cc=ohilyard@iol.unh.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).