Whamcloud - gitweb
LU-14470 dne: striped mkdir replay by client request
[fs/lustre-release.git] / lustre.spec.in
1 # SPDX-License-Identifier: GPL-2.0
2
3 #
4 # This file is part of Lustre, http://www.lustre.org/
5 #
6 # lustre.spec.in
7 #
8 # spec file template for RHEL package builds
9 #
10
11 # Declare rpmbuild --with/--without parameters
12 %bcond_without servers
13 %bcond_without ldiskfs
14 %bcond_with zfs
15 %bcond_without lustre_tests
16 %bcond_without lustre_utils
17 %bcond_without lustre_iokit
18 %bcond_without lustre_modules
19 %bcond_without snmp
20 %bcond_with gss
21 %bcond_with gss_keyring
22 %bcond_without manpages
23 %bcond_without shared
24 %bcond_without static
25 %bcond_with    systemd
26 %bcond_with mofed
27 %bcond_without mpi
28 %bcond_with kabi
29
30 # LUTF Turn off brp-python-precompile script as we don't want the python files
31 # to be compiled on installation
32 %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
33
34 # By default both gss and gss keyring are disabled.
35 # gss keyring requires the gss core. If the builder
36 # request gss_keyring we must enable gss core even if
37 # the builder attempts to disable gss.
38 %if %{with gss_keyring}
39     %define with_gss 1
40 %endif
41
42 %if %{without servers}
43     # --without servers overrides --with {ldiskfs|zfs}
44     # so undefine the internal variables set by bcond_*
45     %undefine with_ldiskfs
46     %undefine with_zfs
47 %endif
48
49 %if %{without shared} && %{without static}
50 # need exit to stop build because error only displays a message
51 %{error: you can't disable both library types}
52 %{exit 1}
53 %endif
54
55 # lustre_tests depends on lustre_utils
56 %if %{without lustre_utils}
57 %undefine with_lustre_tests
58 %endif
59
60 %{!?version: %global version @VERSION@}
61 # if you want a custom kernel version set it variable with $ver.$arch
62 %{!?kver:    %global kver    %(uname -r)}
63 # cut epoch for kmodtool
64 %define _kver %(echo %{kver} | sed -e 's/^[0-9]*://')
65 # trust version from kdir - but it can lost 'epoch'
66 %if %{defined kdir}
67         %define _take_kver 1
68 %endif
69 %if %{defined kobjdir}
70         %define _take_kobj 1
71 %endif
72 %{!?kdir:    %global kdir    /lib/modules/%{_kver}/source}
73 %{!?kobjdir: %global kobjdir %(if [ "%{kdir}" = "/lib/modules/%{_kver}/source" ]; then echo "/lib/modules/%{_kver}/build"; else echo "%{kdir}"; fi)}
74
75 %if 0%{?suse_version} >= 1310 && %{defined _take_kobj}
76         %global _flavor %(echo %{_kver} | sed -e 's/^.*-//')
77 %else
78         %global _flavor default
79 %endif
80
81 %if %{defined _take_kver}
82 # as an alternative to this implementation we could simply "make -C $kdir kernelversion"
83 %global kver %(files="include/generated/utsrelease.h include/linux/utsrelease.h include/linux/version.h"; for f in $files; do if test -r %{kobjdir}/$f && grep UTS_RELEASE %{kobjdir}/$f >/dev/null; then sed -ne '/^#define UTS_RELEASE/s/.*"\\(.*\\)"$/\\1/p' %{kobjdir}/$f; break; fi; done)
84 %define _kver %kver
85 %endif
86
87 # We set this because kernel_module_package has its own method of identifying
88 # which kernel to build against, and it is unlikely that its decision will
89 # match with Lustre's method of selecting which kernel to build against.
90 # By setting this variable, we override kernel_module_package's kernel
91 # selection with our selection.
92 # kmodtool failed to take a version if epoch set
93 %global kernel_version %_kver
94
95 # in order to get kernel symset and/or kernel module dependencies into
96 # the RPM, in order to support weak-modules, the internal dependency gen-
97 # erator needs to be disabled
98 # this is done with (reduce the double % down to a single %):
99 #
100 # %%global _use_internal_dependency_generator 0
101 #
102 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
103 # defining it here (until Suse changes their mind)
104 #
105 # on RHEL5, however, we do need to explicitly disable the internal dep-
106 # endency generator and allow the external one be used
107 # but since RedHat's kABI is only a subset of the total kernel ABI, it
108 # doesn't include all of the symbols we (or OFED for that matter) need
109 # until RedHat includes all of the symbols we need in their symsets we
110 # cannot support weak-modules
111 # we did e-mail the maintainer of all of this stuff @redhat but got no
112 # response from them
113 #%%global _use_internal_dependency_generator 0
114
115 %if 0%{?rhel} > 7 || 0%{?fedora} > 33
116 ## SUSE uses another tool for provides:
117 ## https://github.com/openSUSE/kernel-source/blob/master/patches.rpmify/Add-ksym-provides-tool.patch
118 %global __find_provides   %{_sourcedir}/find-provides
119 %endif
120
121 # Set the package name prefix
122 %if %{undefined lustre_name}
123     %if %{with servers}
124         %global lustre_name lustre
125     %else
126         %global lustre_name lustre-client
127     %endif
128 %endif
129
130 %if %{with lustre_modules}
131 %if %{undefined kmoddir}
132     %if %{defined kernel_module_package_moddir}
133         %global kmoddir %{kernel_module_package_moddir}
134     %else
135         %if %{defined suse_kernel_module_package}
136             %global kmoddir updates
137         %else
138             %global kmoddir extra
139         %endif
140     %endif
141 %endif
142
143 %global modules_fs_path /lib/modules/%{_kver}/%{kmoddir}
144 # requires want to set a version including epoch
145 %global krequires %(echo %{kver} | sed -e 's/\.x86_64$//' -e 's/\.i[3456]86$//' -e 's/-smp$//' -e 's/-bigsmp$//' -e 's/[-.]ppc64$//' -e 's/\.aarch64$//' -e 's/-default$//' -e 's/-%{_flavor}//')
146
147 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "fedora" || "%{_vendor}" == "openEuler"
148         %global requires_kmod_name kmod-%{lustre_name}
149         %global requires_kmod_osd_zfs_name kmod-%{lustre_name}-osd-zfs
150         %if %{with lustre_tests}
151                 %global requires_kmod_tests_name kmod-%{lustre_name}-tests
152         %endif
153         %global requires_kmod_version %{version}
154 #for Suse
155 %else
156         %global requires_kmod_name %{lustre_name}-kmp
157         %global requires_kmod_osd_zfs_name %{lustre_name}-osd-zfs-kmp
158         %if %{with lustre_tests}
159                 %global requires_kmod_tests_name %{lustre_name}-tests-kmp
160         %endif
161         %if 0%{?suse_version} >= 1200
162                 %global requires_kmod_version %{version}_k%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
163         %else
164                 %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
165         %endif
166 %endif
167 %endif
168
169 # RHEL >= 7 comes with systemd
170 %if 0%{?rhel} >= 7
171 %define with_systemd 1
172 %endif
173
174 # Fedora >= 15 comes with systemd, but only >= 18 has
175 # the proper macros
176 %if 0%{?fedora} >= 18
177 %define with_systemd 1
178 %endif
179
180 # opensuse >= 12.1 comes with systemd, but only >= 13.1
181 # has the proper macros
182 %if 0%{?suse_version} >= 1310
183 %define with_systemd 1
184 %endif
185
186 # openEuler comes with systemd
187 %if "%{_vendor}" == "openEuler"
188 %define with_systemd 1
189 %endif
190
191 %{!?mpi_name: %global mpi_name openmpi}
192
193 Summary: Lustre File System
194 Name: %{lustre_name}
195 Version: %{version}
196 Release: 1%{?dist}
197 License: GPL-2.0-only AND LGPL-2.1-or-later
198 %if 0%{?suse_version} >= 1310
199 # SUSE needs Group for the kernel_module_package macro
200 Group: System/Kernel
201 %endif
202 Source: lustre-%{version}.tar.gz
203 Source1: kmp-lustre.preamble
204 Source2: kmp-lustre.files
205 Source3: kmp-lustre-osd-ldiskfs.preamble
206 Source4: kmp-lustre-osd-ldiskfs.files
207 Source5: kmp-lustre-osd-zfs.preamble
208 Source6: kmp-lustre-osd-zfs.files
209 Source7: kmp-lustre-tests.preamble
210 Source8: kmp-lustre-tests.files
211 Source9: find-provides
212 Source10: find-provides.ksyms
213 URL: https://wiki.whamcloud.com/
214 BuildRoot: %{_tmppath}/lustre-%{version}-root
215 %if %{with lustre_modules}
216 Requires: %{requires_kmod_name} = %{requires_kmod_version}
217 %endif
218 %if %{with lustre_tests_lutf}
219 Requires: python3 >= 3.6.0
220 BuildRequires: python3-devel >= 3.6.0, swig
221 %endif
222 BuildRequires: libtool pkgconfig(yaml-0.1) pkgconfig(zlib) pkgconfig(libnl-3.0) flex bison
223 %if "%{_vendor}" == "redhat"
224 BuildRequires: redhat-rpm-config
225 BuildRequires: pkgconfig
226 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
227 Suggests: bash-completion
228 %endif
229 %else
230 %if "%{_vendor}" == "openEuler"
231 BuildRequires: openEuler-rpm-config
232 %if %{with ldiskfs}
233 BuildRequires: kernel-debugsource
234 %endif
235 %endif
236 BuildRequires: pkg-config
237 %endif
238 %if %{with gss}
239 BuildRequires: krb5-devel openssl-devel
240 %endif
241 %if %{with lustre_modules}
242 # abuild (auto-build) used by SUSE Open Build Service
243 # need kernel-source as a build requirement, but the code
244 # which extracts these requirements don't understand %()
245 # and treats all such as failures.  So the following dance
246 # Allows the requirements to be seen by abuild, but ignored
247 # by lbuild.
248 %if "%(echo $USER)" != "abuild"
249 %else
250 BuildRequires: kernel-source
251 %endif
252 %endif
253 %if %{with servers}
254 Requires: %{name}-osd
255 Requires: %{name}-osd-mount
256 Obsoletes: lustre-server < %{version}
257 Provides: lustre-server = %{version}-%{release}
258 %endif
259 Obsoletes: lustre-client < %{version}
260 Provides: lustre-client = %{version}-%{release}
261 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "fedora" || "%{_vendor}" == "openEuler"
262 #suse don't support selinux
263 BuildRequires: pkgconfig(libselinux)
264 %endif
265 %if %{with lustre_modules}
266 %if %{with mofed}
267 BuildRequires: mlnx-ofa_kernel-devel
268 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
269 Requires: kmod-mlnx-ofa_kernel
270 %else
271 Requires: mlnx-ofa_kernel-kmp
272 %endif
273 %endif
274 %if 0%{?rhel} >= 8 || "%{_vendor}" == "openEuler"
275 BuildRequires: kernel-rpm-macros
276 %endif
277 %if 0%{?suse_version} >= 1530
278 BuildRequires: rpm-build >= 4.14.3
279 %endif
280 BuildRequires: %kernel_module_package_buildreqs
281 # need to provide a /usr/lib/${uname -r)/build dir
282 BuildRequires: kernel >= 3.10
283 %if "%{_vendor}" == "redhat"
284 %if %{with kabi}
285 BuildRequires: kernel-abi-whitelists
286 %endif
287 %endif
288 %endif
289
290 %if %{with systemd}
291 Requires(post): systemd
292 Requires(preun): systemd
293 Requires(postun): systemd
294 BuildRequires: pkgconfig(systemd)
295 %endif
296
297 %description
298 Userspace tools and files for the Lustre file system.
299
300 %if %{with lustre_modules}
301 %if 0%{?rhel} == 7
302 # until we have achieved full kABI compatibility we need to
303 # restrict the kernel range that can be used to the kernel
304 # version from the RHEL minor release
305 # this is supposed to be done for kmods automatically but
306 # RHBZ#1467319 seems to be getting in the way
307 # this is true for el7.0 through el7.4
308 %define preamble %{expand:%(
309 TMPFILE=`mktemp`
310 cat %{SOURCE1} > $TMPFILE
311 kver=%{kernel_version}
312 linuxversion=${kver%%%%-*}
313 linuxrelease=${kver##*-}
314 kabiminor=${linuxrelease%%%%.*}
315 echo "Requires:       kernel < $linuxversion-$((kabiminor+1)), kernel >= $linuxversion-$((kabiminor))" >> $TMPFILE
316 echo $TMPFILE
317 )}
318 %else
319 %define preamble %{SOURCE1}
320 %endif
321 %kernel_module_package -n %{name} -p %preamble -f %SOURCE2 %{_flavor}
322
323 %if %{with ldiskfs}
324 %kernel_module_package -n %{name}-osd-ldiskfs -p %SOURCE3 -f %SOURCE4 %{_flavor}
325 %if %{with lustre_utils}
326 %package osd-ldiskfs-mount
327 Summary: Lustre mount's ldiskfs-specific helper library
328 BuildRequires: e2fsprogs-devel >= 1.44.3 pkgconfig(mount)
329 Requires: ldiskfsprogs > 1.45.6
330 Provides: lustre-osd-mount = %{version}
331 Provides: %{name}-osd-mount = %{version}
332 Obsoletes: %{name}-osd-mount < %{version}
333 Obsoletes: lustre-osd-mount < %{version}
334
335 %description osd-ldiskfs-mount
336 Provide a shared library (dso) that can be loaded into various
337 lustre tools (mount/mkfs) to provide support for ldisfs
338
339 # with lustre_utils
340 %endif
341 # with ldiskfs
342 %endif
343
344 %if %{with zfs}
345 %kernel_module_package -n %{name}-osd-zfs -p %SOURCE5 -f %SOURCE6 %{_flavor}
346 %if %{with lustre_utils}
347 %package osd-zfs-mount
348 Summary: Lustre mount's zfs-specific helper library
349 BuildRequires: pkgconfig(mount)
350 Provides: %{name}-osd-mount = %{version}
351 Obsoletes: lustre-osd-mount < %{version}
352 # Tests also require zpool from zfs package:
353 Requires: zfs
354 Requires: %{requires_kmod_osd_zfs_name}
355
356 %description osd-zfs-mount
357 Provide a shared library (dso) that can be loaded into various
358 lustre tools (mount/mkfs) to provide support for ZFS.
359
360 # with lustre_utils
361 %endif
362 # with zfs
363 %endif
364 # with lustre_modules
365 %endif
366
367 %if %{with servers}
368 %package resource-agents
369 Summary: HA Resuable Cluster Resource Scripts for Lustre
370 Requires: %{name}
371 Requires: resource-agents
372
373 %description resource-agents
374 A set of scripts to operate Lustre resources in a High Availablity
375 environment for both Pacemaker and rgmanager.
376 %endif
377
378 %package devel
379 Summary: Lustre include headers
380 Provides: lustre-devel = %{version}
381 Requires: %{lustre_name} = %{version}
382 %if %{with lustre_modules}
383 Requires: %{requires_kmod_name} = %{requires_kmod_version}
384 %endif
385
386 %description devel
387 This package contains the header files needed for building additional
388 applications against the Lustre / LNet utilities libraries.
389
390 :> lustre-devel.files
391
392 %if %{with lustre_tests}
393 %package tests
394 Summary: Lustre testing framework
395 Provides: %{name}-tests = %{version}
396 %if %{with lustre_iokit}
397 Requires: %{name} = %{version}, lustre-iokit
398 %else
399 Requires: %{name} = %{version}
400 %endif
401 Requires: lustre-devel = %{version}
402 %if 0%{?rhel} >= 8 || 0%{?suse_version} >= 1500
403 Requires: python3 >= 3.6.0, python3-PyYAML
404 %endif
405 %if %{with lustre_modules}
406 Requires: %{requires_kmod_name} = %{requires_kmod_version}
407 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
408 %endif
409 %if %{with lustre_tests_lutf}
410 Requires: python3 >= 3.6.0
411 %endif
412 Requires: attr, rsync, lsof, /usr/bin/getconf
413 Requires: /usr/sbin/getenforce, acl, /usr/bin/killall, /usr/bin/ping, bc
414 # Of the supported targets, only rhel7 doesn't support Recommends.
415 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
416 Recommends: perl, dbench, iozone
417 # Either of these is sufficient
418 Suggests: pdsh, clush
419 %endif
420 %if %{with mpi}
421 %if "%{mpi_name}" == "mpich"
422 BuildRequires: mpich-devel
423 %endif
424 %if "%{mpi_name}" == "openmpi"
425 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler" || 0%{?suse_version} < 1500
426 BuildRequires: openmpi-devel
427 %else
428 BuildRequires: openmpi2-devel
429 %endif
430 # openmpi
431 %endif
432 # mpi
433 %endif
434
435 %description tests
436 This package contains a set of test binaries and scripts that are intended
437 to be used by the Lustre testing framework.
438
439 %if %{with lustre_modules}
440 %kernel_module_package -n %{name}-tests -p %SOURCE7 -f %SOURCE8 %{_flavor}
441 %endif
442 %endif
443
444 %if %{with lustre_iokit}
445 %package -n lustre-iokit
446 Summary: Collection of benchmark tools for a cluster with the Lustre file system
447 Requires: sg3_utils
448 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
449 Recommends: perl
450 %endif
451
452 %description -n lustre-iokit
453 This package includes five tools:
454 sgpdd-survey:
455 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
456
457 obdfilter-survey
458 This survey can be run in 3 modes to test disk I/O including the filesystem,
459 network I/O, and disk I/O via the network.  The script does sequential I/O
460 with varying numbers of threads and objects (files) by using lctl::test_brw
461 to drive the echo_client connected to local or remote obdfilter instances,
462 or remote obdecho instances.
463
464 ost-survey
465 This survey tests the client-to-disk performance of individual OSTs, and
466 ranks then for comparison.
467
468 stats-collect
469 This script will collect IO stats on a defined set of nodes.
470
471 ior-survey:
472 A script to run the IOR benchmark. The latest version can be downloaded from
473 https://github.com/hpc/ior/
474
475 mds-survey:
476 This survey tests the local metadata performance using the echo_client to drive
477 the MDD layer to perform operations. It is run with multiple threads (to
478 simulate MDT service threads) locally on the MDS node, and does not need Lustre
479 clients in order to run
480
481 lst-survey:
482 This survey tests LNet performance between a group of clients and servers.
483 %endif
484
485 %if 0%{?suse_version}
486 %debug_package
487 %endif
488 %prep
489 %setup -qn lustre-%{version}
490 ln lustre/ChangeLog ChangeLog-lustre
491 ln lnet/ChangeLog ChangeLog-lnet
492
493 %build
494 # Set an explicit path to our Linux tree, if we can.
495 cd $RPM_BUILD_DIR/lustre-%{version}
496
497 # Store the CFLAGS and LDFLAGS that would normally be used in the UTILS_CFLAGS
498 # and UTILS_LDFLAGS environment variables so that we use can them when compiling
499 # the user-space code in lustre/utils and lnet/utils. As of RHEL 8.0, the
500 # __global_* variants are deprecated in favour of build_cflags, etc. If neither
501 # style is available (e.g. on SLES), then these just end up as empty strings.
502 export UTILS_CFLAGS="%{?build_cflags:%{build_cflags}}%{!?build_cflags:%{?__global_cflags:%{__global_cflags}}}"
503 export UTILS_LDFLAGS="%{?build_ldflags:%{build_ldflags}}%{!?build_ldflags:%{?__global_ldflags:%{__global_ldflags}}}"
504
505 # RHEL7 on PPC64 needs __SANE_USERSPACE_TYPES__ defined so that __s64 and __u64
506 # are presented to user-land as long long instead of long long. Without this it
507 # will fail the format check whenever such a variable is printed.
508 %if 0%{?rhel}
509 %ifarch ppc64
510 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
511 %endif
512 %endif
513
514 # Disable any hardening or annotation since this doesn't make sense for
515 # kernel code, and reset "optflags" so that the vendor's overzealous flags don't
516 # create build failures.
517 %define optflags -g -O2 -Werror
518 %undefine _annotated_build
519 %undefine _hardened_build
520
521 CONFIGURE_ARGS="%{?configure_args}"
522 if [ -n "$CONFIGURE_ARGS" ]; then
523         # make sure %%kdir and %%kobjdir are not in the configure arguments
524         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
525         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
526         # remove --with-kmp-moddir from configure arguments,
527         # it will be set --with-kmp-moddir=%%kmoddir
528         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-kmp-moddir=[^ ][^ ]* \?//')
529         # remove env variables from config cache built by initial configure,
530         # and create dedicated cache in temporary build directory
531         if [ -f "$CONFIG_CACHE_FILE" ]; then
532                 TMP_CONFIG_CACHE="$(mktemp --tmpdir newconfig-XXXXXXXX.cache)"
533                 sed -e "/ac_cv_env/d" \
534                     -e "/am_cv_CC_dependencies_compiler_type/d" \
535                     -e "/lb_cv_mpi_tests/d" \
536                        "$CONFIG_CACHE_FILE" > $TMP_CONFIG_CACHE
537                 CONFIGURE_ARGS="$CONFIGURE_ARGS --cache-file=$TMP_CONFIG_CACHE"
538         fi
539 fi
540
541 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
542 # string in it which we don't want word splitted by the shell
543 # also remove (build|host|target) options because they will be specified
544 # inside $CONFIGURE_ARGS
545 # kmod tools/scripts require "name" directory with kernel modules
546
547 %if 0%{?rhel} >= 9
548 %define _configure eval ./configure
549 %define eval_configure %configure
550 %else
551 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
552 %endif
553
554 %if %{with mpi}
555 %if "%{mpi_name}" == "mpich"
556 %{?_mpich_load}
557 %endif
558 %if "%{mpi_name}" == "openmpi"
559 %{?_openmpi_load}
560 %endif
561 # mpi
562 %endif
563
564 %if %{with mofed}
565         o2ib_path=$(find /usr/src/ofa_kernel/ -type d -name ofed_scripts | xargs dirname)
566         if [ -z "$o2ib_path" ]; then
567                 echo "ERROR: could not find OFED devel headers"
568                 exit 1
569         fi
570         if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
571                 echo "ERROR: multiple OFED versions installed"
572                 exit 1
573         fi
574 %endif
575
576 %eval_configure $CONFIGURE_ARGS \
577         %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
578         %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
579         %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
580         %{!?with_shared:--disable-shared} \
581         %{!?with_static:--disable-static} \
582         %{!?with_lustre_iokit:--disable-iokit} \
583         %{!?with_ldiskfs:--disable-ldiskfs} \
584         %{!?with_servers:--disable-server} \
585         %{!?with_zfs:--without-zfs} \
586         %{!?with_snmp:--disable-snmp} \
587         %{!?with_gss:--disable-gss} \
588         %{!?with_gss_keyring:--disable-gss-keyring} \
589         %{!?with_manpages:--disable-manpages} \
590         %{!?with_systemd:--with-systemdsystemunitdir=no} \
591         %{?with_systemd:--with-systemdsystemunitdir=%{_unitdir}} \
592         %{?with_mofed:--with-o2ib=$o2ib_path} \
593         --with-linux=%{kdir} \
594         --with-linux-obj=%{kobjdir} \
595         --with-kmp-moddir=%{kmoddir}/%{name}
596
597 %if %{with servers}
598 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
599         echo "Error: Server Support configured but not found"
600         false
601 fi
602 %endif
603
604 make %{?_smp_mflags} -s %{?make_args}
605
606 %if %{with mpi}
607 %if "%{mpi_name}" == "mpich"
608 %{?_mpich_unload}
609 %endif
610 %if "%{mpi_name}" == "openmpi"
611 %{?_openmpi_unload}
612 %endif
613 # mpi
614 %endif
615
616 %install
617
618 %if %{with mpi}
619 %if "%{mpi_name}" == "mpich"
620 %{?_mpich_load}
621 %endif
622 %if "%{mpi_name}" == "openmpi"
623 %{?_openmpi_load}
624 %endif
625 # mpi
626 %endif
627
628 make install DESTDIR=$RPM_BUILD_ROOT
629
630 %if %{with lustre_modules}
631 # RHEL's kernel_module_path macro expects that all the modules
632 # in a kmod package will be in modules_fs_path/<sub packagename>
633 # but Lustre installs all of the modules in a single pass into
634 # a shared location.  Since this is a restriction imposed by
635 # RHEL, we handle this here in the spec file rather than in
636 # Lustre's build system.  This is not expected to bother SLES's
637 # kernel_module_path macro.
638 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{name}
639 %{__install} -D -m 0644 ${PWD}/Module.symvers %{buildroot}/Module.symvers
640 %if %{with ldiskfs}
641 mkdir -p $basemodpath-osd-ldiskfs/fs
642 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
643 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
644 %endif
645 %if %{with zfs}
646 mkdir -p $basemodpath-osd-zfs/fs
647 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
648 %endif
649 %if %{with lustre_tests}
650 mkdir -p $basemodpath-tests/fs
651 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
652 mv $basemodpath/fs/obd_test.ko $basemodpath-tests/fs/obd_test.ko
653 mkdir -p $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
654 mv $basemodpath/fs/kinode.ko $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
655 %endif
656 %endif
657
658 %if %{without mpi}
659 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
660         rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
661 fi
662 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
663         rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
664 fi
665 %endif
666
667 :> lustre.files
668
669 %if %{with servers} && %{with lustre_utils}
670 # The .ha_v2 extension identifies the heartbeat resource agent as using
671 # legacy syntax. Install a compatibility symlink to avoid conflicts when
672 # newer-style agents are added.
673 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
674 echo '%dir %{_sysconfdir}/ha.d' >>lustre.files
675 echo '%dir %{_sysconfdir}/ha.d/resource.d' >>lustre.files
676 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
677 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
678 %endif
679
680 # systemd is on redhat, fedora, and suse
681 %if %{with systemd}
682 echo '%{_unitdir}/lnet.service' >>lustre.files
683 %endif
684
685 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
686 # The following scripts are Red Hat specific
687 %if %{with servers}
688 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
689 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
690 %if %{with gss_keyring}
691 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
692 echo '%config(noreplace) %{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
693 %endif
694 %endif
695
696 %if %{without systemd}
697 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
698 %endif
699 %endif
700 %if %{with gss_keyring}
701 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
702 %endif
703
704 # fc18 needs 'x' permission for library files
705 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
706
707 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
708 %if %{with static}
709 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
710 %endif
711 %if %{with shared}
712 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
713 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
714 %endif
715
716 %if %{with ldiskfs}
717 echo '%{_libdir}/libiam.a' >>lustre.files
718 %endif
719
720 %if %{with snmp}
721 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
722 echo '%{_libdir}/lustre/snmp' >>lustre.files
723 %endif
724
725 %if %{with lustre_utils}
726 mkdir -p $RPM_BUILD_ROOT/%{_datadir}/lustre
727 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre ] ; then
728         find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ -name \*.la -type f -exec rm -f {} \;
729 fi
730 %endif
731
732 echo '%{_prefix}/lib/firewalld/services/*.xml' >>lustre.files
733 %if %{with lustre_modules}
734 # mark modules executable for find-debuginfo.sh
735 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
736 %endif
737
738 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
739
740 %if %{with lustre_tests}
741 :> lustre-tests.files
742 %if %{with mpi}
743 %if "%{mpi_name}" == "mpich"
744 %{?_mpich_load}
745 %endif
746 %if "%{mpi_name}" == "openmpi"
747 %{?_openmpi_load}
748 %endif
749 # mpi
750 %endif
751 echo '%dir %{_libdir}/lustre' >>lustre-tests.files
752 echo '%dir %{_libdir}/lustre/tests' >>lustre-tests.files
753 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
754 echo '%{_bindir}/mcreate' >>lustre-tests.files
755 echo '%{_bindir}/statx' >>lustre-tests.files
756 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
757 echo '%{_sbindir}/wiretest' >>lustre-tests.files
758 if [ -n "$MPI_BIN" ]; then
759         echo "$MPI_BIN/*" >>lustre-tests.files
760 fi
761 %if %{with lustre_tests_lutf}
762 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
763 %endif
764 %endif
765
766 %if %{with lustre_tests_lutf}
767 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
768 %endif
769
770 %files devel -f lustre-devel.files
771 %defattr(-,root,root)
772 %{_libdir}/pkgconfig/lustre.pc
773 %if %{with static}
774 %{_libdir}/liblustreapi.a
775 %endif
776 %if %{with shared}
777 %{_libdir}/liblustreapi.so
778 %endif
779 %{_includedir}/lustre
780 %if %{with lustre_modules}
781 %{_includedir}/linux/lnet
782 %{_includedir}/linux/lustre
783 %else
784 %exclude %{_includedir}/linux/lnet
785 %exclude %{_includedir}/linux/lustre
786 %endif
787
788 %files -f lustre.files
789 %defattr(-,root,root)
790 %{_sbindir}/*
791 %if %{with lustre_tests}
792 %exclude %{_sbindir}/wirecheck
793 %exclude %{_sbindir}/wiretest
794 %endif
795 %if %{with zfs}
796 %exclude %{_sbindir}/zfsobj2fid
797 %endif
798 %if %{with lustre_utils}
799 %if %{with servers}
800 %dir %{_libexecdir}/lustre
801 %{_libexecdir}/lustre/lc_common
802 %{_libexecdir}/lustre/haconfig
803 %{_bindir}/lustre_req_history
804 %{_bindir}/remove_changelog
805 %{_bindir}/remove_updatelog
806 %endif
807
808 %{_bindir}/llobdstat
809 %{_bindir}/lljobstat
810 %{_bindir}/llstat
811 %{_bindir}/plot-llstat
812 %{_datadir}/lustre
813
814 %{_bindir}/lfs
815 %{_bindir}/lfs_migrate
816 /sbin/mount.lustre
817 %if %{with servers}
818 /sbin/mount.lustre_tgt
819 %endif
820 @BASH_COMPLETION_DIR@
821 %endif
822
823 %if %{with manpages}
824 %{_mandir}/man?/*
825 %endif
826
827 %if %{with shared}
828 %{_libdir}/liblustreapi.so.*
829 %endif
830 %{_udevrulesdir}/99-lustre.rules
831 %if %{with servers}
832 %{_udevrulesdir}/99-lustre-server.rules
833 %endif
834 %if %{with zfs}
835 %config(noreplace) %{_sysconfdir}/ldev.conf
836 %endif
837 %config(noreplace) %{_sysconfdir}/lnet.conf
838 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
839 %if %{with lustre_utils}
840 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
841 %endif
842 %if %{with lustre_modules}
843 %exclude /Module.symvers
844 %if %{with shared}
845 %if %{with ldiskfs}
846 %if %{with lustre_utils}
847 %files osd-ldiskfs-mount
848 %defattr(-,root,root)
849 %dir %{_libdir}/@PACKAGE@
850 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
851 %endif
852 %endif
853 %endif
854
855 %if %{with shared}
856 %if %{with zfs}
857 %if %{with lustre_utils}
858 %files osd-zfs-mount
859 %defattr(-,root,root)
860 %dir %{_libdir}/@PACKAGE@
861 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
862 %{_sysconfdir}/zfs/zed.d/*
863 %endif
864 %endif
865 %endif
866
867 # with lustre_modules
868 %endif
869
870 %if %{with servers}
871 %files resource-agents
872 %defattr(0755,root,root)
873 %dir %{_prefix}/lib/ocf
874 %dir %{_prefix}/lib/ocf/resource.d
875 %{_prefix}/lib/ocf/resource.d/lustre/
876 %endif
877
878 %if %{with lustre_tests}
879 %files tests -f lustre-tests.files
880 %defattr(-,root,root)
881 %endif
882
883 %if %{with lustre_iokit}
884 %files -n lustre-iokit
885 %defattr(-, root, root)
886 %{_bindir}/iokit-config
887 %{_bindir}/iokit-gather-stats
888
889 %{_bindir}/iokit-libecho
890 %{_bindir}/iokit-lstats
891 %{_bindir}/iokit-parse-ior
892 %{_bindir}/iokit-plot-obdfilter
893 %{_bindir}/iokit-plot-ost
894 %{_bindir}/iokit-plot-sgpdd
895 %{_bindir}/ior-survey
896 %{_bindir}/mds-survey
897 %{_bindir}/obdfilter-survey
898 %{_bindir}/ost-survey
899 %{_bindir}/sgpdd-survey
900 %{_bindir}/lst-survey
901 %{_bindir}/lst.sh
902 %doc lustre-iokit/ior-survey/README.ior-survey
903 %doc lustre-iokit/mds-survey/README.mds-survey
904 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
905 %doc lustre-iokit/ost-survey/README.ost-survey
906 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
907 %doc lustre-iokit/stats-collect/README.iokit-lstats
908 %doc lustre-iokit/lst-survey/README.lst-survey
909 %endif
910
911 %post
912 %if %{with systemd}
913 %systemd_post lnet.service
914 %endif
915
916 %preun
917 %if %{with systemd}
918 %systemd_preun lnet.service
919 %endif
920
921 %postun
922 %if %{with systemd}
923 %systemd_postun_with_restart lnet.service
924 %endif
925
926 %clean
927 rm -rf $RPM_BUILD_ROOT
928 rm -rf %{_tmppath}/kmp