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
447 Requires: perl, sg3_utils
449 %description -n lustre-iokit
450 This package includes five tools:
452 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
455 This survey can be run in 3 modes to test disk I/O including the filesystem,
456 network I/O, and disk I/O via the network. The script does sequential I/O
457 with varying numbers of threads and objects (files) by using lctl::test_brw
458 to drive the echo_client connected to local or remote obdfilter instances,
459 or remote obdecho instances.
462 This survey tests the client-to-disk performance of individual OSTs, and
463 ranks then for comparison.
466 This script will collect IO stats on a defined set of nodes.
469 A script to run the IOR benchmark. The latest version can be downloaded from
470 https://github.com/hpc/ior/
473 This survey tests the local metadata performance using the echo_client to drive
474 the MDD layer to perform operations. It is run with multiple threads (to
475 simulate MDT service threads) locally on the MDS node, and does not need Lustre
476 clients in order to run
479 This survey tests LNet performance between a group of clients and servers.
482 %if 0%{?suse_version}
486 %setup -qn lustre-%{version}
487 ln lustre/ChangeLog ChangeLog-lustre
488 ln lnet/ChangeLog ChangeLog-lnet
491 # Set an explicit path to our Linux tree, if we can.
492 cd $RPM_BUILD_DIR/lustre-%{version}
494 # Store the CFLAGS and LDFLAGS that would normally be used in the UTILS_CFLAGS
495 # and UTILS_LDFLAGS environment variables so that we use can them when compiling
496 # the user-space code in lustre/utils and lnet/utils. As of RHEL 8.0, the
497 # __global_* variants are deprecated in favour of build_cflags, etc. If neither
498 # style is available (e.g. on SLES), then these just end up as empty strings.
499 export UTILS_CFLAGS="%{?build_cflags:%{build_cflags}}%{!?build_cflags:%{?__global_cflags:%{__global_cflags}}}"
500 export UTILS_LDFLAGS="%{?build_ldflags:%{build_ldflags}}%{!?build_ldflags:%{?__global_ldflags:%{__global_ldflags}}}"
502 # RHEL7 on PPC64 needs __SANE_USERSPACE_TYPES__ defined so that __s64 and __u64
503 # are presented to user-land as long long instead of long long. Without this it
504 # will fail the format check whenever such a variable is printed.
507 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
511 # Disable any hardening or annotation since this doesn't make sense for
512 # kernel code, and reset "optflags" so that the vendor's overzealous flags don't
513 # create build failures.
514 %define optflags -g -O2 -Werror
515 %undefine _annotated_build
516 %undefine _hardened_build
518 CONFIGURE_ARGS="%{?configure_args}"
519 if [ -n "$CONFIGURE_ARGS" ]; then
520 # make sure %%kdir and %%kobjdir are not in the configure arguments
521 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
522 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
523 # remove --with-kmp-moddir from configure arguments,
524 # it will be set --with-kmp-moddir=%%kmoddir
525 CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-kmp-moddir=[^ ][^ ]* \?//')
526 # remove env variables from config cache built by initial configure,
527 # and create dedicated cache in temporary build directory
528 if [ -f "$CONFIG_CACHE_FILE" ]; then
529 TMP_CONFIG_CACHE="$(mktemp --tmpdir newconfig-XXXXXXXX.cache)"
530 sed -e "/ac_cv_env/d" \
531 -e "/am_cv_CC_dependencies_compiler_type/d" \
532 -e "/lb_cv_mpi_tests/d" \
533 "$CONFIG_CACHE_FILE" > $TMP_CONFIG_CACHE
534 CONFIGURE_ARGS="$CONFIGURE_ARGS --cache-file=$TMP_CONFIG_CACHE"
538 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
539 # string in it which we don't want word splitted by the shell
540 # also remove (build|host|target) options because they will be specified
541 # inside $CONFIGURE_ARGS
542 # kmod tools/scripts require "name" directory with kernel modules
545 %define _configure eval ./configure
546 %define eval_configure %configure
548 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
552 %if "%{mpi_name}" == "mpich"
555 %if "%{mpi_name}" == "openmpi"
562 o2ib_path=$(find /usr/src/ofa_kernel/ -type d -name ofed_scripts | xargs dirname)
563 if [ -z "$o2ib_path" ]; then
564 echo "ERROR: could not find OFED devel headers"
567 if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
568 echo "ERROR: multiple OFED versions installed"
573 %eval_configure $CONFIGURE_ARGS \
574 %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
575 %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
576 %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
577 %{!?with_shared:--disable-shared} \
578 %{!?with_static:--disable-static} \
579 %{!?with_lustre_iokit:--disable-iokit} \
580 %{!?with_ldiskfs:--disable-ldiskfs} \
581 %{!?with_servers:--disable-server} \
582 %{!?with_zfs:--without-zfs} \
583 %{!?with_snmp:--disable-snmp} \
584 %{!?with_gss:--disable-gss} \
585 %{!?with_gss_keyring:--disable-gss-keyring} \
586 %{!?with_manpages:--disable-manpages} \
587 %{!?with_systemd:--with-systemdsystemunitdir=no} \
588 %{?with_systemd:--with-systemdsystemunitdir=%{_unitdir}} \
589 %{?with_mofed:--with-o2ib=$o2ib_path} \
590 --with-linux=%{kdir} \
591 --with-linux-obj=%{kobjdir} \
592 --with-kmp-moddir=%{kmoddir}/%{name}
595 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
596 echo "Error: Server Support configured but not found"
601 make %{?_smp_mflags} -s %{?make_args}
604 %if "%{mpi_name}" == "mpich"
607 %if "%{mpi_name}" == "openmpi"
616 %if "%{mpi_name}" == "mpich"
619 %if "%{mpi_name}" == "openmpi"
625 make install DESTDIR=$RPM_BUILD_ROOT
627 %if %{with lustre_modules}
628 # RHEL's kernel_module_path macro expects that all the modules
629 # in a kmod package will be in modules_fs_path/<sub packagename>
630 # but Lustre installs all of the modules in a single pass into
631 # a shared location. Since this is a restriction imposed by
632 # RHEL, we handle this here in the spec file rather than in
633 # Lustre's build system. This is not expected to bother SLES's
634 # kernel_module_path macro.
635 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{name}
636 %{__install} -D -m 0644 ${PWD}/Module.symvers %{buildroot}/Module.symvers
638 mkdir -p $basemodpath-osd-ldiskfs/fs
639 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
640 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
643 mkdir -p $basemodpath-osd-zfs/fs
644 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
646 %if %{with lustre_tests}
647 mkdir -p $basemodpath-tests/fs
648 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
649 mkdir -p $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
650 mv $basemodpath/fs/kinode.ko $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
655 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
656 rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
658 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
659 rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
665 %if %{with servers} && %{with lustre_utils}
666 # The .ha_v2 extension identifies the heartbeat resource agent as using
667 # legacy syntax. Install a compatibility symlink to avoid conflicts when
668 # newer-style agents are added.
669 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
670 echo '%dir %{_sysconfdir}/ha.d' >>lustre.files
671 echo '%dir %{_sysconfdir}/ha.d/resource.d' >>lustre.files
672 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
673 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
676 # systemd is on redhat, fedora, and suse
678 echo '%{_unitdir}/lnet.service' >>lustre.files
681 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
682 # The following scripts are Red Hat specific
684 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
685 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
686 %if %{with gss_keyring}
687 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
688 echo '%config(noreplace) %{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
692 %if %{without systemd}
693 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
696 %if %{with gss_keyring}
697 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
700 # fc18 needs 'x' permission for library files
701 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
703 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
705 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
708 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
709 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
713 echo '%{_libdir}/libiam.a' >>lustre.files
717 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
718 echo '%{_libdir}/lustre/snmp' >>lustre.files
721 %if %{with lustre_utils}
722 mkdir -p $RPM_BUILD_ROOT/%{_datadir}/lustre
723 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre ] ; then
724 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ -name \*.la -type f -exec rm -f {} \;
728 echo '%{_prefix}/lib/firewalld/services/*.xml' >>lustre.files
729 %if %{with lustre_modules}
730 # mark modules executable for find-debuginfo.sh
731 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
734 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
736 %if %{with lustre_tests}
737 :> lustre-tests.files
739 %if "%{mpi_name}" == "mpich"
742 %if "%{mpi_name}" == "openmpi"
747 echo '%dir %{_libdir}/lustre' >>lustre-tests.files
748 echo '%dir %{_libdir}/lustre/tests' >>lustre-tests.files
749 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
750 echo '%{_bindir}/mcreate' >>lustre-tests.files
751 echo '%{_bindir}/munlink' >>lustre-tests.files
752 echo '%{_bindir}/statx' >>lustre-tests.files
753 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
754 echo '%{_sbindir}/wiretest' >>lustre-tests.files
755 if [ -n "$MPI_BIN" ]; then
756 echo "$MPI_BIN/*" >>lustre-tests.files
758 %if %{with lustre_tests_lutf}
759 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
763 %if %{with lustre_tests_lutf}
764 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
767 %files devel -f lustre-devel.files
768 %defattr(-,root,root)
769 %{_libdir}/pkgconfig/lustre.pc
771 %{_libdir}/liblustreapi.a
774 %{_libdir}/liblustreapi.so
776 %{_includedir}/lustre
777 %if %{with lustre_modules}
778 %{_includedir}/linux/lnet
779 %{_includedir}/linux/lustre
781 %exclude %{_includedir}/linux/lnet
782 %exclude %{_includedir}/linux/lustre
785 %files -f lustre.files
786 %defattr(-,root,root)
788 %if %{with lustre_tests}
789 %exclude %{_sbindir}/wirecheck
790 %exclude %{_sbindir}/wiretest
793 %exclude %{_sbindir}/zfsobj2fid
795 %if %{with lustre_utils}
797 %dir %{_libexecdir}/lustre
798 %{_libexecdir}/lustre/lc_common
799 %{_libexecdir}/lustre/haconfig
800 %{_bindir}/lustre_req_history
801 %{_bindir}/remove_changelog
802 %{_bindir}/remove_updatelog
808 %{_bindir}/plot-llstat
812 %{_bindir}/lfs_migrate
815 /sbin/mount.lustre_tgt
817 @BASH_COMPLETION_DIR@
825 %{_libdir}/liblustreapi.so.*
827 %{_udevrulesdir}/99-lustre.rules
829 %{_udevrulesdir}/99-lustre-server.rules
832 %config(noreplace) %{_sysconfdir}/ldev.conf
834 %config(noreplace) %{_sysconfdir}/lnet.conf
835 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
836 %if %{with lustre_utils}
837 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
839 %if %{with lustre_modules}
840 %exclude /Module.symvers
843 %if %{with lustre_utils}
844 %files osd-ldiskfs-mount
845 %defattr(-,root,root)
846 %dir %{_libdir}/@PACKAGE@
847 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
854 %if %{with lustre_utils}
856 %defattr(-,root,root)
857 %dir %{_libdir}/@PACKAGE@
858 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
859 %{_sysconfdir}/zfs/zed.d/*
864 # with lustre_modules
868 %files resource-agents
869 %defattr(0755,root,root)
870 %dir %{_prefix}/lib/ocf
871 %dir %{_prefix}/lib/ocf/resource.d
872 %{_prefix}/lib/ocf/resource.d/lustre/
875 %if %{with lustre_tests}
876 %files tests -f lustre-tests.files
877 %defattr(-,root,root)
880 %if %{with lustre_iokit}
881 %files -n lustre-iokit
882 %defattr(-, root, root)
883 %{_bindir}/iokit-config
884 %{_bindir}/iokit-gather-stats
886 %{_bindir}/iokit-libecho
887 %{_bindir}/iokit-lstats
888 %{_bindir}/iokit-parse-ior
889 %{_bindir}/iokit-plot-obdfilter
890 %{_bindir}/iokit-plot-ost
891 %{_bindir}/iokit-plot-sgpdd
892 %{_bindir}/ior-survey
893 %{_bindir}/mds-survey
894 %{_bindir}/obdfilter-survey
895 %{_bindir}/ost-survey
896 %{_bindir}/sgpdd-survey
897 %{_bindir}/lst-survey
899 %doc lustre-iokit/ior-survey/README.ior-survey
900 %doc lustre-iokit/mds-survey/README.mds-survey
901 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
902 %doc lustre-iokit/ost-survey/README.ost-survey
903 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
904 %doc lustre-iokit/stats-collect/README.iokit-lstats
905 %doc lustre-iokit/lst-survey/README.lst-survey
910 %systemd_post lnet.service
915 %systemd_preun lnet.service
920 %systemd_postun_with_restart lnet.service
924 rm -rf $RPM_BUILD_ROOT
925 rm -rf %{_tmppath}/kmp