Whamcloud - gitweb
LU-16477 ldiskfs: Add ext4-enc-flag patch for SUSE 15 SP5
[fs/lustre-release.git] / lustre.spec.in
1 # SPDX-License-Identifier: GPL-2.0
2
3 #
4 # This file is part of Lustre, http://www.lustre.org/
5 #
6 # lustre.spec.in
7 #
8 # spec file template for RHEL package builds
9 #
10
11 # Declare rpmbuild --with/--without parameters
12 %bcond_without servers
13 %bcond_without ldiskfs
14 %bcond_with zfs
15 %bcond_without lustre_tests
16 %bcond_without lustre_utils
17 %bcond_without lustre_iokit
18 %bcond_without lustre_modules
19 %bcond_with snmp
20 %bcond_with gss
21 %bcond_with gss_keyring
22 %bcond_without manpages
23 %bcond_without shared
24 %bcond_without static
25 %bcond_with    systemd
26 %bcond_with mofed
27 %bcond_without mpi
28 %bcond_with kabi
29
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')
33
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}
39     %define with_gss 1
40 %endif
41
42 %if %{without servers}
43     # --without servers overrides --with {ldiskfs|zfs}
44     # so undefine the internal variables set by bcond_*
45     %undefine with_ldiskfs
46     %undefine with_zfs
47 %endif
48
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}
52 %{exit 1}
53 %endif
54
55 # lustre_tests depends on lustre_utils
56 %if %{without lustre_utils}
57 %undefine with_lustre_tests
58 %endif
59
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'
66 %if %{defined kdir}
67         %define _take_kver 1
68 %endif
69 %if %{defined kobjdir}
70         %define _take_kobj 1
71 %endif
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)}
74
75 %if 0%{?suse_version} >= 1310 && %{defined _take_kobj}
76         %global _flavor %(echo %{_kver} | sed -e 's/^.*-//')
77 %else
78         %global _flavor default
79 %endif
80
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)
84 %define _kver %kver
85 %endif
86
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
94
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 %):
99 #
100 # %%global _use_internal_dependency_generator 0
101 #
102 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
103 # defining it here (until Suse changes their mind)
104 #
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
112 # response from them
113 #%%global _use_internal_dependency_generator 0
114
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
119 %endif
120
121 # Set the package name prefix
122 %if %{undefined lustre_name}
123     %if %{with servers}
124         %global lustre_name lustre
125     %else
126         %global lustre_name lustre-client
127     %endif
128 %endif
129
130 %if %{with lustre_modules}
131 %if %{undefined kmoddir}
132     %if %{defined kernel_module_package_moddir}
133         %global kmoddir %{kernel_module_package_moddir}
134     %else
135         %if %{defined suse_kernel_module_package}
136             %global kmoddir updates
137         %else
138             %global kmoddir extra
139         %endif
140     %endif
141 %endif
142
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}//')
146
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
152         %endif
153         %global requires_kmod_version %{version}
154 #for Suse
155 %else
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
160         %endif
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_/;')
163         %else
164                 %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
165         %endif
166 %endif
167 %endif
168
169 # RHEL >= 7 comes with systemd
170 %if 0%{?rhel} >= 7
171 %define with_systemd 1
172 %endif
173
174 # Fedora >= 15 comes with systemd, but only >= 18 has
175 # the proper macros
176 %if 0%{?fedora} >= 18
177 %define with_systemd 1
178 %endif
179
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
184 %endif
185
186 # openEuler comes with systemd
187 %if "%{_vendor}" == "openEuler"
188 %define with_systemd 1
189 %endif
190
191 %{!?mpi_name: %global mpi_name openmpi}
192
193 Summary: Lustre File System
194 Name: %{lustre_name}
195 Version: %{version}
196 Release: 1%{?dist}
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
200 Group: System/Kernel
201 %endif
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}
217 %endif
218 %if %{with lustre_tests_lutf}
219 Requires: python3 >= 3.6.0
220 BuildRequires: python3-devel >= 3.6.0, swig
221 %endif
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
228 %endif
229 %else
230 %if "%{_vendor}" == "openEuler"
231 BuildRequires: openEuler-rpm-config
232 %if %{with ldiskfs}
233 BuildRequires: kernel-debugsource
234 %endif
235 %endif
236 BuildRequires: pkg-config
237 %endif
238 %if %{with gss}
239 BuildRequires: krb5-devel openssl-devel
240 %endif
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
247 # by lbuild.
248 %if "%(echo $USER)" != "abuild"
249 %else
250 BuildRequires: kernel-source
251 %endif
252 %endif
253 %if %{with servers}
254 Requires: %{name}-osd
255 Requires: %{name}-osd-mount
256 Obsoletes: lustre-server < %{version}
257 Provides: lustre-server = %{version}-%{release}
258 %endif
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)
264 %endif
265 %if %{with lustre_modules}
266 %if %{with mofed}
267 BuildRequires: mlnx-ofa_kernel-devel
268 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
269 Requires: kmod-mlnx-ofa_kernel
270 %else
271 Requires: mlnx-ofa_kernel-kmp
272 %endif
273 %endif
274 %if 0%{?rhel} >= 8 || "%{_vendor}" == "openEuler"
275 BuildRequires: kernel-rpm-macros
276 %endif
277 %if 0%{?suse_version} >= 1530
278 BuildRequires: rpm-build >= 4.14.3
279 %endif
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"
284 %if %{with kabi}
285 BuildRequires: kernel-abi-whitelists
286 %endif
287 %endif
288 %endif
289
290 %if %{with systemd}
291 Requires(post): systemd
292 Requires(preun): systemd
293 Requires(postun): systemd
294 BuildRequires: pkgconfig(systemd)
295 %endif
296
297 %description
298 Userspace tools and files for the Lustre file system.
299
300 %if %{with lustre_modules}
301 %if 0%{?rhel} == 7
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:%(
309 TMPFILE=`mktemp`
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
316 echo $TMPFILE
317 )}
318 %else
319 %define preamble %{SOURCE1}
320 %endif
321 %kernel_module_package -n %{name} -p %preamble -f %SOURCE2 %{_flavor}
322
323 %if %{with ldiskfs}
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}
334
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
338
339 # with lustre_utils
340 %endif
341 # with ldiskfs
342 %endif
343
344 %if %{with zfs}
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:
353 Requires: zfs
354 Requires: %{requires_kmod_osd_zfs_name}
355
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.
359
360 # with lustre_utils
361 %endif
362 # with zfs
363 %endif
364 # with lustre_modules
365 %endif
366
367 %if %{with servers}
368 %package resource-agents
369 Summary: HA Resuable Cluster Resource Scripts for Lustre
370 Requires: %{name}
371 Requires: resource-agents
372
373 %description resource-agents
374 A set of scripts to operate Lustre resources in a High Availablity
375 environment for both Pacemaker and rgmanager.
376 %endif
377
378 %package devel
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}
384 %endif
385
386 %description devel
387 This package contains the header files needed for building additional
388 applications against the Lustre / LNet utilities libraries.
389
390 :> lustre-devel.files
391
392 %if %{with lustre_tests}
393 %package tests
394 Summary: Lustre testing framework
395 Provides: %{name}-tests = %{version}
396 %if %{with lustre_iokit}
397 Requires: %{name} = %{version}, lustre-iokit
398 %else
399 Requires: %{name} = %{version}
400 %endif
401 Requires: lustre-devel = %{version}
402 %if 0%{?rhel} >= 8 || 0%{?suse_version} >= 1500
403 Requires: python3 >= 3.6.0, python3-PyYAML
404 %endif
405 %if %{with lustre_modules}
406 Requires: %{requires_kmod_name} = %{requires_kmod_version}
407 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
408 %endif
409 %if %{with lustre_tests_lutf}
410 Requires: python3 >= 3.6.0
411 %endif
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
419 %endif
420 %if %{with mpi}
421 %if "%{mpi_name}" == "mpich"
422 BuildRequires: mpich-devel
423 %endif
424 %if "%{mpi_name}" == "openmpi"
425 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler" || 0%{?suse_version} < 1500
426 BuildRequires: openmpi-devel
427 %else
428 BuildRequires: openmpi2-devel
429 %endif
430 # openmpi
431 %endif
432 # mpi
433 %endif
434
435 %description tests
436 This package contains a set of test binaries and scripts that are intended
437 to be used by the Lustre testing framework.
438
439 %if %{with lustre_modules}
440 %kernel_module_package -n %{name}-tests -p %SOURCE7 -f %SOURCE8 %{_flavor}
441 %endif
442 %endif
443
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
448
449 %description -n lustre-iokit
450 This package includes five tools:
451 sgpdd-survey:
452 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
453
454 obdfilter-survey
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.
460
461 ost-survey
462 This survey tests the client-to-disk performance of individual OSTs, and
463 ranks then for comparison.
464
465 stats-collect
466 This script will collect IO stats on a defined set of nodes.
467
468 ior-survey:
469 A script to run the IOR benchmark. The latest version can be downloaded from
470 https://github.com/hpc/ior/
471
472 mds-survey:
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
477
478 lst-survey:
479 This survey tests LNet performance between a group of clients and servers.
480 %endif
481
482 %if 0%{?suse_version}
483 %debug_package
484 %endif
485 %prep
486 %setup -qn lustre-%{version}
487 ln lustre/ChangeLog ChangeLog-lustre
488 ln lnet/ChangeLog ChangeLog-lnet
489
490 %build
491 # Set an explicit path to our Linux tree, if we can.
492 cd $RPM_BUILD_DIR/lustre-%{version}
493
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}}}"
501
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.
505 %if 0%{?rhel}
506 %ifarch ppc64
507 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
508 %endif
509 %endif
510
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
517
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"
535         fi
536 fi
537
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
543
544 %if 0%{?rhel} >= 9
545 %define _configure eval ./configure
546 %define eval_configure %configure
547 %else
548 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
549 %endif
550
551 %if %{with mpi}
552 %if "%{mpi_name}" == "mpich"
553 %{?_mpich_load}
554 %endif
555 %if "%{mpi_name}" == "openmpi"
556 %{?_openmpi_load}
557 %endif
558 # mpi
559 %endif
560
561 %if %{with mofed}
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"
565                 exit 1
566         fi
567         if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
568                 echo "ERROR: multiple OFED versions installed"
569                 exit 1
570         fi
571 %endif
572
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}
593
594 %if %{with servers}
595 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
596         echo "Error: Server Support configured but not found"
597         false
598 fi
599 %endif
600
601 make %{?_smp_mflags} -s %{?make_args}
602
603 %if %{with mpi}
604 %if "%{mpi_name}" == "mpich"
605 %{?_mpich_unload}
606 %endif
607 %if "%{mpi_name}" == "openmpi"
608 %{?_openmpi_unload}
609 %endif
610 # mpi
611 %endif
612
613 %install
614
615 %if %{with mpi}
616 %if "%{mpi_name}" == "mpich"
617 %{?_mpich_load}
618 %endif
619 %if "%{mpi_name}" == "openmpi"
620 %{?_openmpi_load}
621 %endif
622 # mpi
623 %endif
624
625 make install DESTDIR=$RPM_BUILD_ROOT
626
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
637 %if %{with ldiskfs}
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
641 %endif
642 %if %{with zfs}
643 mkdir -p $basemodpath-osd-zfs/fs
644 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
645 %endif
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/
651 %endif
652 %endif
653
654 %if %{without mpi}
655 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
656         rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
657 fi
658 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
659         rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
660 fi
661 %endif
662
663 :> lustre.files
664
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
674 %endif
675
676 # systemd is on redhat, fedora, and suse
677 %if %{with systemd}
678 echo '%{_unitdir}/lnet.service' >>lustre.files
679 %endif
680
681 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
682 # The following scripts are Red Hat specific
683 %if %{with servers}
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
689 %endif
690 %endif
691
692 %if %{without systemd}
693 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
694 %endif
695 %endif
696 %if %{with gss_keyring}
697 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
698 %endif
699
700 # fc18 needs 'x' permission for library files
701 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
702
703 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
704 %if %{with static}
705 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
706 %endif
707 %if %{with shared}
708 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
709 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
710 %endif
711
712 %if %{with ldiskfs}
713 echo '%{_libdir}/libiam.a' >>lustre.files
714 %endif
715
716 %if %{with snmp}
717 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
718 echo '%{_libdir}/lustre/snmp' >>lustre.files
719 %endif
720
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 {} \;
725 fi
726 %endif
727
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 {} \;
732 %endif
733
734 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
735
736 %if %{with lustre_tests}
737 :> lustre-tests.files
738 %if %{with mpi}
739 %if "%{mpi_name}" == "mpich"
740 %{?_mpich_load}
741 %endif
742 %if "%{mpi_name}" == "openmpi"
743 %{?_openmpi_load}
744 %endif
745 # mpi
746 %endif
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
757 fi
758 %if %{with lustre_tests_lutf}
759 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
760 %endif
761 %endif
762
763 %if %{with lustre_tests_lutf}
764 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
765 %endif
766
767 %files devel -f lustre-devel.files
768 %defattr(-,root,root)
769 %{_libdir}/pkgconfig/lustre.pc
770 %if %{with static}
771 %{_libdir}/liblustreapi.a
772 %endif
773 %if %{with shared}
774 %{_libdir}/liblustreapi.so
775 %endif
776 %{_includedir}/lustre
777 %if %{with lustre_modules}
778 %{_includedir}/linux/lnet
779 %{_includedir}/linux/lustre
780 %else
781 %exclude %{_includedir}/linux/lnet
782 %exclude %{_includedir}/linux/lustre
783 %endif
784
785 %files -f lustre.files
786 %defattr(-,root,root)
787 %{_sbindir}/*
788 %if %{with lustre_tests}
789 %exclude %{_sbindir}/wirecheck
790 %exclude %{_sbindir}/wiretest
791 %endif
792 %if %{with zfs}
793 %exclude %{_sbindir}/zfsobj2fid
794 %endif
795 %if %{with lustre_utils}
796 %if %{with servers}
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
803 %endif
804
805 %{_bindir}/llobdstat
806 %{_bindir}/lljobstat
807 %{_bindir}/llstat
808 %{_bindir}/plot-llstat
809 %{_datadir}/lustre
810
811 %{_bindir}/lfs
812 %{_bindir}/lfs_migrate
813 /sbin/mount.lustre
814 %if %{with servers}
815 /sbin/mount.lustre_tgt
816 %endif
817 @BASH_COMPLETION_DIR@
818 %endif
819
820 %if %{with manpages}
821 %{_mandir}/man?/*
822 %endif
823
824 %if %{with shared}
825 %{_libdir}/liblustreapi.so.*
826 %endif
827 %{_udevrulesdir}/99-lustre.rules
828 %if %{with servers}
829 %{_udevrulesdir}/99-lustre-server.rules
830 %endif
831 %if %{with zfs}
832 %config(noreplace) %{_sysconfdir}/ldev.conf
833 %endif
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
838 %endif
839 %if %{with lustre_modules}
840 %exclude /Module.symvers
841 %if %{with shared}
842 %if %{with ldiskfs}
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
848 %endif
849 %endif
850 %endif
851
852 %if %{with shared}
853 %if %{with zfs}
854 %if %{with lustre_utils}
855 %files osd-zfs-mount
856 %defattr(-,root,root)
857 %dir %{_libdir}/@PACKAGE@
858 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
859 %{_sysconfdir}/zfs/zed.d/*
860 %endif
861 %endif
862 %endif
863
864 # with lustre_modules
865 %endif
866
867 %if %{with servers}
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/
873 %endif
874
875 %if %{with lustre_tests}
876 %files tests -f lustre-tests.files
877 %defattr(-,root,root)
878 %endif
879
880 %if %{with lustre_iokit}
881 %files -n lustre-iokit
882 %defattr(-, root, root)
883 %{_bindir}/iokit-config
884 %{_bindir}/iokit-gather-stats
885
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
898 %{_bindir}/lst.sh
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
906 %endif
907
908 %post
909 %if %{with systemd}
910 %systemd_post lnet.service
911 %endif
912
913 %preun
914 %if %{with systemd}
915 %systemd_preun lnet.service
916 %endif
917
918 %postun
919 %if %{with systemd}
920 %systemd_postun_with_restart lnet.service
921 %endif
922
923 %clean
924 rm -rf $RPM_BUILD_ROOT
925 rm -rf %{_tmppath}/kmp