-
Notifications
You must be signed in to change notification settings - Fork 8
/
RHEL_Dockerfile
152 lines (117 loc) · 4.73 KB
/
RHEL_Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Common (multistage) args
ARG D_OS="rhel9.2"
ARG D_ARCH="x86_64"
ARG D_CONTAINER_VER="0"
ARG D_DOCA_VERSION="2.9.1"
ARG D_OFED_VERSION="24.10-1.1.4.0"
ARG D_KERNEL_VER="5.14.0-284.32.1.el9_2.x86_64"
ARG D_OFED_SRC_DOWNLOAD_PATH="/run/mellanox/src"
ARG OFED_SRC_LOCAL_DIR=${D_OFED_SRC_DOWNLOAD_PATH}/MLNX_OFED_SRC-${D_OFED_VERSION}
# Final clean image of precompiled driver container
ARG D_FINAL_BASE_IMAGE=registry.access.redhat.com/ubi9/ubi:latest
##################################################################
# Stage: Minimal base image update and install common requirements
# DTK base image (below example for specific kernel headers version)
ARG D_BASE_IMAGE="registry.redhat.io/openshift4/driver-toolkit-rhel9:v4.13.0-202309112001.p0.gd719bdc.assembly.stream"
# Standart: registry.access.redhat.com/ubi9:latest
ARG D_PYTHON_VERSION="36"
ARG D_PYTHON="python${D_PYTHON_VERSION}"
FROM $D_BASE_IMAGE AS base
# Inherited global args
ARG D_OS
# https://redmine.mellanox.com/issues/3528150/issue_history#note-9
RUN if [[ "${D_OS}" == *"rhel9"* ]] ; then \
sed -i 's#/etc/pki/entitlement#/etc/pki/entitlement-host#g' /etc/rhsm/rhsm.conf ;\
fi
RUN set -x && \
# Driver build / install script requirements
dnf -y install perl \
# Container functional requirements
jq iproute kmod procps-ng udev
##############################################################################################
# Stage: Download NVIDIA driver sources and install src driver container packages requirements
FROM base AS driver-src
# Inherited global args
ARG D_DOCA_VERSION
ARG D_OFED_VERSION
ARG D_CONTAINER_VER
ARG D_OFED_SRC_DOWNLOAD_PATH
# Stage args
ARG D_OFED_BASE_URL="https://linux.mellanox.com/public/repo/doca/${D_DOCA_VERSION}/SOURCES/MLNX_OFED"
ARG D_OFED_SRC_TYPE=""
ARG D_OFED_SRC_ARCHIVE="MLNX_OFED_SRC-${D_OFED_SRC_TYPE}${D_OFED_VERSION}.tgz"
ARG D_OFED_URL_PATH="${D_OFED_BASE_URL}/${D_OFED_SRC_ARCHIVE}" # although argument name says URL, local `*.tgz` compressed files may also be used (intended for internal use)
ENV NVIDIA_NIC_DRIVER_VER=${D_OFED_VERSION}
ENV NVIDIA_NIC_CONTAINER_VER=${D_CONTAINER_VER}
ENV NVIDIA_NIC_DRIVER_PATH="${D_OFED_SRC_DOWNLOAD_PATH}/MLNX_OFED_SRC-${D_OFED_VERSION}"
WORKDIR /root
RUN set -x && \
# Install prerequirements
dnf install -y curl --allowerasing \
# Driver build requirements
autoconf python3-devel ethtool automake pciutils libtool hostname dracut
# Download NVIDIA NIC driver
RUN mkdir -p ${D_OFED_SRC_DOWNLOAD_PATH}
WORKDIR ${D_OFED_SRC_DOWNLOAD_PATH}
ADD ${D_OFED_URL_PATH} ${D_OFED_SRC_ARCHIVE}
RUN if file ${D_OFED_SRC_ARCHIVE} | grep compressed; then \
tar -xzf ${D_OFED_SRC_ARCHIVE}; \
else \
mv ${D_OFED_SRC_ARCHIVE}/MLNX_OFED_SRC-${D_OFED_VERSION} . ; \
fi
WORKDIR /
ADD ./entrypoint.sh /root/entrypoint.sh
ADD ./dtk_nic_driver_build.sh /root/dtk_nic_driver_build.sh
ENTRYPOINT ["/root/entrypoint.sh"]
CMD ["sources"]
LABEL doca-version=${D_DOCA_VERSION}
LABEL ofed-version=${D_OFED_VERSION}
#####################
# Stage: Build driver
FROM driver-src AS driver-builder
# Inherited global args
ARG D_OS
ARG D_KERNEL_VER
ARG OFED_SRC_LOCAL_DIR
RUN set -x && \
# MOFED installation requirements
dnf install -y autoconf gcc make rpm-build
# Build driver
RUN set -x && \
${OFED_SRC_LOCAL_DIR}/install.pl --without-depcheck --distro ${D_OS} --kernel ${D_KERNEL_VER} --kernel-sources /lib/modules/${D_KERNEL_VER}/build --kernel-only --build-only --without-iser --without-srp --without-isert --without-knem --without-xpmem --with-mlnx-tools --with-ofed-scripts --copy-ifnames-udev
###################################
# Stage: Install precompiled driver
ARG D_FINAL_BASE_IMAGE
FROM $D_FINAL_BASE_IMAGE AS precompiled
# Inherited global args
ARG D_ARCH
ARG D_KERNEL_VER
ARG D_OFED_VERSION
ARG D_CONTAINER_VER
ARG OFED_SRC_LOCAL_DIR
ENV NVIDIA_NIC_DRIVER_VER=${D_OFED_VERSION}
ENV NVIDIA_NIC_DRIVER_PATH=""
ENV NVIDIA_NIC_CONTAINER_VER=${D_CONTAINER_VER}
COPY --from=driver-builder ${OFED_SRC_LOCAL_DIR}/RPMS/redhat-release-*/${D_ARCH}/*.rpm /root/
WORKDIR /root/
RUN set -x && \
rpm -ivh --nodeps \
./kmod-mlnx-nfsrdma-*.rpm \
./kmod-mlnx-nvme-*.rpm \
./kmod-mlnx-ofa_kernel-*.rpm \
./mlnx-ofa_kernel-*.rpm \
./mlnx-tools-*.rpm
RUN set -x && \
# MOFED functional requirements
dnf install -y pciutils hostname udev ethtool \
# Container functional requirements
jq iproute kmod procps-ng udev
# Prevent modprobe from giving a WARNING about missing files
RUN touch /lib/modules/${D_KERNEL_VER}/modules.order /lib/modules/${D_KERNEL_VER}/modules.builtin && \
# Introduce installed kernel modules
depmod ${D_KERNEL_VER}
WORKDIR /
ADD ./entrypoint.sh /root/entrypoint.sh
ADD ./dtk_nic_driver_build.sh /root/dtk_nic_driver_build.sh
ENTRYPOINT ["/root/entrypoint.sh"]
CMD ["precompiled"]