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
21 %bcond_with gss_keyring
22 %bcond_without manpages
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')
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}
42 %if %{without servers}
43 # --without servers overrides --with {ldiskfs|zfs}
44 # so undefine the internal variables set by bcond_*
45 %undefine with_ldiskfs
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}
55 # lustre_tests depends on lustre_utils
56 %if %{without lustre_utils}
57 %undefine with_lustre_tests
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'
69 %if %{defined kobjdir}
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)}
75 %if 0%{?suse_version} >= 1310 && %{defined _take_kobj}
76 %global _flavor %(echo %{_kver} | sed -e 's/^.*-//')
78 %global _flavor default
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)
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
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 %):
100 # %%global _use_internal_dependency_generator 0
102 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
103 # defining it here (until Suse changes their mind)
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
113 #%%global _use_internal_dependency_generator 0
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
121 # Set the package name prefix
122 %if %{undefined lustre_name}
124 %global lustre_name lustre
126 %global lustre_name lustre-client
130 %if %{with lustre_modules}
131 %if %{undefined kmoddir}
132 %if %{defined kernel_module_package_moddir}
133 %global kmoddir %{kernel_module_package_moddir}
135 %if %{defined suse_kernel_module_package}
136 %global kmoddir updates
138 %global kmoddir extra
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}//')
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
153 %global requires_kmod_version %{version}
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
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_/;')
164 %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
169 # RHEL >= 7 comes with systemd
171 %define with_systemd 1
174 # Fedora >= 15 comes with systemd, but only >= 18 has
176 %if 0%{?fedora} >= 18
177 %define with_systemd 1
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
186 # openEuler comes with systemd
187 %if "%{_vendor}" == "openEuler"
188 %define with_systemd 1
191 %{!?mpi_name: %global mpi_name openmpi}
193 Summary: Lustre File System
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
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}
218 %if %{with lustre_tests_lutf}
219 Requires: python3 >= 3.6.0
220 BuildRequires: python3-devel >= 3.6.0, swig
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
230 %if "%{_vendor}" == "openEuler"
231 BuildRequires: openEuler-rpm-config
233 BuildRequires: kernel-debugsource
236 BuildRequires: pkg-config
239 BuildRequires: krb5-devel openssl-devel
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
248 %if "%(echo $USER)" != "abuild"
250 BuildRequires: kernel-source
254 Requires: %{name}-osd
255 Requires: %{name}-osd-mount
256 Obsoletes: lustre-server < %{version}
257 Provides: lustre-server = %{version}-%{release}
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)
265 %if %{with lustre_modules}
267 BuildRequires: mlnx-ofa_kernel-devel
268 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
269 Requires: kmod-mlnx-ofa_kernel
271 Requires: mlnx-ofa_kernel-kmp
274 %if 0%{?rhel} >= 8 || "%{_vendor}" == "openEuler"
275 BuildRequires: kernel-rpm-macros
277 %if 0%{?suse_version} >= 1530
278 BuildRequires: rpm-build >= 4.14.3
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"
285 BuildRequires: kernel-abi-whitelists
291 Requires(post): systemd
292 Requires(preun): systemd
293 Requires(postun): systemd
294 BuildRequires: pkgconfig(systemd)
298 Userspace tools and files for the Lustre file system.
300 %if %{with lustre_modules}
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:%(
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
319 %define preamble %{SOURCE1}
321 %kernel_module_package -n %{name} -p %preamble -f %SOURCE2 %{_flavor}
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}
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
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:
354 Requires: %{requires_kmod_osd_zfs_name}
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.
364 # with lustre_modules
368 %package resource-agents
369 Summary: HA Resuable Cluster Resource Scripts for Lustre
371 Requires: resource-agents
373 %description resource-agents
374 A set of scripts to operate Lustre resources in a High Availablity
375 environment for both Pacemaker and rgmanager.
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}
387 This package contains the header files needed for building additional
388 applications against the Lustre / LNet utilities libraries.
390 :> lustre-devel.files
392 %if %{with lustre_tests}
394 Summary: Lustre testing framework
395 Provides: %{name}-tests = %{version}
396 %if %{with lustre_iokit}
397 Requires: %{name} = %{version}, lustre-iokit
399 Requires: %{name} = %{version}
401 Requires: lustre-devel = %{version}
402 %if 0%{?rhel} >= 8 || 0%{?suse_version} >= 1500
403 Requires: python3 >= 3.6.0, python3-PyYAML
405 %if %{with lustre_modules}
406 Requires: %{requires_kmod_name} = %{requires_kmod_version}
407 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
409 %if %{with lustre_tests_lutf}
410 Requires: python3 >= 3.6.0
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
421 %if "%{mpi_name}" == "mpich"
422 BuildRequires: mpich-devel
424 %if "%{mpi_name}" == "openmpi"
425 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler" || 0%{?suse_version} < 1500
426 BuildRequires: openmpi-devel
428 BuildRequires: openmpi2-devel
436 This package contains a set of test binaries and scripts that are intended
437 to be used by the Lustre testing framework.
439 %if %{with lustre_modules}
440 %kernel_module_package -n %{name}-tests -p %SOURCE7 -f %SOURCE8 %{_flavor}
444 %if %{with lustre_iokit}
445 %package -n lustre-iokit
446 Summary: Collection of benchmark tools for a cluster with the Lustre file system
448 %if 0%{?rhel} > 7 || 0%{?fedora} > 33 || 0%{?rhel} < 1
452 %description -n lustre-iokit
453 This package includes five tools:
455 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
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.
465 This survey tests the client-to-disk performance of individual OSTs, and
466 ranks then for comparison.
469 This script will collect IO stats on a defined set of nodes.
472 A script to run the IOR benchmark. The latest version can be downloaded from
473 https://github.com/hpc/ior/
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
482 This survey tests LNet performance between a group of clients and servers.
485 %if 0%{?suse_version}
489 %setup -qn lustre-%{version}
490 ln lustre/ChangeLog ChangeLog-lustre
491 ln lnet/ChangeLog ChangeLog-lnet
494 # Set an explicit path to our Linux tree, if we can.
495 cd $RPM_BUILD_DIR/lustre-%{version}
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}}}"
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.
510 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
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
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"
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
548 %define _configure eval ./configure
549 %define eval_configure %configure
551 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
555 %if "%{mpi_name}" == "mpich"
558 %if "%{mpi_name}" == "openmpi"
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"
570 if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
571 echo "ERROR: multiple OFED versions installed"
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}
598 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
599 echo "Error: Server Support configured but not found"
604 make %{?_smp_mflags} -s %{?make_args}
607 %if "%{mpi_name}" == "mpich"
610 %if "%{mpi_name}" == "openmpi"
619 %if "%{mpi_name}" == "mpich"
622 %if "%{mpi_name}" == "openmpi"
628 make install DESTDIR=$RPM_BUILD_ROOT
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
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
646 mkdir -p $basemodpath-osd-zfs/fs
647 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
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/
659 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
660 rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
662 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
663 rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
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
680 # systemd is on redhat, fedora, and suse
682 echo '%{_unitdir}/lnet.service' >>lustre.files
685 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
686 # The following scripts are Red Hat specific
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
696 %if %{without systemd}
697 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
700 %if %{with gss_keyring}
701 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
704 # fc18 needs 'x' permission for library files
705 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
707 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
709 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
712 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
713 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
717 echo '%{_libdir}/libiam.a' >>lustre.files
721 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
722 echo '%{_libdir}/lustre/snmp' >>lustre.files
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 {} \;
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 {} \;
738 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
740 %if %{with lustre_tests}
741 :> lustre-tests.files
743 %if "%{mpi_name}" == "mpich"
746 %if "%{mpi_name}" == "openmpi"
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
761 %if %{with lustre_tests_lutf}
762 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
766 %if %{with lustre_tests_lutf}
767 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
770 %files devel -f lustre-devel.files
771 %defattr(-,root,root)
772 %{_libdir}/pkgconfig/lustre.pc
774 %{_libdir}/liblustreapi.a
777 %{_libdir}/liblustreapi.so
779 %{_includedir}/lustre
780 %if %{with lustre_modules}
781 %{_includedir}/linux/lnet
782 %{_includedir}/linux/lustre
784 %exclude %{_includedir}/linux/lnet
785 %exclude %{_includedir}/linux/lustre
788 %files -f lustre.files
789 %defattr(-,root,root)
791 %if %{with lustre_tests}
792 %exclude %{_sbindir}/wirecheck
793 %exclude %{_sbindir}/wiretest
796 %exclude %{_sbindir}/zfsobj2fid
798 %if %{with lustre_utils}
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
811 %{_bindir}/plot-llstat
815 %{_bindir}/lfs_migrate
818 /sbin/mount.lustre_tgt
820 @BASH_COMPLETION_DIR@
828 %{_libdir}/liblustreapi.so.*
830 %{_udevrulesdir}/99-lustre.rules
832 %{_udevrulesdir}/99-lustre-server.rules
835 %config(noreplace) %{_sysconfdir}/ldev.conf
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
842 %if %{with lustre_modules}
843 %exclude /Module.symvers
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
857 %if %{with lustre_utils}
859 %defattr(-,root,root)
860 %dir %{_libdir}/@PACKAGE@
861 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
862 %{_sysconfdir}/zfs/zed.d/*
867 # with lustre_modules
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/
878 %if %{with lustre_tests}
879 %files tests -f lustre-tests.files
880 %defattr(-,root,root)
883 %if %{with lustre_iokit}
884 %files -n lustre-iokit
885 %defattr(-, root, root)
886 %{_bindir}/iokit-config
887 %{_bindir}/iokit-gather-stats
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
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
913 %systemd_post lnet.service
918 %systemd_preun lnet.service
923 %systemd_postun_with_restart lnet.service
927 rm -rf $RPM_BUILD_ROOT
928 rm -rf %{_tmppath}/kmp