forked from ceph/ceph-nvmeof
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile.spdk
150 lines (122 loc) · 4.46 KB
/
Dockerfile.spdk
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
# syntax = docker/dockerfile:1.4
FROM quay.io/centos/centos:stream9 AS build
ARG SPDK_CEPH_VERSION \
SPDK_VERSION
COPY <<EOF /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for \$basearch
baseurl=https://download.ceph.com/rpm-${SPDK_CEPH_VERSION?}/el\$releasever/\$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-$SPDK_CEPH_VERSION/el\$releasever/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
EOF
ARG SPDK_PKGDEP_ARGS \
SPDK_CONFIGURE_ARGS \
SPDK_MAKEFLAGS
WORKDIR /src
COPY . .
RUN \
--mount=type=cache,target=/var/cache/dnf \
--mount=type=cache,target=/var/lib/dnf \
--mount=type=cache,target=/root/.cache/pip \
dnf install -y 'dnf-command(config-manager)' \
&& dnf config-manager --set-enabled crb \
&& dnf install -y \
rpm-build \
git-core \
&& scripts/pkgdep.sh $SPDK_PKGDEP_ARGS \
&& dnf update -y
RUN \
--mount=type=cache,target=/var/cache/dnf \
--mount=type=cache,target=/var/lib/dnf \
DEPS="no" \
SPDK_VERSION=${SPDK_VERSION?} \
RPM_RELEASE=0 \
MAKEFLAGS=$SPDK_MAKEFLAGS \
rpmbuild/rpm.sh $SPDK_CONFIGURE_ARGS
# build bdevperf example, will not be a part of generated rpm
RUN make -C ./examples/bdev/bdevperf
#------------------------------------------------------------------------------
FROM registry.access.redhat.com/ubi9/ubi AS rpm-export
COPY --from=build /root/rpmbuild/rpm /rpm
#------------------------------------------------------------------------------
FROM registry.access.redhat.com/ubi9/ubi as spdk
ARG SPDK_CEPH_VERSION \
SPDK_VERSION
ARG SPDK_CENTOS_BASE="https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/"
# This would become obsolete as the release rolls out new packages
ARG SPDK_CENTOS_REPO_VER="9.0-21.el9"
ARG SPDK_PKGDEP_ARGS \
SPDK_CONFIGURE_ARGS \
SPDK_MAKEFLAGS
ARG SPDK_NAME \
SPDK_SUMMARY \
SPDK_DESCRIPTION \
SPDK_URL \
SPDK_MAINTAINER \
BUILD_DATE \
SPDK_GIT_REPO \
SPDK_GIT_BRANCH \
SPDK_GIT_COMMIT
# Generic labels
LABEL name="$SPDK_NAME" \
version="$SPDK_VERSION" \
summary="$SPDK_SUMMARY" \
description="$SPDK_DESCRIPTION" \
maintainer="$SPDK_MAINTAINER" \
release="" \
url="$SPDK_URL" \
build-date="$BUILD_DATE" \
vcs-ref="$SPDK_GIT_COMMIT"
# SPDK-specific labels
LABEL io.spdk.version="$SPDK_VERSION" \
io.spdk.build.pkgdep-args="$SPDK_PKGDEP_ARGS" \
io.spdk.build.configure-args="$SPDK_CONFIGURE_ARGS" \
io.spdk.build.makeflags="$SPDK_MAKEFLAGS" \
io.spdk.build.ceph-release="$SPDK_CEPH_VERSION" \
io.spdk.git.repo="$SPDK_GIT_REPO" \
io.spdk.git.branch="$SPDK_GIT_BRANCH" \
io.spdk.git.commit="$SPDK_GIT_COMMIT"
# CentOS-specific labels
LABEL org.centos.url="$SPDK_CENTOS_BASE" \
org.centos.version="$SPDK_CENTOS_REPO_VER"
COPY --from=build /etc/yum.repos.d/ceph.repo /etc/yum.repos.d/ceph.repo
RUN \
--mount=type=bind,from=build,source=/root/rpmbuild/rpm,target=/rpm \
--mount=type=cache,target=/var/cache/dnf \
--mount=type=cache,target=/var/lib/dnf \
rpm -vih $SPDK_CENTOS_BASE/centos-stream-repos-$SPDK_CENTOS_REPO_VER.noarch.rpm \
$SPDK_CENTOS_BASE/centos-gpg-keys-$SPDK_CENTOS_REPO_VER.noarch.rpm \
&& dnf install -y /rpm/$(uname -m)/*.rpm \
&& dnf update -y
ENTRYPOINT [ "/usr/local/bin/nvmf_tgt" ]
CMD [ "-u", "-r", "/var/tmp/spdk.sock" ]
#------------------------------------------------------------------------------
FROM spdk AS bdevperf
# Default test run duration in secs
ENV BDEVPERF_TEST_DURATION="90"
# RPC socket path
ENV BDEVPERF_SOCKET="/tmp/bdevperf.sock"
# IO Queue depth
ENV BDEVPERF_IO_QUEUE="128"
# IO Block size
ENV BDEVPERF_IO_BS="4096"
# Type of I/O pattern, see https://spdk.io/doc/bdevperf.html
# for available types
ENV BDEVPERF_IO_TYPE="verify"
COPY --from=build /src/build/examples/bdevperf /usr/local/bin/bdevperf
COPY --from=build /src/examples/bdev/bdevperf/bdevperf.py /usr/libexec/spdk/scripts/bdevperf.py
RUN echo "#!/bin/sh -x" > /entrypoint
RUN echo "bdevperf -z -r \$BDEVPERF_SOCKET \\" >> /entrypoint
RUN echo " -q \$BDEVPERF_IO_QUEUE -o \$BDEVPERF_IO_BS \\" >> /entrypoint
RUN echo " -w \$BDEVPERF_IO_TYPE -t \$BDEVPERF_TEST_DURATION" >> /entrypoint
RUN chmod 755 /entrypoint
ENTRYPOINT [ "/entrypoint" ]