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
227 %if "%{_vendor}" == "openEuler"
228 BuildRequires: openEuler-rpm-config
230 BuildRequires: pkg-config
233 BuildRequires: krb5-devel openssl-devel
236 Requires: %{name}-osd
237 Requires: %{name}-osd-mount
238 Obsoletes: lustre-server < %{version}
239 Provides: lustre-server = %{version}-%{release}
241 Obsoletes: lustre-client < %{version}
242 Provides: lustre-client = %{version}-%{release}
243 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "fedora" || "%{_vendor}" == "openEuler"
244 #suse don't support selinux
245 BuildRequires: pkgconfig(libselinux)
247 %if %{with lustre_modules}
249 BuildRequires: mlnx-ofa_kernel-devel
250 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
251 Requires: kmod-mlnx-ofa_kernel
253 Requires: mlnx-ofa_kernel-kmp
256 %if 0%{?rhel} >= 8 || "%{_vendor}" == "openEuler"
257 BuildRequires: kernel-rpm-macros
259 %if 0%{?suse_version} >= 1530
260 BuildRequires: rpm-build >= 4.14.3
262 BuildRequires: %kernel_module_package_buildreqs
263 # need to provide a /usr/lib/${uname -r)/build dir
264 BuildRequires: kernel
265 %if "%{_vendor}" == "redhat"
267 BuildRequires: kernel-abi-whitelists
273 Requires(post): systemd
274 Requires(preun): systemd
275 Requires(postun): systemd
276 BuildRequires: pkgconfig(systemd)
280 Userspace tools and files for the Lustre file system.
282 %if %{with lustre_modules}
284 # until we have achieved full kABI compatibility we need to
285 # restrict the kernel range that can be used to the kernel
286 # version from the RHEL minor release
287 # this is supposed to be done for kmods automatically but
288 # RHBZ#1467319 seems to be getting in the way
289 # this is true for el7.0 through el7.4
290 %define preamble %{expand:%(
292 cat %{SOURCE1} > $TMPFILE
293 kver=%{kernel_version}
294 linuxversion=${kver%%%%-*}
295 linuxrelease=${kver##*-}
296 kabiminor=${linuxrelease%%%%.*}
297 echo "Requires: kernel < $linuxversion-$((kabiminor+1)), kernel >= $linuxversion-$((kabiminor))" >> $TMPFILE
301 %define preamble %{SOURCE1}
303 %kernel_module_package -n %{name} -p %preamble -f %SOURCE2 %{_flavor}
306 %kernel_module_package -n %{name}-osd-ldiskfs -p %SOURCE3 -f %SOURCE4 %{_flavor}
307 %if %{with lustre_utils}
308 %package osd-ldiskfs-mount
309 Summary: Lustre mount's ldiskfs-specific helper library
310 BuildRequires: e2fsprogs-devel >= 1.44.3 pkgconfig(mount)
311 Requires: ldiskfsprogs > 1.45.6
312 Provides: lustre-osd-mount = %{version}
313 Provides: %{name}-osd-mount = %{version}
314 Obsoletes: %{name}-osd-mount < %{version}
315 Obsoletes: lustre-osd-mount < %{version}
317 %description osd-ldiskfs-mount
318 Provide a shared library (dso) that can be loaded into various
319 lustre tools (mount/mkfs) to provide support for ldisfs
327 %kernel_module_package -n %{name}-osd-zfs -p %SOURCE5 -f %SOURCE6 %{_flavor}
328 %if %{with lustre_utils}
329 %package osd-zfs-mount
330 Summary: Lustre mount's zfs-specific helper library
331 BuildRequires: pkgconfig(mount)
332 Provides: %{name}-osd-mount = %{version}
333 Obsoletes: lustre-osd-mount < %{version}
334 # Tests also require zpool from zfs package:
336 Requires: %{requires_kmod_osd_zfs_name}
338 %description osd-zfs-mount
339 Provide a shared library (dso) that can be loaded into various
340 lustre tools (mount/mkfs) to provide support for ZFS.
346 # with lustre_modules
350 %package resource-agents
351 Summary: HA Resuable Cluster Resource Scripts for Lustre
353 Requires: resource-agents
355 %description resource-agents
356 A set of scripts to operate Lustre resources in a High Availablity
357 environment for both Pacemaker and rgmanager.
361 Summary: Lustre include headers
362 Provides: lustre-devel = %{version}
363 Requires: %{lustre_name} = %{version}
364 %if %{with lustre_modules}
365 Requires: %{requires_kmod_name} = %{requires_kmod_version}
369 This package contains the header files needed for building additional
370 applications against the Lustre / LNet utilities libraries.
372 :> lustre-devel.files
374 %if %{with lustre_tests}
376 Summary: Lustre testing framework
377 Provides: %{name}-tests = %{version}
378 %if %{with lustre_iokit}
379 Requires: %{name} = %{version}, lustre-iokit
381 Requires: %{name} = %{version}
383 Requires: lustre-devel = %{version}
384 %if 0%{?rhel} >= 8 || 0%{?suse_version} >= 1500
385 Requires: python3 >= 3.6.0, python3-PyYAML
387 %if %{with lustre_modules}
388 Requires: %{requires_kmod_name} = %{requires_kmod_version}
389 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
391 %if %{with lustre_tests_lutf}
392 Requires: python3 >= 3.6.0
394 Requires: attr, rsync, perl, lsof, /usr/bin/getconf
395 Requires: /usr/sbin/getenforce, /usr/bin/netstat, acl, /usr/bin/killall, /usr/bin/ping, bc
396 # Of the supported targets, only rhel7 doesn't support Recommends.
397 %if 0%{?rhel} > 7 || 0%{?rhel} < 1
398 Recommends: dbench, iozone
399 # Either of these is sufficient
400 Suggests: pdsh, clush
403 %if "%{mpi_name}" == "mpich"
404 BuildRequires: mpich-devel
406 %if "%{mpi_name}" == "openmpi"
407 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler" || 0%{?suse_version} < 1500
408 BuildRequires: openmpi-devel
410 BuildRequires: openmpi2-devel
418 This package contains a set of test binaries and scripts that are intended
419 to be used by the Lustre testing framework.
421 %if %{with lustre_modules}
422 %kernel_module_package -n %{name}-tests -p %SOURCE7 -f %SOURCE8 %{_flavor}
426 %if %{with lustre_iokit}
427 %package -n lustre-iokit
428 Summary: Collection of benchmark tools for a cluster with the Lustre file system
429 Requires: python3, sg3_utils
431 %description -n lustre-iokit
432 This package includes five tools:
434 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
437 This survey can be run in 3 modes to test disk I/O including the filesystem,
438 network I/O, and disk I/O via the network. The script does sequential I/O
439 with varying numbers of threads and objects (files) by using lctl::test_brw
440 to drive the echo_client connected to local or remote obdfilter instances,
441 or remote obdecho instances.
444 This survey tests the client-to-disk performance of individual OSTs, and
445 ranks then for comparison.
448 This script will collect IO stats on a defined set of nodes.
451 A script to run the IOR benchmark. The latest version can be downloaded from
452 http://www.llnl.gov/asci/purple/benchmarks/limited/ior/
455 This survey tests the local metadata performance using the echo_client to drive
456 the MDD layer to perform operations. It is run with multiple threads (to
457 simulate MDT service threads) locally on the MDS node, and does not need Lustre
458 clients in order to run
461 This survey tests LNet performance between a group of clients and servers.
464 %if 0%{?suse_version}
468 %setup -qn lustre-%{version}
469 ln lustre/ChangeLog ChangeLog-lustre
470 ln lnet/ChangeLog ChangeLog-lnet
473 # Set an explicit path to our Linux tree, if we can.
474 cd $RPM_BUILD_DIR/lustre-%{version}
476 # Store the CFLAGS and LDFLAGS that would normally be used in the UTILS_CFLAGS
477 # and UTILS_LDFLAGS environment variables so that we use can them when compiling
478 # the user-space code in lustre/utils and lnet/utils. As of RHEL 8.0, the
479 # __global_* variants are deprecated in favour of build_cflags, etc. If neither
480 # style is available (e.g. on SLES), then these just end up as empty strings.
481 export UTILS_CFLAGS="%{?build_cflags:%{build_cflags}}%{!?build_cflags:%{?__global_cflags:%{__global_cflags}}}"
482 export UTILS_LDFLAGS="%{?build_ldflags:%{build_ldflags}}%{!?build_ldflags:%{?__global_ldflags:%{__global_ldflags}}}"
484 # RHEL7 on PPC64 needs __SANE_USERSPACE_TYPES__ defined so that __s64 and __u64
485 # are presented to user-land as long long instead of long long. Without this it
486 # will fail the format check whenever such a variable is printed.
489 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
493 # Disable any hardening or annotation since this doesn't make sense for
494 # kernel code, and reset "optflags" so that the vendor's overzealous flags don't
495 # create build failures.
496 %define optflags -g -O2 -Werror
497 %undefine _annotated_build
498 %undefine _hardened_build
500 CONFIGURE_ARGS="%{?configure_args}"
501 if [ -n "$CONFIGURE_ARGS" ]; then
502 # make sure %%kdir and %%kobjdir are not in the configure arguments
503 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
504 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
505 # remove --with-kmp-moddir from configure arguments,
506 # it will be set --with-kmp-moddir=%%kmoddir
507 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-kmp-moddir=[^ ][^ ]* \?//')
508 # remove env variables from config cache built by initial configure,
509 # and create dedicated cache in temporary build directory
510 if [ -f "$CONFIG_CACHE_FILE" ]; then
511 TMP_CONFIG_CACHE="$(mktemp --tmpdir newconfig-XXXXXXXX.cache)"
512 sed -e "/ac_cv_env/d" \
513 -e "/am_cv_CC_dependencies_compiler_type/d" \
514 -e "/lb_cv_mpi_tests/d" \
515 "$CONFIG_CACHE_FILE" > $TMP_CONFIG_CACHE
516 CONFIGURE_ARGS="$CONFIGURE_ARGS --cache-file=$TMP_CONFIG_CACHE"
520 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
521 # string in it which we don't want word splitted by the shell
522 # also remove (build|host|target) options because they will be specified
523 # inside $CONFIGURE_ARGS
524 # kmod tools/scripts require "name" directory with kernel modules
527 %define _configure eval ./configure
528 %define eval_configure %configure
530 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
534 %if "%{mpi_name}" == "mpich"
537 %if "%{mpi_name}" == "openmpi"
544 o2ib_path=$(find /usr/src/ofa_kernel/ -type d -name ofed_scripts | xargs dirname)
545 if [ -z "$o2ib_path" ]; then
546 echo "ERROR: could not find OFED devel headers"
549 if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
550 echo "ERROR: multiple OFED versions installed"
555 %eval_configure $CONFIGURE_ARGS \
556 %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
557 %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
558 %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
559 %{!?with_shared:--disable-shared} \
560 %{!?with_static:--disable-static} \
561 %{!?with_lustre_iokit:--disable-iokit} \
562 %{!?with_ldiskfs:--disable-ldiskfs} \
563 %{!?with_servers:--disable-server} \
564 %{!?with_zfs:--without-zfs} \
565 %{!?with_snmp:--disable-snmp} \
566 %{!?with_gss:--disable-gss} \
567 %{!?with_gss_keyring:--disable-gss-keyring} \
568 %{!?with_manpages:--disable-manpages} \
569 %{!?with_systemd:--with-systemdsystemunitdir=no} \
570 %{?with_systemd:--with-systemdsystemunitdir=%{_unitdir}} \
571 %{?with_mofed:--with-o2ib=$o2ib_path} \
572 --with-linux=%{kdir} \
573 --with-linux-obj=%{kobjdir} \
574 --with-kmp-moddir=%{kmoddir}/%{name}
577 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
578 echo "Error: Server Support configured but not found"
583 make %{?_smp_mflags} -s %{?make_args}
586 %if "%{mpi_name}" == "mpich"
589 %if "%{mpi_name}" == "openmpi"
598 %if "%{mpi_name}" == "mpich"
601 %if "%{mpi_name}" == "openmpi"
607 make install DESTDIR=$RPM_BUILD_ROOT
609 %if %{with lustre_modules}
610 # RHEL's kernel_module_path macro expects that all the modules
611 # in a kmod package will be in modules_fs_path/<sub packagename>
612 # but Lustre installs all of the modules in a single pass into
613 # a shared location. Since this is a restriction imposed by
614 # RHEL, we handle this here in the spec file rather than in
615 # Lustre's build system. This is not expected to bother SLES's
616 # kernel_module_path macro.
617 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{name}
618 %{__install} -D -m 0644 ${PWD}/Module.symvers %{buildroot}/Module.symvers
620 mkdir -p $basemodpath-osd-ldiskfs/fs
621 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
622 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
625 mkdir -p $basemodpath-osd-zfs/fs
626 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
628 %if %{with lustre_tests}
629 mkdir -p $basemodpath-tests/fs
630 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
631 mkdir -p $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
632 mv $basemodpath/fs/kinode.ko $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
637 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
638 rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
640 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
641 rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
647 %if %{with servers} && %{with lustre_utils}
648 # The .ha_v2 extension identifies the heartbeat resource agent as using
649 # legacy syntax. Install a compatibility symlink to avoid conflicts when
650 # newer-style agents are added.
651 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
652 echo '%dir %{_sysconfdir}/ha.d' >>lustre.files
653 echo '%dir %{_sysconfdir}/ha.d/resource.d' >>lustre.files
654 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
655 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
658 # systemd is on redhat, fedora, and suse
660 echo '%{_unitdir}/lnet.service' >>lustre.files
663 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
664 # The following scripts are Red Hat specific
666 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
667 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
668 %if %{with gss_keyring}
669 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
670 echo '%config(noreplace) %{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
674 %if %{without systemd}
675 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
678 %if %{with gss_keyring}
679 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
682 # fc18 needs 'x' permission for library files
683 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
685 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
687 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
690 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
691 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
695 echo '%{_libdir}/libiam.a' >>lustre.files
699 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
700 echo '%{_libdir}/lustre/snmp' >>lustre.files
703 %if %{with lustre_utils}
704 mkdir -p $RPM_BUILD_ROOT/%{_datadir}/lustre
705 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre ] ; then
706 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ -name \*.la -type f -exec rm -f {} \;
710 %if %{with lustre_modules}
711 echo '%{_prefix}/lib/firewalld/services/*.xml' >>lustre.files
712 # mark modules executable for find-debuginfo.sh
713 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
716 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
718 %if %{with lustre_tests}
719 :> lustre-tests.files
721 %if "%{mpi_name}" == "mpich"
724 %if "%{mpi_name}" == "openmpi"
729 echo '%dir %{_libdir}/lustre' >>lustre-tests.files
730 echo '%dir %{_libdir}/lustre/tests' >>lustre-tests.files
731 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
732 echo '%{_bindir}/mcreate' >>lustre-tests.files
733 echo '%{_bindir}/munlink' >>lustre-tests.files
734 echo '%{_bindir}/statx' >>lustre-tests.files
735 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
736 echo '%{_sbindir}/wiretest' >>lustre-tests.files
737 if [ -n "$MPI_BIN" ]; then
738 echo "$MPI_BIN/*" >>lustre-tests.files
740 %if %{with lustre_tests_lutf}
741 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
745 %if %{with lustre_tests_lutf}
746 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
749 %files devel -f lustre-devel.files
750 %defattr(-,root,root)
751 %{_libdir}/pkgconfig/lustre.pc
753 %{_libdir}/liblustreapi.a
756 %{_libdir}/liblustreapi.so
758 %{_includedir}/lustre
759 %if %{with lustre_modules}
760 %{_includedir}/linux/lnet
761 %{_includedir}/linux/lustre
763 %exclude %{_includedir}/linux/lnet
764 %exclude %{_includedir}/linux/lustre
767 %files -f lustre.files
768 %defattr(-,root,root)
770 %if %{with lustre_tests}
771 %exclude %{_sbindir}/wirecheck
772 %exclude %{_sbindir}/wiretest
775 %exclude %{_sbindir}/zfsobj2fid
777 %if %{with lustre_utils}
779 %dir %{_libexecdir}/lustre
780 %{_libexecdir}/lustre/lc_common
781 %{_libexecdir}/lustre/haconfig
782 %{_bindir}/lustre_req_history
783 %{_bindir}/remove_changelog
784 %{_bindir}/remove_updatelog
790 %{_bindir}/plot-llstat
794 %{_bindir}/lfs_migrate
797 /sbin/mount.lustre_tgt
799 @BASH_COMPLETION_DIR@
807 %{_libdir}/liblustreapi.so.*
809 %{_udevrulesdir}/99-lustre.rules
811 %{_udevrulesdir}/99-lustre-server.rules
814 %config(noreplace) %{_sysconfdir}/ldev.conf
816 %config(noreplace) %{_sysconfdir}/lnet.conf
817 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
818 %if %{with lustre_utils}
819 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
821 %if %{with lustre_modules}
822 %exclude /Module.symvers
825 %if %{with lustre_utils}
826 %files osd-ldiskfs-mount
827 %defattr(-,root,root)
828 %dir %{_libdir}/@PACKAGE@
829 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
836 %if %{with lustre_utils}
838 %defattr(-,root,root)
839 %dir %{_libdir}/@PACKAGE@
840 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
841 %{_sysconfdir}/zfs/zed.d/*
846 # with lustre_modules
850 %files resource-agents
851 %defattr(0755,root,root)
852 %dir %{_prefix}/lib/ocf
853 %dir %{_prefix}/lib/ocf/resource.d
854 %{_prefix}/lib/ocf/resource.d/lustre/
857 %if %{with lustre_tests}
858 %files tests -f lustre-tests.files
859 %defattr(-,root,root)
862 %if %{with lustre_iokit}
863 %files -n lustre-iokit
864 %defattr(-, root, root)
865 %{_bindir}/iokit-config
866 %{_bindir}/iokit-gather-stats
868 %{_bindir}/iokit-libecho
869 %{_bindir}/iokit-lstats
870 %{_bindir}/iokit-parse-ior
871 %{_bindir}/iokit-plot-obdfilter
872 %{_bindir}/iokit-plot-ost
873 %{_bindir}/iokit-plot-sgpdd
874 %{_bindir}/ior-survey
875 %{_bindir}/mds-survey
876 %{_bindir}/obdfilter-survey
877 %{_bindir}/ost-survey
878 %{_bindir}/sgpdd-survey
879 %{_bindir}/lst-survey
881 %doc lustre-iokit/ior-survey/README.ior-survey
882 %doc lustre-iokit/mds-survey/README.mds-survey
883 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
884 %doc lustre-iokit/ost-survey/README.ost-survey
885 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
886 %doc lustre-iokit/stats-collect/README.iokit-lstats
887 %doc lustre-iokit/lst-survey/README.lst-survey
892 %systemd_post lnet.service
897 %systemd_preun lnet.service
902 %systemd_postun_with_restart lnet.service
906 rm -rf $RPM_BUILD_ROOT
907 rm -rf %{_tmppath}/kmp