Whamcloud - gitweb
LU-16465 llite: fix LSOM blocks for ftruncate and close
[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 %else
227 %if "%{_vendor}" == "openEuler"
228 BuildRequires: openEuler-rpm-config
229 %endif
230 BuildRequires: pkg-config
231 %endif
232 %if %{with gss}
233 BuildRequires: krb5-devel openssl-devel
234 %endif
235 %if %{with servers}
236 Requires: %{name}-osd
237 Requires: %{name}-osd-mount
238 Obsoletes: lustre-server < %{version}
239 Provides: lustre-server = %{version}-%{release}
240 %endif
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)
246 %endif
247 %if %{with lustre_modules}
248 %if %{with mofed}
249 BuildRequires: mlnx-ofa_kernel-devel
250 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
251 Requires: kmod-mlnx-ofa_kernel
252 %else
253 Requires: mlnx-ofa_kernel-kmp
254 %endif
255 %endif
256 %if 0%{?rhel} >= 8 || "%{_vendor}" == "openEuler"
257 BuildRequires: kernel-rpm-macros
258 %endif
259 %if 0%{?suse_version} >= 1530
260 BuildRequires: rpm-build >= 4.14.3
261 %endif
262 BuildRequires: %kernel_module_package_buildreqs
263 # need to provide a /usr/lib/${uname -r)/build dir
264 BuildRequires: kernel
265 %if "%{_vendor}" == "redhat"
266 %if %{with kabi}
267 BuildRequires: kernel-abi-whitelists
268 %endif
269 %endif
270 %endif
271
272 %if %{with systemd}
273 Requires(post): systemd
274 Requires(preun): systemd
275 Requires(postun): systemd
276 BuildRequires: pkgconfig(systemd)
277 %endif
278
279 %description
280 Userspace tools and files for the Lustre file system.
281
282 %if %{with lustre_modules}
283 %if 0%{?rhel} == 7
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:%(
291 TMPFILE=`mktemp`
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
298 echo $TMPFILE
299 )}
300 %else
301 %define preamble %{SOURCE1}
302 %endif
303 %kernel_module_package -n %{name} -p %preamble -f %SOURCE2 %{_flavor}
304
305 %if %{with ldiskfs}
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}
316
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
320
321 # with lustre_utils
322 %endif
323 # with ldiskfs
324 %endif
325
326 %if %{with zfs}
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:
335 Requires: zfs
336 Requires: %{requires_kmod_osd_zfs_name}
337
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.
341
342 # with lustre_utils
343 %endif
344 # with zfs
345 %endif
346 # with lustre_modules
347 %endif
348
349 %if %{with servers}
350 %package resource-agents
351 Summary: HA Resuable Cluster Resource Scripts for Lustre
352 Requires: %{name}
353 Requires: resource-agents
354
355 %description resource-agents
356 A set of scripts to operate Lustre resources in a High Availablity
357 environment for both Pacemaker and rgmanager.
358 %endif
359
360 %package devel
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}
366 %endif
367
368 %description devel
369 This package contains the header files needed for building additional
370 applications against the Lustre / LNet utilities libraries.
371
372 :> lustre-devel.files
373
374 %if %{with lustre_tests}
375 %package tests
376 Summary: Lustre testing framework
377 Provides: %{name}-tests = %{version}
378 %if %{with lustre_iokit}
379 Requires: %{name} = %{version}, lustre-iokit
380 %else
381 Requires: %{name} = %{version}
382 %endif
383 Requires: lustre-devel = %{version}
384 %if 0%{?rhel} >= 8 || 0%{?suse_version} >= 1500
385 Requires: python3 >= 3.6.0, python3-PyYAML
386 %endif
387 %if %{with lustre_modules}
388 Requires: %{requires_kmod_name} = %{requires_kmod_version}
389 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
390 %endif
391 %if %{with lustre_tests_lutf}
392 Requires: python3 >= 3.6.0
393 %endif
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
401 %endif
402 %if %{with mpi}
403 %if "%{mpi_name}" == "mpich"
404 BuildRequires: mpich-devel
405 %endif
406 %if "%{mpi_name}" == "openmpi"
407 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler" || 0%{?suse_version} < 1500
408 BuildRequires: openmpi-devel
409 %else
410 BuildRequires: openmpi2-devel
411 %endif
412 # openmpi
413 %endif
414 # mpi
415 %endif
416
417 %description tests
418 This package contains a set of test binaries and scripts that are intended
419 to be used by the Lustre testing framework.
420
421 %if %{with lustre_modules}
422 %kernel_module_package -n %{name}-tests -p %SOURCE7 -f %SOURCE8 %{_flavor}
423 %endif
424 %endif
425
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
430
431 %description -n lustre-iokit
432 This package includes five tools:
433 sgpdd-survey:
434 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
435
436 obdfilter-survey
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.
442
443 ost-survey
444 This survey tests the client-to-disk performance of individual OSTs, and
445 ranks then for comparison.
446
447 stats-collect
448 This script will collect IO stats on a defined set of nodes.
449
450 ior-survey:
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/
453
454 mds-survey:
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
459
460 lst-survey:
461 This survey tests LNet performance between a group of clients and servers.
462 %endif
463
464 %if 0%{?suse_version}
465 %debug_package
466 %endif
467 %prep
468 %setup -qn lustre-%{version}
469 ln lustre/ChangeLog ChangeLog-lustre
470 ln lnet/ChangeLog ChangeLog-lnet
471
472 %build
473 # Set an explicit path to our Linux tree, if we can.
474 cd $RPM_BUILD_DIR/lustre-%{version}
475
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}}}"
483
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.
487 %if 0%{?rhel}
488 %ifarch ppc64
489 export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
490 %endif
491 %endif
492
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
499
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"
517         fi
518 fi
519
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
525
526 %if 0%{?rhel} >= 9
527 %define _configure eval ./configure
528 %define eval_configure %configure
529 %else
530 %define eval_configure %(echo -n '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
531 %endif
532
533 %if %{with mpi}
534 %if "%{mpi_name}" == "mpich"
535 %{?_mpich_load}
536 %endif
537 %if "%{mpi_name}" == "openmpi"
538 %{?_openmpi_load}
539 %endif
540 # mpi
541 %endif
542
543 %if %{with mofed}
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"
547                 exit 1
548         fi
549         if [ $(echo $o2ib_path | wc -w) -ge 2 ]; then
550                 echo "ERROR: multiple OFED versions installed"
551                 exit 1
552         fi
553 %endif
554
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}
575
576 %if %{with servers}
577 if ! grep -q define[[:space:]]*HAVE_SERVER_SUPPORT config.h 2> /dev/null; then
578         echo "Error: Server Support configured but not found"
579         false
580 fi
581 %endif
582
583 make %{?_smp_mflags} -s %{?make_args}
584
585 %if %{with mpi}
586 %if "%{mpi_name}" == "mpich"
587 %{?_mpich_unload}
588 %endif
589 %if "%{mpi_name}" == "openmpi"
590 %{?_openmpi_unload}
591 %endif
592 # mpi
593 %endif
594
595 %install
596
597 %if %{with mpi}
598 %if "%{mpi_name}" == "mpich"
599 %{?_mpich_load}
600 %endif
601 %if "%{mpi_name}" == "openmpi"
602 %{?_openmpi_load}
603 %endif
604 # mpi
605 %endif
606
607 make install DESTDIR=$RPM_BUILD_ROOT
608
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
619 %if %{with ldiskfs}
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
623 %endif
624 %if %{with zfs}
625 mkdir -p $basemodpath-osd-zfs/fs
626 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
627 %endif
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/
633 %endif
634 %endif
635
636 %if %{without mpi}
637 if [ -d $RPM_BUILD_ROOT%{_libdir}/openmpi ] ; then
638         rm -fr $RPM_BUILD_ROOT%{_libdir}/openmpi
639 fi
640 if [ -d $RPM_BUILD_ROOT%{_libdir}/mpich ] ; then
641         rm -fr $RPM_BUILD_ROOT%{_libdir}/mpich
642 fi
643 %endif
644
645 :> lustre.files
646
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
656 %endif
657
658 # systemd is on redhat, fedora, and suse
659 %if %{with systemd}
660 echo '%{_unitdir}/lnet.service' >>lustre.files
661 %endif
662
663 %if "%{_vendor}" == "redhat" || "%{_vendor}" == "openEuler"
664 # The following scripts are Red Hat specific
665 %if %{with servers}
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
671 %endif
672 %endif
673
674 %if %{without systemd}
675 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
676 %endif
677 %endif
678 %if %{with gss_keyring}
679 echo '%config(noreplace) %{_sysconfdir}/request-key.d/lgssc.conf' >>lustre.files
680 %endif
681
682 # fc18 needs 'x' permission for library files
683 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
684
685 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
686 %if %{with static}
687 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
688 %endif
689 %if %{with shared}
690 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre-devel.files
691 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
692 %endif
693
694 %if %{with ldiskfs}
695 echo '%{_libdir}/libiam.a' >>lustre.files
696 %endif
697
698 %if %{with snmp}
699 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
700 echo '%{_libdir}/lustre/snmp' >>lustre.files
701 %endif
702
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 {} \;
707 fi
708 %endif
709
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 {} \;
714 %endif
715
716 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
717
718 %if %{with lustre_tests}
719 :> lustre-tests.files
720 %if %{with mpi}
721 %if "%{mpi_name}" == "mpich"
722 %{?_mpich_load}
723 %endif
724 %if "%{mpi_name}" == "openmpi"
725 %{?_openmpi_load}
726 %endif
727 # mpi
728 %endif
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
739 fi
740 %if %{with lustre_tests_lutf}
741 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
742 %endif
743 %endif
744
745 %if %{with lustre_tests_lutf}
746 echo '%{_libdir}/lustre/tests/lutf/*' >>lustre-tests.files
747 %endif
748
749 %files devel -f lustre-devel.files
750 %defattr(-,root,root)
751 %{_libdir}/pkgconfig/lustre.pc
752 %if %{with static}
753 %{_libdir}/liblustreapi.a
754 %endif
755 %if %{with shared}
756 %{_libdir}/liblustreapi.so
757 %endif
758 %{_includedir}/lustre
759 %if %{with lustre_modules}
760 %{_includedir}/linux/lnet
761 %{_includedir}/linux/lustre
762 %else
763 %exclude %{_includedir}/linux/lnet
764 %exclude %{_includedir}/linux/lustre
765 %endif
766
767 %files -f lustre.files
768 %defattr(-,root,root)
769 %{_sbindir}/*
770 %if %{with lustre_tests}
771 %exclude %{_sbindir}/wirecheck
772 %exclude %{_sbindir}/wiretest
773 %endif
774 %if %{with zfs}
775 %exclude %{_sbindir}/zfsobj2fid
776 %endif
777 %if %{with lustre_utils}
778 %if %{with servers}
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
785 %endif
786
787 %{_bindir}/llobdstat
788 %{_bindir}/lljobstat
789 %{_bindir}/llstat
790 %{_bindir}/plot-llstat
791 %{_datadir}/lustre
792
793 %{_bindir}/lfs
794 %{_bindir}/lfs_migrate
795 /sbin/mount.lustre
796 %if %{with servers}
797 /sbin/mount.lustre_tgt
798 %endif
799 @BASH_COMPLETION_DIR@
800 %endif
801
802 %if %{with manpages}
803 %{_mandir}/man?/*
804 %endif
805
806 %if %{with shared}
807 %{_libdir}/liblustreapi.so.*
808 %endif
809 %{_udevrulesdir}/99-lustre.rules
810 %if %{with servers}
811 %{_udevrulesdir}/99-lustre-server.rules
812 %endif
813 %if %{with zfs}
814 %config(noreplace) %{_sysconfdir}/ldev.conf
815 %endif
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
820 %endif
821 %if %{with lustre_modules}
822 %exclude /Module.symvers
823 %if %{with shared}
824 %if %{with ldiskfs}
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
830 %endif
831 %endif
832 %endif
833
834 %if %{with shared}
835 %if %{with zfs}
836 %if %{with lustre_utils}
837 %files osd-zfs-mount
838 %defattr(-,root,root)
839 %dir %{_libdir}/@PACKAGE@
840 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
841 %{_sysconfdir}/zfs/zed.d/*
842 %endif
843 %endif
844 %endif
845
846 # with lustre_modules
847 %endif
848
849 %if %{with servers}
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/
855 %endif
856
857 %if %{with lustre_tests}
858 %files tests -f lustre-tests.files
859 %defattr(-,root,root)
860 %endif
861
862 %if %{with lustre_iokit}
863 %files -n lustre-iokit
864 %defattr(-, root, root)
865 %{_bindir}/iokit-config
866 %{_bindir}/iokit-gather-stats
867
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
880 %{_bindir}/lst.sh
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
888 %endif
889
890 %post
891 %if %{with systemd}
892 %systemd_post lnet.service
893 %endif
894
895 %preun
896 %if %{with systemd}
897 %systemd_preun lnet.service
898 %endif
899
900 %postun
901 %if %{with systemd}
902 %systemd_postun_with_restart lnet.service
903 %endif
904
905 %clean
906 rm -rf $RPM_BUILD_ROOT
907 rm -rf %{_tmppath}/kmp