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"
638 o2ib_path=$(find -H %{mofed_default_path} -type d -name ofed_scripts | xargs dirname)
639 if [ -z "$o2ib_path" ]; then
640 echo "ERROR: could not find OFED devel headers"
643 if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
644 echo "ERROR: multiple OFED versions installed"
647 WITH_O2IB="--with-o2ib=${o2ib_path}"
650 WITH_O2IB="--with-o2ib=no"
654 %eval_configure $CONFIGURE_ARGS \
655 %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
656 %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
657 %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
658 %{!?with_shared:--disable-shared} \
659 %{!?with_static:--disable-static} \
660 %{!?with_lustre_iokit:--disable-iokit} \
661 %{!?with_ldiskfs:--disable-ldiskfs} \
662 %{!?with_servers:--disable-server} \
663 %{!?with_zfs:--without-zfs} \
664 %{!?with_gss:--disable-gss} \
665 %{!?with_gss_keyring:--disable-gss-keyring} \
666 %{!?with_manpages:--disable-manpages} \
667 %{!?with_systemd:--with-systemdsystemunitdir=no} \
668 %{?with_systemd:--with-systemdsystemunitdir=%{_unitdir}} \
669 %{?with_multiple_lnds:--enable-multiple-lnds} \
670 %{?with_kfi:--with-kfi=/usr/src/cray-kfabric/default} \
671 %{?with_gni:--enable-gni} \
673 %{!?with_l_getsepol:--disable-l_getsepol} \
674 --with-linux=%{kdir} \
675 --with-linux-obj=%{kobjdir} \
676 --with-kmp-moddir=%{kmoddir}/%{name}
679 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
680 echo "Error: Server Support configured but not found"
685 make %{?_smp_mflags} -s %{?make_args}
688 %if "%{mpi_name}" == "mpich"
691 %if "%{mpi_name}" == "openmpi"
700 %if "%{mpi_name}" == "mpich"
703 %if "%{mpi_name}" == "openmpi"
709 make install DESTDIR=$RPM_BUILD_ROOT
711 %if %{with lustre_modules}
712 # RHEL's kernel_module_path macro expects that all the modules
713 # in a kmod package will be in modules_fs_path/<sub packagename>
714 # but Lustre installs all of the modules in a single pass into
715 # a shared location. Since this is a restriction imposed by
716 # RHEL, we handle this here in the spec file rather than in
717 # Lustre's build system. This is not expected to bother SLES's
718 # kernel_module_path macro.
719 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{name}
720 %{__install} -D -m 0644 ${PWD}/Module.symvers %{buildroot}/Module.symvers
722 mkdir -p $basemodpath-osd-ldiskfs/fs
723 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
724 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
727 mkdir -p $basemodpath-osd-zfs/fs
728 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
730 %if %{with lustre_tests}
731 mkdir -p $basemodpath-tests/fs
732 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
733 mv $basemodpath/fs/obd_test.ko $basemodpath-tests/fs/obd_test.ko
734 mv $basemodpath/fs/kinode.ko $basemodpath-tests/fs/kinode.ko
739 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
740 rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
742 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
743 rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
749 %if %{with servers} && %{with lustre_utils}
750 # The .ha_v2 extension identifies the heartbeat resource agent as using
751 # legacy syntax. Install a compatibility symlink to avoid conflicts when
752 # newer-style agents are added.
753 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
754 echo '%dir %{_sysconfdir}/ha.d' >>lustre.files
755 echo '%dir %{_sysconfdir}/ha.d/resource.d' >>lustre.files
756 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
757 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
760 # systemd is on redhat, fedora, and suse
762 echo '%{_unitdir}/lnet.service' >>lustre.files
765 %if "%{_vendor}" == "redhat" || 0%{?openEuler}
766 # The following scripts are Red Hat specific
768 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
769 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
770 %if %{with gss_keyring}
771 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
772 echo '%config(noreplace) %{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
776 %if %{without systemd}
777 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
780 %if %{with gss_keyring}
781 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
784 # fc18 needs 'x' permission for library files
785 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
787 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
789 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
792 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
793 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
797 echo '%{_libdir}/libiam.a' >>lustre.files
800 %if %{with lustre_utils}
801 mkdir -p $RPM_BUILD_ROOT/%{_datadir}/lustre
802 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre ] ; then
803 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ -name \*.la -type f -exec rm -f {} \;
807 echo '%{_prefix}/lib/firewalld/services/*.xml' >>lustre.files
808 %if %{with lustre_modules}
809 # mark modules executable for find-debuginfo.sh
810 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
813 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
815 %if %{with lustre_tests}
816 :> lustre-tests.files
818 %if "%{mpi_name}" == "mpich"
821 %if "%{mpi_name}" == "openmpi"
826 echo '%dir %{_libdir}/lustre' >>lustre-tests.files
827 echo '%dir %{_libdir}/lustre/tests' >>lustre-tests.files
828 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
829 echo '%{_bindir}/mcreate' >>lustre-tests.files
830 echo '%{_bindir}/statx' >>lustre-tests.files
831 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
832 echo '%{_sbindir}/wiretest' >>lustre-tests.files
833 if [ -n "$MPI_BIN" ]; then
834 echo "$MPI_BIN/*" >>lustre-tests.files
836 %if %{with lustre_tests_lutf}
837 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
841 %if %{with lustre_tests_lutf}
842 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
845 %files devel -f lustre-devel.files
846 %defattr(-,root,root)
847 %{_libdir}/pkgconfig/lustre.pc
849 %{_libdir}/liblustreapi.a
852 %{_libdir}/liblustreapi.so
854 %{_includedir}/lustre
855 %if %{with lustre_modules}
856 %{_includedir}/linux/lnet
857 %{_includedir}/linux/lustre
859 %exclude %{_includedir}/linux/lnet
860 %exclude %{_includedir}/linux/lustre
863 %files -f lustre.files
864 %defattr(-,root,root)
866 %if %{with lustre_tests}
867 %exclude %{_sbindir}/wirecheck
868 %exclude %{_sbindir}/wiretest
871 %exclude %{_sbindir}/zfsobj2fid
873 %if %{with lustre_utils}
875 %dir %{_libexecdir}/lustre
876 %{_libexecdir}/lustre/lc_common
877 %{_libexecdir}/lustre/haconfig
878 %{_bindir}/lustre_req_history
879 %{_bindir}/remove_changelog
880 %{_bindir}/remove_updatelog
886 %{_bindir}/plot-llstat
890 %{_bindir}/lfs_migrate
893 /sbin/mount.lustre_tgt
895 @BASH_COMPLETION_DIR@
903 %{_libdir}/liblustreapi.so.*
905 %{_udevrulesdir}/99-lustre.rules
907 %{_udevrulesdir}/99-lustre-server.rules
910 %config(noreplace) %{_sysconfdir}/ldev.conf
912 %config(noreplace) %{_sysconfdir}/lnet.conf
913 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
914 %if %{with lustre_utils}
915 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
917 %if %{with lustre_modules}
918 %exclude /Module.symvers
921 %if %{with lustre_utils}
922 %files osd-ldiskfs-mount
923 %defattr(-,root,root)
924 %dir %{_libdir}/@PACKAGE@
925 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
932 %if %{with lustre_utils}
934 %defattr(-,root,root)
935 %dir %{_libdir}/@PACKAGE@
936 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
937 %{_sysconfdir}/zfs/zed.d/*
942 # with lustre_modules
946 %files resource-agents
947 %defattr(0755,root,root)
948 %dir %{_prefix}/lib/ocf
949 %dir %{_prefix}/lib/ocf/resource.d
950 %{_prefix}/lib/ocf/resource.d/lustre/
953 %if %{with lustre_tests}
954 %files tests -f lustre-tests.files
955 %defattr(-,root,root)
958 %if %{with lustre_iokit}
959 %files -n lustre-iokit
960 %defattr(-, root, root)
961 %{_bindir}/iokit-config
962 %{_bindir}/iokit-gather-stats
964 %{_bindir}/iokit-libecho
965 %{_bindir}/iokit-lstats
966 %{_bindir}/iokit-parse-ior
967 %{_bindir}/iokit-plot-obdfilter
968 %{_bindir}/iokit-plot-ost
969 %{_bindir}/iokit-plot-sgpdd
970 %{_bindir}/ior-survey
971 %{_bindir}/mds-survey
972 %{_bindir}/obdfilter-survey
973 %{_bindir}/ost-survey
974 %{_bindir}/sgpdd-survey
975 %{_bindir}/lst-survey
977 %doc lustre-iokit/ior-survey/README.ior-survey
978 %doc lustre-iokit/mds-survey/README.mds-survey
979 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
980 %doc lustre-iokit/ost-survey/README.ost-survey
981 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
982 %doc lustre-iokit/stats-collect/README.iokit-lstats
983 %doc lustre-iokit/lst-survey/README.lst-survey
988 %systemd_post lnet.service
993 %systemd_preun lnet.service
998 %systemd_postun_with_restart lnet.service
1002 rm -rf $RPM_BUILD_ROOT
1003 rm -rf %{_tmppath}/kmp