diff --git a/Dockerfile.rhel10 b/Dockerfile.rhel10 new file mode 100644 index 0000000..13f614a --- /dev/null +++ b/Dockerfile.rhel10 @@ -0,0 +1,78 @@ +FROM registry.ci.openshift.org/ocp/4.22:rhel-coreos-10 +ARG KERNEL_VERSION='' +ARG RT_KERNEL_VERSION='' +ARG RHEL_VERSION='' +# If RHEL_VERSION is empty, we infer it from the /etc/os-release file. This is used by OKD as we always want the latest one. +RUN [ "${RHEL_VERSION}" == "" ] && source /etc/os-release && RHEL_VERSION=${VERSION_ID}; echo ${RHEL_VERSION} > /etc/dnf/vars/releasever \ + && dnf config-manager --best --setopt=install_weak_deps=False --save + +# kernel packages needed to build drivers / kmods +RUN dnf -y install \ + kernel-devel${KERNEL_VERSION:+-}${KERNEL_VERSION} \ + kernel-devel-matched${KERNEL_VERSION:+-}${KERNEL_VERSION} \ + kernel-headers${KERNEL_VERSION:+-}${KERNEL_VERSION} \ + kernel-modules${KERNEL_VERSION:+-}${KERNEL_VERSION} \ + kernel-modules-extra${KERNEL_VERSION:+-}${KERNEL_VERSION} + +# real-time kernel packages +# Also, assert that the kernel and kernel-rt rpms come from the same build. Relevant for 9.3+. +RUN if [ $(arch) = x86_64 ]; then \ + dnf -y install \ + kernel-rt-devel${RT_KERNEL_VERSION:+-}${RT_KERNEL_VERSION} \ + kernel-rt-modules${RT_KERNEL_VERSION:+-}${RT_KERNEL_VERSION} \ + kernel-rt-modules-extra${RT_KERNEL_VERSION:+-}${RT_KERNEL_VERSION}; \ + diff --side-by-side <(rpm -qi kernel-core | grep 'Source RPM') <(rpm -qi kernel-rt-core | grep 'Source RPM'); \ + fi + +# 64k-pages kernel packages for aarch64 +# Headers are not compiled, so there is no kernel-64k-headers packages, +# and compilation will use the headers from kernel-headers +RUN if [ $(arch) = aarch64 ]; then \ + dnf -y install \ + kernel-64k-devel${KERNEL_VERSION:+-}${KERNEL_VERSION} \ + kernel-64k-modules${KERNEL_VERSION:+-}${KERNEL_VERSION} \ + kernel-64k-modules-extra${KERNEL_VERSION:+-}${KERNEL_VERSION}; \ + fi + +RUN dnf -y install kernel-rpm-macros + +# Additional packages that are mandatory for driver-containers +RUN dnf -y install elfutils-libelf-devel kmod binutils kabi-dw glibc + +# Find and install the GCC version used to compile the kernel +# If it cannot be found (fails on some architectures), install the default gcc +RUN export INSTALLED_KERNEL=$(rpm -q --qf "%{VERSION}-%{RELEASE}.%{ARCH}" kernel-devel) && \ + GCC_VERSION=$(cat /lib/modules/${INSTALLED_KERNEL}/config | grep -Eo "gcc \(GCC\) ([0-9\.]+)" | grep -Eo "([0-9\.]+)") && \ + dnf -y install gcc-${GCC_VERSION} gcc-c++-${GCC_VERSION} || dnf -y install gcc gcc-c++ + +# Additional packages that are needed for a subset (e.g DPDK) of driver-containers +RUN dnf -y install xz diffutils flex bison + +# Packages needed to build driver-containers +RUN dnf -y install git make rpm-build + +# Packages needed to sign and run externally build kernel modules +RUN if [ $(arch) == "x86_64" ] || [ $(arch) == "aarch64" ]; then \ + ARCH_DEP_PKGS="mokutil"; fi \ + && dnf -y install openssl keyutils $ARCH_DEP_PKGS + +RUN dnf clean all + +COPY manifests /manifests + +ARG TAGS='' +RUN if echo "${TAGS:-}" | grep -q scos > /dev/null 2>&1; then sed -i 's/rhel-coreos/stream-coreos/g' /manifests/*; fi + +LABEL io.k8s.description="driver-toolkit is a container with the kernel packages necessary for building driver containers for deploying kernel modules/drivers on OpenShift" \ + name="driver-toolkit" \ + io.openshift.release.operator=true \ + version="0.1" \ + io.openshift.os.streamclass=rhel-10 \ + kernel-version=${KERNEL_VERSION} \ + kernel-rt-version=${RT_KERNEL_VERSION} + +# Last layer for metadata for mapping the driver-toolkit to a specific kernel version +RUN export INSTALLED_KERNEL=$(rpm -q --qf "%{VERSION}-%{RELEASE}.%{ARCH}" kernel-devel); \ + export INSTALLED_RT_KERNEL=$(rpm -q --qf "%{VERSION}-%{RELEASE}.%{ARCH}+rt" kernel-rt-core); \ + echo "{ \"KERNEL_VERSION\": \"${INSTALLED_KERNEL}\", \"RT_KERNEL_VERSION\": \"${INSTALLED_RT_KERNEL}\", \"RHEL_VERSION\": \"$( /etc/driver-toolkit-release.json + diff --git a/Dockerfile b/Dockerfile.rhel9 similarity index 96% rename from Dockerfile rename to Dockerfile.rhel9 index e5001a3..7afb10a 100644 --- a/Dockerfile +++ b/Dockerfile.rhel9 @@ -66,7 +66,10 @@ RUN if echo "${TAGS:-}" | grep -q scos > /dev/null 2>&1; then sed -i 's/rhel-cor LABEL io.k8s.description="driver-toolkit is a container with the kernel packages necessary for building driver containers for deploying kernel modules/drivers on OpenShift" \ name="driver-toolkit" \ io.openshift.release.operator=true \ - version="0.1" + version="0.1" \ + io.openshift.os.streamclass=rhel-9 \ + kernel-version=${KERNEL_VERSION} \ + kernel-rt-version=${RT_KERNEL_VERSION} # Last layer for metadata for mapping the driver-toolkit to a specific kernel version RUN export INSTALLED_KERNEL=$(rpm -q --qf "%{VERSION}-%{RELEASE}.%{ARCH}" kernel-devel); \ diff --git a/manifests/image-references b/manifests/image-references index 8b12c3b..ded245b 100644 --- a/manifests/image-references +++ b/manifests/image-references @@ -10,3 +10,7 @@ spec: from: kind: DockerImage name: example.com/image-reference-placeholder:rhel-coreos + - name: rhel-coreos-10 + from: + kind: DockerImage + name: example.com/image-reference-placeholder:rhel-coreos-10