1 # SPDX-License-Identifier: GPL-2.0
4 # This file is part of Lustre, http://www.lustre.org/
8 # spec file template for RHEL package builds
11 # Declare rpmbuild --with/--without parameters
12 %bcond_without servers
13 %bcond_without ldiskfs
15 %bcond_without lustre_tests
16 %bcond_without lustre_utils
17 %bcond_without lustre_iokit
18 %bcond_without lustre_modules
20 %bcond_with gss_keyring
21 %bcond_without manpages
27 %bcond_with multiple_lnds
32 %bcond_without l_getsepol
34 %if %{with multiple_lnds}
35 %global enable_multi_lnds 1
38 # LUTF Turn off brp-python-precompile script as we don't want the python files
39 # to be compiled on installation
40 %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
42 # By default both gss and gss keyring are disabled.
43 # gss keyring requires the gss core. If the builder
44 # request gss_keyring we must enable gss core even if
45 # the builder attempts to disable gss.
46 %if %{with gss_keyring}
50 %if %{without servers}
51 # --without servers overrides --with {ldiskfs|zfs}
52 # so undefine the internal variables set by bcond_*
53 %undefine with_ldiskfs
57 %if %{without shared} && %{without static}
58 # need exit to stop build because error only displays a message
59 %{error: you can't disable both library types}
63 # lustre_tests depends on lustre_utils
64 %if %{without lustre_utils}
65 %undefine with_lustre_tests
68 %{!?version: %global version @VERSION@}
69 # if you want a custom kernel version set it variable with $ver.$arch
70 %{!?kver: %global kver %(uname -r)}
71 # cut epoch for kmodtool
72 %define _kver %(echo %{kver} | sed -e 's/^[0-9]*://')
73 # trust version from kdir - but it can lost 'epoch'
77 %if %{defined kobjdir}
80 %{!?kdir: %global kdir /lib/modules/%{_kver}/source}
81 %{!?kobjdir: %global kobjdir %(if [ "%{kdir}" = "/lib/modules/%{_kver}/source" ]; then echo "/lib/modules/%{_kver}/build"; else echo "%{kdir}"; fi)}
83 %if 0%{?suse_version} >= 1310 && %{defined _take_kobj}
84 %global _flavor %(echo %{_kver} | sed -e 's/^.*-//')
86 %global _flavor default
89 %if %{defined _take_kver}
90 # as an alternative to this implementation we could simply "make -C $kdir kernelversion"
91 %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)
95 # We set this because kernel_module_package has its own method of identifying
96 # which kernel to build against, and it is unlikely that its decision will
97 # match with Lustre's method of selecting which kernel to build against.
98 # By setting this variable, we override kernel_module_package's kernel
99 # selection with our selection.
100 # kmodtool failed to take a version if epoch set
101 %global kernel_version %_kver
103 # in order to get kernel symset and/or kernel module dependencies into
104 # the RPM, in order to support weak-modules, the internal dependency gen-
105 # erator needs to be disabled
106 # this is done with (reduce the double % down to a single %):
108 # %%global _use_internal_dependency_generator 0
110 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
111 # defining it here (until Suse changes their mind)
113 # on RHEL5, however, we do need to explicitly disable the internal dep-
114 # endency generator and allow the external one be used
115 # but since RedHat's kABI is only a subset of the total kernel ABI, it
116 # doesn't include all of the symbols we (or OFED for that matter) need
117 # until RedHat includes all of the symbols we need in their symsets we
118 # cannot support weak-modules
119 # we did e-mail the maintainer of all of this stuff @redhat but got no
121 #%%global _use_internal_dependency_generator 0
123 %if 0%{?rhel} > 7 || 0%{?fedora} > 33
124 ## SUSE uses another tool for provides:
125 ## https://github.com/openSUSE/kernel-source/blob/master/patches.rpmify/Add-ksym-provides-tool.patch
126 %global __find_provides %{_sourcedir}/find-provides
129 # Set the package name prefix
130 %if %{undefined lustre_name}
132 %global lustre_name lustre
134 %global lustre_name lustre-client
138 %if %{with lustre_modules}
139 %if %{undefined kmoddir}
140 %if %{defined kernel_module_package_moddir}
141 %global kmoddir %{kernel_module_package_moddir}
143 %if %{defined suse_kernel_module_package}
144 %global kmoddir updates
146 %global kmoddir extra
151 %global modules_fs_path /lib/modules/%{_kver}/%{kmoddir}
152 # requires want to set a version including epoch
153 %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}//')
155 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "fedora" || 0%{?openEuler}
156 %global requires_kmod_name kmod-%{lustre_name}
157 %global requires_kmod_osd_zfs_name kmod-%{lustre_name}-osd-zfs
158 %if %{with lustre_tests}
159 %global requires_kmod_tests_name kmod-%{lustre_name}-tests
161 %global requires_kmod_version %{version}
164 %global requires_kmod_name %{lustre_name}-kmp
165 %global requires_kmod_osd_zfs_name %{lustre_name}-osd-zfs-kmp
166 %if %{with lustre_tests}
167 %global requires_kmod_tests_name %{lustre_name}-tests-kmp
169 %if 0%{?suse_version} >= 1200
170 %global requires_kmod_version %{version}_k%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
172 %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
177 # RHEL >= 7 comes with systemd
179 %define with_systemd 1
182 # Fedora >= 15 comes with systemd, but only >= 18 has
184 %if 0%{?fedora} >= 18
185 %define with_systemd 1
188 # opensuse >= 12.1 comes with systemd, but only >= 13.1
189 # has the proper macros
190 %if 0%{?suse_version} >= 1310
191 %define with_systemd 1
194 # openEuler comes with systemd
196 %define with_systemd 1
199 # Detect when mlnx-ofa_kernel-devel contents exist and mofed_source to 0
200 %define mofed_src_path $(echo %{?configure_args} | tr ' ' '\\n' | grep -- '--with-o2ib=' | cut -c 13-)
201 %define mofed_source %(test -f %mofed_src_path/Module.symvers; echo $?)
202 # Update the search path for mofed_scripts
203 %if 0%{?mofed_source} > 0
204 %define mofed_default_path /usr/src/ofa_kernel/
206 %define mofed_default_path %{mofed_src_path}
209 %{!?mpi_name: %global mpi_name openmpi}
211 Summary: Lustre File System
215 License: GPL-2.0-only AND LGPL-2.1-or-later
216 %if 0%{?suse_version} >= 1310
217 # SUSE needs Group for the kernel_module_package macro
220 Source: lustre-%{version}.tar.gz
221 Source1: kmp-lustre.preamble
222 Source2: kmp-lustre.files
223 Source3: kmp-lustre-osd-ldiskfs.preamble
224 Source4: kmp-lustre-osd-ldiskfs.files
225 Source5: kmp-lustre-osd-zfs.preamble
226 Source6: kmp-lustre-osd-zfs.files
227 Source7: kmp-lustre-tests.preamble
228 Source8: kmp-lustre-tests.files
229 Source9: find-provides
230 Source10: find-provides.ksyms
231 Source11: kmp-lnet-socklnd.preamble
232 Source12: kmp-lnet-socklnd.files
233 Source13: kmp-lnet-o2iblnd.preamble
234 Source14: kmp-lnet-o2iblnd.files
235 Source15: kmp-lnet-gnilnd.preamble
236 Source16: kmp-lnet-gnilnd.files
237 Source17: kmp-lnet-kfilnd.preamble
238 Source18: kmp-lnet-kfilnd.files
239 Source19: kmp-lnet-in-kernel-o2iblnd.preamble
240 Source20: kmp-lnet-in-kernel-o2iblnd.files
241 URL: https://wiki.whamcloud.com/
242 BuildRoot: %{_tmppath}/lustre-%{version}-root
243 %if %{with lustre_modules}
244 Requires: %{requires_kmod_name} = %{requires_kmod_version}
246 %if %{with lustre_tests_lutf}
247 Requires: python3 >= 3.6.0
248 BuildRequires: python3-devel >= 3.6.0, swig
250 BuildRequires: libtool pkgconfig(yaml-0.1) pkgconfig(zlib) pkgconfig(libnl-3.0) flex bison
251 %if "%{_vendor}" == "redhat"
252 BuildRequires: redhat-rpm-config
253 BuildRequires: pkgconfig
254 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
255 Suggests: bash-completion
259 BuildRequires: openEuler-rpm-config
261 BuildRequires: kernel-debugsource
264 BuildRequires: pkg-config
267 BuildRequires: krb5-devel openssl-devel
269 %if %{with lustre_modules}
270 # abuild (auto-build) used by SUSE Open Build Service needs kernel-source as
271 # a build requirement, but the code which extracts these requirements does not
272 # understand the percent-open-close-paren construct aka %%()
273 # [NOTE: a percent abovie is doubled to avoid yet another rpmbuild warning]
274 # such occurances as failures. So the following dance allows the requirements
275 # to be seen by abuild, but ignored by lbuild.
276 %if "%(echo $USER)" != "abuild"
278 BuildRequires: kernel-source
282 Requires: %{name}-osd
283 Requires: %{name}-osd-mount
284 Obsoletes: lustre-server < %{version}
285 Provides: lustre-server = %{version}-%{release}
287 Obsoletes: lustre-client < %{version}
288 Provides: lustre-client = %{version}-%{release}
289 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "fedora" || 0%{?openEuler}
290 #suse don't support selinux
291 BuildRequires: pkgconfig(libselinux)
293 %if %{with l_getsepol}
294 BuildRequires: pkgconfig(libselinux) openssl-devel
296 %if %{with lustre_modules}
298 %if 0%{?mofed_source} > 0
299 BuildRequires: mlnx-ofa_kernel-devel
301 %if %{with multiple_lnds}
302 %if "%{_vendor}" == "redhat" || 0%{?openEuler}
303 Requires: kmod-mlnx-ofa_kernel
305 Requires: mlnx-ofa_kernel-kmp
309 %if 0%{?rhel} >= 8 || 0%{?openEuler}
310 BuildRequires: kernel-rpm-macros
312 %if 0%{?suse_version} >= 1530
313 BuildRequires: rpm-build >= 4.14.3
315 BuildRequires: %kernel_module_package_buildreqs
316 # need to provide a /usr/lib/${uname -r)/build dir
317 BuildRequires: kernel >= 3.10
318 %if "%{_vendor}" == "redhat"
320 BuildRequires: kernel-abi-whitelists
326 Requires(post): systemd
327 Requires(preun): systemd
328 Requires(postun): systemd
329 BuildRequires: pkgconfig(systemd)
333 Userspace tools and files for the Lustre file system.
335 %if %{with lustre_modules}
337 # until we have achieved full kABI compatibility we need to
338 # restrict the kernel range that can be used to the kernel
339 # version from the RHEL minor release
340 # this is supposed to be done for kmods automatically but
341 # RHBZ#1467319 seems to be getting in the way
342 # this is true for el7.0 through el7.4
343 %define preamble %{expand:%(
345 cat %{SOURCE1} > $TMPFILE
346 kver=%{kernel_version}
347 linuxversion=${kver%%%%-*}
348 linuxrelease=${kver##*-}
349 kabiminor=${linuxrelease%%%%.*}
350 echo "Requires: kernel < $linuxversion-$((kabiminor+1)), kernel >= $linuxversion-$((kabiminor))" >> $TMPFILE
354 %define preamble %{SOURCE1}
356 %kernel_module_package -n %{name} -p %preamble -f %SOURCE2 %{_flavor}
359 %kernel_module_package -n %{name}-osd-ldiskfs -p %SOURCE3 -f %SOURCE4 %{_flavor}
360 %if %{with lustre_utils}
361 %package osd-ldiskfs-mount
362 Summary: Lustre mount's ldiskfs-specific helper library
363 BuildRequires: e2fsprogs-devel >= 1.44.3 pkgconfig(mount)
364 Requires: ldiskfsprogs > 1.45.6
365 Provides: lustre-osd-mount = %{version}
366 Provides: %{name}-osd-mount = %{version}
367 Obsoletes: %{name}-osd-mount < %{version}
368 Obsoletes: lustre-osd-mount < %{version}
370 %description osd-ldiskfs-mount
371 Provide a shared library (dso) that can be loaded into various
372 lustre tools (mount/mkfs) to provide support for ldisfs
380 %global confzfsdobjpath %(echo '%configure_args' | grep -q -- --with-zfs-obj= ; echo $?)
381 %kernel_module_package -n %{name}-osd-zfs -p %SOURCE5 -f %SOURCE6 %{_flavor}
382 %if %{with lustre_utils}
383 %package osd-zfs-mount
384 Summary: Lustre mount's zfs-specific helper library
385 BuildRequires: pkgconfig(mount)
386 Provides: %{name}-osd-mount = %{version}
387 Obsoletes: lustre-osd-mount < %{version}
388 %if 0%{confzfsdobjpath} != 0
389 BuildRequires: (libzfs-devel or libzfs4-devel or libzfs5-devel)
391 # end confzfsdobjpath
392 # Tests also require zpool from zfs package:
394 Requires: %{requires_kmod_osd_zfs_name}
395 Provides: %{name}-osd-mount = %{version}
396 Provides: %{name}-osd-zfs-mount = %{version}
397 Requires: %{name}-osd-zfs = %{version}
399 %description osd-zfs-mount
400 Provide a shared library (dso) that can be loaded into various
401 lustre tools (mount/mkfs) to provide support for ZFS.
407 # with lustre_modules
411 %package resource-agents
412 Summary: HA Resuable Cluster Resource Scripts for Lustre
414 Requires: resource-agents
416 %description resource-agents
417 A set of scripts to operate Lustre resources in a High Availablity
418 environment for both Pacemaker and rgmanager.
422 Summary: Lustre include headers
423 Provides: lustre-devel = %{version}
424 Requires: %{lustre_name} = %{version}
425 %if %{with lustre_modules}
426 Requires: %{requires_kmod_name} = %{requires_kmod_version}
430 This package contains the header files needed for building additional
431 applications against the Lustre / LNet utilities libraries.
433 :> lustre-devel.files
435 %if %{with lustre_tests}
437 Summary: Lustre testing framework
438 Provides: %{name}-tests = %{version}
439 %if %{with lustre_iokit}
440 Requires: %{name} = %{version}, lustre-iokit
442 Requires: %{name} = %{version}
444 Requires: lustre-devel = %{version}
445 %if 0%{?rhel} >= 8 || 0%{?suse_version} >= 1500 || 0%{?openEuler}
446 Requires: python3 >= 3.6.0, python3-PyYAML
448 %if %{with lustre_modules}
449 Requires: %{requires_kmod_name} = %{requires_kmod_version}
450 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
452 %if %{with lustre_tests_lutf}
453 Requires: python3 >= 3.6.0
455 Requires: attr, rsync, lsof, /usr/bin/getconf
456 Requires: /usr/sbin/getenforce, acl, /usr/bin/killall, /usr/bin/ping, bc
457 # Of the supported targets, only rhel7 doesn't support Recommends.
458 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
459 Recommends: perl, dbench, iozone
460 # Either of these is sufficient
461 Suggests: pdsh, clush
464 %if "%{mpi_name}" == "mpich"
465 BuildRequires: mpich-devel
467 %if "%{mpi_name}" == "openmpi"
468 %if "%{_vendor}" == "redhat" || 0%{?openEuler} || 0%{?suse_version} < 1500
469 BuildRequires: openmpi-devel
471 BuildRequires: openmpi2-devel
479 This package contains a set of test binaries and scripts that are intended
480 to be used by the Lustre testing framework.
482 %if %{with lustre_modules}
483 %kernel_module_package -n %{name}-tests -p %SOURCE7 -f %SOURCE8 %{_flavor}
487 %if %{with multiple_lnds}
488 # begin multiple_lnds
489 %kernel_module_package -n %{name}-lnet-socklnd -p %SOURCE11 -f %SOURCE12 %{_flavor}
491 ## re-write post/preun generated by kmodtool [ls -s and rm -f]
492 %define inkernmod %{modules_fs_path}/%{lustre_name}/net/in-kernel-ko2iblnd.ko
493 %define inkernsym %{modules_fs_path}/%{lustre_name}/net/ko2iblnd.ko
494 %define ofed_module_package %{expand:%(
497 %kernel_module_package -n %{name}-lnet-in-kernel-o2iblnd -p %SOURCE19 -f %SOURCE20 %{_flavor}
499 sed -i -e '/^%%post.*/a ln -sf %{inkernmod} %{inkernsym}' -e '/^%%preun.*/a rm -f %{inkernsym}' $TMPFILE
502 %{expand:%(cat '%{ofed_module_package}')}
505 %kernel_module_package -n %{name}-lnet-o2iblnd -p %SOURCE13 -f %SOURCE14 %{_flavor}
508 %kernel_module_package -n %{name}-lnet-gnilnd -p %SOURCE15 -f %SOURCE16 %{_flavor}
511 %kernel_module_package -n %{name}-lnet-kfilnd -p %SOURCE17 -f %SOURCE18 %{_flavor}
516 %if %{with lustre_iokit}
517 %package -n lustre-iokit
518 Summary: Collection of benchmark tools for a cluster with the Lustre file system
520 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
524 %description -n lustre-iokit
525 This package includes five tools:
527 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
530 This survey can be run in 3 modes to test disk I/O including the filesystem,
531 network I/O, and disk I/O via the network. The script does sequential I/O
532 with varying numbers of threads and objects (files) by using lctl::test_brw
533 to drive the echo_client connected to local or remote obdfilter instances,
534 or remote obdecho instances.
537 This survey tests the client-to-disk performance of individual OSTs, and
538 ranks then for comparison.
541 This script will collect IO stats on a defined set of nodes.
544 A script to run the IOR benchmark. The latest version can be downloaded from
545 https://github.com/hpc/ior/
548 This survey tests the local metadata performance using the echo_client to drive
549 the MDD layer to perform operations. It is run with multiple threads (to
550 simulate MDT service threads) locally on the MDS node, and does not need Lustre
551 clients in order to run
554 This survey tests LNet performance between a group of clients and servers.
557 %if 0%{?suse_version}
561 %setup -qn lustre-%{version}
562 ln lustre/ChangeLog ChangeLog-lustre
563 ln lnet/ChangeLog ChangeLog-lnet
566 # Set an explicit path to our Linux tree, if we can.
567 cd $RPM_BUILD_DIR/lustre-%{version}
569 # Store the CFLAGS and LDFLAGS that would normally be used in the UTILS_CFLAGS
570 # and UTILS_LDFLAGS environment variables so that we use can them when compiling
571 # the user-space code in lustre/utils and lnet/utils. As of RHEL 8.0, the
572 # __global_* variants are deprecated in favour of build_cflags, etc. If neither
573 # style is available (e.g. on SLES), then these just end up as empty strings.
574 export UTILS_CFLAGS="%{?build_cflags:%{build_cflags}}%{!?build_cflags:%{?__global_cflags:%{__global_cflags}}}"
575 export UTILS_LDFLAGS="%{?build_ldflags:%{build_ldflags}}%{!?build_ldflags:%{?__global_ldflags:%{__global_ldflags}}}"
577 # RHEL7 on PPC64 needs __SANE_USERSPACE_TYPES__ defined so that __s64 and __u64
578 # are presented to user-land as long long instead of long long. Without this it
579 # will fail the format check whenever such a variable is printed.
582 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
586 # Disable any hardening or annotation since this doesn't make sense for
587 # kernel code, and reset "optflags" so that the vendor's overzealous flags don't
588 # create build failures.
589 %define optflags -g -O2 -Werror
590 %undefine _annotated_build
591 %undefine _hardened_build
593 CONFIGURE_ARGS="%{?configure_args}"
594 if [ -n "$CONFIGURE_ARGS" ]; then
595 # make sure %%kdir and %%kobjdir are not in the configure arguments
596 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
597 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
598 # remove --with-kmp-moddir from configure arguments,
599 # it will be set --with-kmp-moddir=%%kmoddir
600 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-kmp-moddir=[^ ][^ ]* \?//')
601 # remove env variables from config cache built by initial configure,
602 # and create dedicated cache in temporary build directory
603 if [ -f "$CONFIG_CACHE_FILE" ]; then
604 TMP_CONFIG_CACHE="$(mktemp --tmpdir newconfig-XXXXXXXX.cache)"
605 sed -e "/ac_cv_env/d" \
606 -e "/am_cv_CC_dependencies_compiler_type/d" \
607 -e "/lb_cv_mpi_tests/d" \
608 "$CONFIG_CACHE_FILE" > $TMP_CONFIG_CACHE
609 CONFIGURE_ARGS="$CONFIGURE_ARGS --cache-file=$TMP_CONFIG_CACHE"
613 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
614 # string in it which we don't want word splitted by the shell
615 # also remove (build|host|target) options because they will be specified
616 # inside $CONFIGURE_ARGS
617 # kmod tools/scripts require "name" directory with kernel modules
620 %define _configure eval ./configure
621 %define eval_configure %configure
623 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
627 %if "%{mpi_name}" == "mpich"
630 %if "%{mpi_name}" == "openmpi"
636 # kfabric can be either cray-kfabric or kfabric
639 for kfabric in cray-kfabric kfabric
641 path=/usr/src/${kfabric}/default/Module.symvers
642 if [ -f $path ]; then
643 WITH_KFI="--with-kfi=$(dirname $path)"
651 o2ib_path=$(find -H %{mofed_default_path} -type d -name ofed_scripts | xargs dirname)
652 if [ -z "$o2ib_path" ]; then
653 echo "ERROR: could not find OFED devel headers"
656 if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
657 echo "ERROR: multiple OFED versions installed"
660 WITH_O2IB="--with-o2ib=${o2ib_path}"
663 WITH_O2IB="--with-o2ib=no"
667 %eval_configure $CONFIGURE_ARGS \
668 %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
669 %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
670 %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
671 %{!?with_shared:--disable-shared} \
672 %{!?with_static:--disable-static} \
673 %{!?with_lustre_iokit:--disable-iokit} \
674 %{!?with_ldiskfs:--disable-ldiskfs} \
675 %{!?with_servers:--disable-server} \
676 %{!?with_zfs:--without-zfs} \
677 %{!?with_gss:--disable-gss} \
678 %{!?with_gss_keyring:--disable-gss-keyring} \
679 %{!?with_manpages:--disable-manpages} \
680 %{!?with_systemd:--with-systemdsystemunitdir=no} \
681 %{?with_systemd:--with-systemdsystemunitdir=%{_unitdir}} \
682 %{?with_multiple_lnds:--enable-multiple-lnds} \
684 %{?with_gni:--enable-gni} \
686 %{!?with_l_getsepol:--disable-l_getsepol} \
687 --with-linux=%{kdir} \
688 --with-linux-obj=%{kobjdir} \
689 --with-kmp-moddir=%{kmoddir}/%{name}
692 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
693 echo "Error: Server Support configured but not found"
698 make %{?_smp_mflags} -s %{?make_args}
701 %if "%{mpi_name}" == "mpich"
704 %if "%{mpi_name}" == "openmpi"
713 %if "%{mpi_name}" == "mpich"
716 %if "%{mpi_name}" == "openmpi"
722 make install DESTDIR=$RPM_BUILD_ROOT
724 %if %{with lustre_modules}
725 # RHEL's kernel_module_path macro expects that all the modules
726 # in a kmod package will be in modules_fs_path/<sub packagename>
727 # but Lustre installs all of the modules in a single pass into
728 # a shared location. Since this is a restriction imposed by
729 # RHEL, we handle this here in the spec file rather than in
730 # Lustre's build system. This is not expected to bother SLES's
731 # kernel_module_path macro.
732 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{name}
733 %{__install} -D -m 0644 ${PWD}/Module.symvers %{buildroot}/Module.symvers
735 mkdir -p $basemodpath-osd-ldiskfs/fs
736 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
737 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
740 mkdir -p $basemodpath-osd-zfs/fs
741 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
743 %if %{with lustre_tests}
744 mkdir -p $basemodpath-tests/fs
745 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
746 mv $basemodpath/fs/obd_test.ko $basemodpath-tests/fs/obd_test.ko
747 mv $basemodpath/fs/kinode.ko $basemodpath-tests/fs/kinode.ko
748 [ -f $basemodpath/fs/ldlm_extent.ko ] && mv $basemodpath/fs/ldlm_extent.ko $basemodpath-tests/fs/ldlm_extent.ko
753 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
754 rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
756 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
757 rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
763 %if %{with servers} && %{with lustre_utils}
764 # The .ha_v2 extension identifies the heartbeat resource agent as using
765 # legacy syntax. Install a compatibility symlink to avoid conflicts when
766 # newer-style agents are added.
767 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
768 echo '%dir %{_sysconfdir}/ha.d' >>lustre.files
769 echo '%dir %{_sysconfdir}/ha.d/resource.d' >>lustre.files
770 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
771 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
774 # systemd is on redhat, fedora, and suse
776 echo '%{_unitdir}/lnet.service' >>lustre.files
779 %if "%{_vendor}" == "redhat" || 0%{?openEuler}
780 # The following scripts are Red Hat specific
782 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
783 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
784 %if %{with gss_keyring}
785 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
786 echo '%config(noreplace) %{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
790 %if %{without systemd}
791 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
794 %if %{with gss_keyring}
795 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
798 # fc18 needs 'x' permission for library files
799 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
801 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
803 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
806 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
807 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
811 echo '%{_libdir}/libiam.a' >>lustre.files
814 %if %{with lustre_utils}
815 mkdir -p $RPM_BUILD_ROOT/%{_datadir}/lustre
816 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre ] ; then
817 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ -name \*.la -type f -exec rm -f {} \;
821 echo '%{_prefix}/lib/firewalld/services/*.xml' >>lustre.files
822 %if %{with lustre_modules}
823 # mark modules executable for find-debuginfo.sh
824 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
827 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
829 %if %{with lustre_tests}
830 :> lustre-tests.files
832 %if "%{mpi_name}" == "mpich"
835 %if "%{mpi_name}" == "openmpi"
840 echo '%dir %{_libdir}/lustre' >>lustre-tests.files
841 echo '%dir %{_libdir}/lustre/tests' >>lustre-tests.files
842 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
843 echo '%{_bindir}/mcreate' >>lustre-tests.files
844 echo '%{_bindir}/statx' >>lustre-tests.files
845 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
846 echo '%{_sbindir}/wiretest' >>lustre-tests.files
847 if [ -n "$MPI_BIN" ]; then
848 echo "$MPI_BIN/*" >>lustre-tests.files
850 %if %{with lustre_tests_lutf}
851 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
855 %if %{with lustre_tests_lutf}
856 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
859 %files devel -f lustre-devel.files
860 %defattr(-,root,root)
861 %{_libdir}/pkgconfig/lustre.pc
863 %{_libdir}/liblustreapi.a
866 %{_libdir}/liblustreapi.so
868 %{_includedir}/lustre
869 %if %{with lustre_modules}
870 %{_includedir}/linux/lnet
871 %{_includedir}/linux/lustre
873 %exclude %{_includedir}/linux/lnet
874 %exclude %{_includedir}/linux/lustre
877 %files -f lustre.files
878 %defattr(-,root,root)
880 %if %{with lustre_tests}
881 %exclude %{_sbindir}/wirecheck
882 %exclude %{_sbindir}/wiretest
885 %exclude %{_sbindir}/zfsobj2fid
887 %if %{with lustre_utils}
889 %dir %{_libexecdir}/lustre
890 %{_libexecdir}/lustre/lc_common
891 %{_libexecdir}/lustre/haconfig
892 %{_bindir}/lustre_req_history
893 %{_bindir}/remove_changelog
894 %{_bindir}/remove_updatelog
900 %{_bindir}/plot-llstat
904 %{_bindir}/lfs_migrate
907 /sbin/mount.lustre_tgt
909 @BASH_COMPLETION_DIR@
917 %{_libdir}/liblustreapi.so.*
919 %{_udevrulesdir}/99-lustre.rules
921 %{_udevrulesdir}/99-lustre-server.rules
924 %config(noreplace) %{_sysconfdir}/ldev.conf
926 %config(noreplace) %{_sysconfdir}/lnet.conf
927 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
928 %if %{with lustre_utils}
929 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
931 %if %{with lustre_modules}
932 %exclude /Module.symvers
935 %if %{with lustre_utils}
936 %files osd-ldiskfs-mount
937 %defattr(-,root,root)
938 %dir %{_libdir}/@PACKAGE@
939 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
946 %if %{with lustre_utils}
948 %defattr(-,root,root)
949 %dir %{_libdir}/@PACKAGE@
950 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
951 %{_sysconfdir}/zfs/zed.d/*
956 # with lustre_modules
960 %files resource-agents
961 %defattr(0755,root,root)
962 %dir %{_prefix}/lib/ocf
963 %dir %{_prefix}/lib/ocf/resource.d
964 %{_prefix}/lib/ocf/resource.d/lustre/
967 %if %{with lustre_tests}
968 %files tests -f lustre-tests.files
969 %defattr(-,root,root)
972 %if %{with lustre_iokit}
973 %files -n lustre-iokit
974 %defattr(-, root, root)
975 %{_bindir}/iokit-config
976 %{_bindir}/iokit-gather-stats
978 %{_bindir}/iokit-libecho
979 %{_bindir}/iokit-lstats
980 %{_bindir}/iokit-parse-ior
981 %{_bindir}/iokit-plot-obdfilter
982 %{_bindir}/iokit-plot-ost
983 %{_bindir}/iokit-plot-sgpdd
984 %{_bindir}/ior-survey
985 %{_bindir}/mds-survey
986 %{_bindir}/obdfilter-survey
987 %{_bindir}/ost-survey
988 %{_bindir}/sgpdd-survey
989 %{_bindir}/lst-survey
991 %doc lustre-iokit/ior-survey/README.ior-survey
992 %doc lustre-iokit/mds-survey/README.mds-survey
993 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
994 %doc lustre-iokit/ost-survey/README.ost-survey
995 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
996 %doc lustre-iokit/stats-collect/README.iokit-lstats
997 %doc lustre-iokit/lst-survey/README.lst-survey
1002 %systemd_post lnet.service
1007 %systemd_preun lnet.service
1012 %systemd_postun_with_restart lnet.service
1016 rm -rf $RPM_BUILD_ROOT
1017 rm -rf %{_tmppath}/kmp