Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions Dockerfile.rhel10
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
FROM registry.ci.openshift.org/ocp/4.22:rhel-coreos-10
Copy link
Member Author

@ybettan ybettan Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@joepvd
There is no registry.ci.openshift.org/ocp/4.22:base-rhel10 in the release repo.
Should I use registry.ci.openshift.org/ocp/4.22:rhel-coreos-10 or should we add a new registry.ci.openshift.org/ocp/4.22:base-rhel10 image in the CI registry?

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/dnf/vars/releasever)\" }" > /etc/driver-toolkit-release.json

5 changes: 4 additions & 1 deletion Dockerfile → Dockerfile.rhel9
Original file line number Diff line number Diff line change
Expand Up @@ -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); \
Expand Down
4 changes: 4 additions & 0 deletions manifests/image-references
Original file line number Diff line number Diff line change
Expand Up @@ -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