Whamcloud - gitweb
LU-9943 lnd: correct WR fast reg accounting
[fs/lustre-release.git] / lustre.spec.in
1 # lustre.spec
2
3 # Declare rpmbuild --with/--without parameters
4 %bcond_without servers
5 %bcond_without ldiskfs
6 %bcond_with zfs
7 %bcond_without lustre_tests
8 %bcond_without lustre_utils
9 %bcond_without lustre_iokit
10 %bcond_without lustre_modules
11 %bcond_with snmp
12 %bcond_without manpages
13 %bcond_without shared
14 %bcond_without static
15 %bcond_with    systemd
16
17 %if %{without servers}
18     # --without servers overrides --with {ldiskfs|zfs}
19     # so undefine the internal variables set by bcond_*
20     %undefine with_ldiskfs
21     %undefine with_zfs
22 %endif
23
24 %{!?version: %global version @VERSION@}
25 %{!?kver:    %global kver    %(uname -r)}
26 %{!?kdir:    %global kdir    /lib/modules/%{kver}/source}
27 %{!?kobjdir: %global kobjdir %(if [ "%{kdir}" = "/lib/modules/%{kver}/source" ]; then echo "/lib/modules/%{kver}/build"; else echo "%{kdir}"; fi)}
28
29 # as an alternative to this implementation we could simply "make -C $kdir kernelversion"
30 %{!?kversion: %global kversion %(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)}
31
32 # We set this because kernel_module_package has its own method of identifying
33 # which kernel to build against, and it is unlikely that its decision will
34 # match with Lustre's method of selecting which kernel to build against.
35 # By setting this variable, we override kernel_module_package's kernel
36 # selection with our selection.
37 %{!?kernel_version: %global kernel_version %kversion}
38
39 # in order to get kernel symset and/or kernel module dependencies into
40 # the RPM, in order to support weak-modules, the internal dependency gen-
41 # erator needs to be disabled
42 # this is done with (reduce the double % down to a single %):
43 #
44 # %%global _use_internal_dependency_generator 0
45 #
46 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
47 # defining it here (until Suse changes their mind)
48 #
49 # on RHEL5, however, we do need to explicitly disable the internal dep-
50 # endency generator and allow the external one be used
51 # but since RedHat's kABI is only a subset of the total kernel ABI, it
52 # doesn't include all of the symbols we (or OFED for that matter) need
53 # until RedHat includes all of the symbols we need in their symsets we
54 # cannot support weak-modules
55 # we did e-mail the maintainer of all of this stuff @redhat but got no
56 # response from them
57 #%%global _use_internal_dependency_generator 0
58
59 # Set the package name prefix
60 %if %{undefined lustre_name}
61     %if %{with servers}
62         %global lustre_name lustre
63     %else
64         %global lustre_name lustre-client
65     %endif
66 %endif
67
68 %if %{undefined kmoddir}
69     %if %{defined kernel_module_package_moddir}
70         %global kmoddir %{kernel_module_package_moddir}
71     %else
72         %if %{defined suse_kernel_module_package}
73             %global kmoddir updates
74         %else
75             %global kmoddir extra
76         %endif
77     %endif
78 %endif
79
80 %global modules_fs_path /lib/modules/%{kversion}/%{kmoddir}
81
82 %if %{_vendor}=="redhat" || %{_vendor}=="fedora"
83         %global requires_kmod_name kmod-%{lustre_name}
84         %if %{with lustre_tests}
85                 %global requires_kmod_tests_name kmod-%{lustre_name}-tests
86         %endif
87         %global requires_kmod_version %{version}
88 %else   #for Suse
89         %global requires_kmod_name %{lustre_name}-kmp
90         %if %{with lustre_tests}
91                 %global requires_kmod_tests_name %{lustre_name}-tests-kmp
92         %endif
93         %define krequires %(echo %{kversion} | 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$//')
94         %if 0%{?suse_version} >= 1200
95                 %global requires_kmod_version %{version}_k%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
96         %else
97                 %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
98         %endif
99 %endif
100
101 # RHEL >= 7 comes with systemd
102 %if 0%{?rhel} >= 7
103 %define with_systemd 1
104 %endif
105
106 # Fedora >= 15 comes with systemd, but only >= 18 has
107 # the proper macros
108 %if 0%{?fedora} >= 18
109 %define with_systemd 1
110 %endif
111
112 # opensuse >= 12.1 comes with systemd, but only >= 13.1
113 # has the proper macros
114 %if 0%{?suse_version} >= 1310
115 %define with_systemd 1
116 %endif
117
118 Summary: Lustre File System
119 Name: %{lustre_name}
120 Version: %{version}
121 Release: 1%{?dist}
122 License: GPL
123 Group: System Environment/Kernel
124 Source: lustre-%{version}.tar.gz
125 Source1: kmp-lustre.preamble
126 Source2: kmp-lustre.files
127 Source3: kmp-lustre-osd-ldiskfs.preamble
128 Source4: kmp-lustre-osd-ldiskfs.files
129 Source5: kmp-lustre-osd-zfs.preamble
130 Source6: kmp-lustre-osd-zfs.files
131 Source7: kmp-lustre-tests.files
132 URL: https://wiki.hpdd.intel.com/
133 BuildRoot: %{_tmppath}/lustre-%{version}-root
134 Requires: %{requires_kmod_name} = %{requires_kmod_version}
135 BuildRequires: libtool
136 %if %{with servers}
137 Requires: lustre-osd
138 Requires: lustre-osd-mount
139 Obsoletes: lustre-client < %{version}
140 Provides: lustre-client = %{version}-%{release}
141 %endif
142 # GSS requires this: BuildRequires: pkgconfig, libgssapi-devel >= 0.10
143 %if %{_vendor}=="redhat" || %{_vendor}=="fedora"
144 #suse don't support selinux
145 BuildRequires: libselinux-devel
146 Requires: libselinux
147 %endif
148 %if %{with lustre_modules}
149 BuildRequires: %kernel_module_package_buildreqs
150 %if %{_vendor}=="redhat"
151 BuildRequires: redhat-rpm-config
152 %endif
153 %endif
154
155 %if %{with systemd}
156 Requires(post): systemd
157 Requires(preun): systemd
158 Requires(postun): systemd
159 BuildRequires: systemd
160 %endif
161
162 %description
163 Userspace tools and files for the Lustre file system.
164
165 %if %{with lustre_modules}
166 %kernel_module_package -n %{name} -p %SOURCE1 -f %SOURCE2 default
167
168 %if %{with ldiskfs}
169 %kernel_module_package -n %{name}-osd-ldiskfs -p %SOURCE3 -f %SOURCE4 default
170 %if %{with lustre_utils}
171 %package osd-ldiskfs-mount
172 Summary: osd-ldiskfs-mount contains mount's ldiskfs specific dso.
173 Provides: lustre-osd-mount = %{version}-%{fullrelease}
174 Group: System Environment/Kernel
175
176 %description osd-ldiskfs-mount
177 LDISKFS hooks for mount/mkfs into a dynamic library.
178
179 %endif  # with lustre_utils
180 %endif  # with ldiskfs
181
182 %if %{with zfs}
183 %kernel_module_package -n %{name}-osd-zfs -p %SOURCE5 -f %SOURCE6 default
184 %if %{with lustre_utils}
185 %package osd-zfs-mount
186 Summary: osd-zfs-mount contains mount's zfs specific dso.
187 Provides: lustre-osd-mount = %{version}-%{fullrelease}
188 Group: System Environment/Kernel
189
190 %description osd-zfs-mount
191 ZFS hooks for mount/mkfs into a dynamic library.
192
193 %endif  # with lustre_utils
194 %endif  # with zfs
195
196 %endif # with lustre_modules
197
198 %if %{with servers}
199 %package resource-agents
200 Summary: HA Resuable Cluster Resource Scripts for Lustre
201 Group: System Environment/Base
202 Requires: lustre
203 Requires: resource-agents
204
205 %description resource-agents
206 A set of scripts to operate Lustre resources in a High Availablity
207 environment for both Pacemaker and rgmanager.
208 %endif
209
210 %if %{with lustre_tests}
211 %package tests
212 Summary: Lustre testing framework
213 Group: System Environment/Kernel
214 Provides: %{name}-tests = %{version}
215 %if %{with lustre_iokit}
216 Requires: %{name} = %{version}, lustre-iokit
217 %else
218 Requires: %{name} = %{version}
219 %endif
220 Requires: %{requires_kmod_name} = %{requires_kmod_version}
221 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
222 Requires: attr, rsync, perl, lsof, /usr/bin/getconf
223
224 %description tests
225 This package contains a set of test binaries and scripts that are intended
226 to be used by the Lustre testing framework.
227
228 %if %{with lustre_modules}
229 %kernel_module_package -n %{name}-tests -f %SOURCE7 default
230 %endif
231 %endif
232
233 %if %{with lustre_iokit}
234 %package -n lustre-iokit
235 Summary: The Lustre IO-Kit is a collection of benchmark tools for a cluster with the Lustre file system.
236 Group: Applications/System
237 Requires: python > 2.2, sg3_utils
238
239 %description -n lustre-iokit
240 This package includes five tools:
241 sgpdd-survey:
242 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
243
244 obdfilter-survey
245 This survey can be run in 3 modes to test disk I/O including the filesystem,
246 network I/O, and disk I/O via the network.  The script does sequential I/O
247 with varying numbers of threads and objects (files) by using lctl::test_brw
248 to drive the echo_client connected to local or remote obdfilter instances,
249 or remote obdecho instances.
250
251 ost-survey
252 This survey tests the client-to-disk performance of individual OSTs, and
253 ranks then for comparison.
254
255 stats-collect
256 This script will collect IO stats on a defined set of nodes.
257
258 ior-survey:
259 A script to run the IOR benchmark. The latest version can be downloaded from
260 http://www.llnl.gov/asci/purple/benchmarks/limited/ior/
261
262 mds-survey:
263 This survey tests the local metadata performance using the echo_client to drive
264 the MDD layer to perform operations. It is run with multiple threads (to
265 simulate MDT service threads) locally on the MDS node, and does not need Lustre
266 clients in order to run
267 %endif
268
269 %if 0%{?suse_version}
270 %debug_package
271 %endif
272 %prep
273 %setup -qn lustre-%{version}
274 ln lustre/ChangeLog ChangeLog-lustre
275 ln lnet/ChangeLog ChangeLog-lnet
276
277 %build
278 # Set an explicit path to our Linux tree, if we can.
279 cd $RPM_BUILD_DIR/lustre-%{version}
280 # override %optflags so that the vendor's overzealous flags don't create
281 # build failures
282 %define optflags -g -O2 -Werror
283
284 CONFIGURE_ARGS="%{?configure_args}"
285 if [ -n "$CONFIGURE_ARGS" ]; then
286         # make sure %%kdir and %%kobjdir are not in the configure arguments
287         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
288         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
289         # remove --with-kmp-moddir from configure arguments,
290         # it will be set --with-kmp-moddir=%%kmoddir
291         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-kmp-moddir=[^ ][^ ]* \?//')
292 fi
293
294 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
295 # string in it which we don't want word splitted by the shell
296 # also remove (build|host|target) options because they will be specified
297 # inside $CONFIGURE_ARGS
298 # kmod tools/scripts require %{name} directory with kernel modules
299 %define eval_configure %(echo '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
300
301 %eval_configure $CONFIGURE_ARGS \
302         %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
303         %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
304         %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
305         %{!?with_shared:--disable-shared} \
306         %{!?with_static:--disable-static} \
307         %{!?with_lustre_iokit:--disable-iokit} \
308         %{!?with_ldiskfs:--disable-ldiskfs} \
309         %{!?with_servers:--disable-server} \
310         %{!?with_zfs:--without-zfs} \
311         %{!?with_snmp:--disable-snmp} \
312         %{!?with_manpages:--disable-manpages} \
313         %{!?with_systemd:--with-systemdsystemunitdir=no} \
314         %{?with_systemd:--with-systemdsystemunitdir=%{_unitdir}} \
315         --with-linux=%{kdir} \
316         --with-linux-obj=%{kobjdir} \
317         --with-kmp-moddir=%{kmoddir}/%{name}
318
319 make %{?_smp_mflags} -s %{?make_args}
320
321 %install
322 make install DESTDIR=$RPM_BUILD_ROOT
323
324 # RHEL's kernel_module_path macro expects that all the modules
325 # in a kmod package will be in modules_fs_path/<sub packagename>
326 # but Lustre installs all of the modules in a single pass into
327 # a shared location.  Since this is a restriction imposed by
328 # RHEL, we handle this here in the spec file rather than in
329 # Lustre's build system.  This is not expected to bother SLES's
330 # kernel_module_path macro.
331 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{lustre_name}
332 %if %{with ldiskfs}
333 mkdir -p $basemodpath-osd-ldiskfs/fs
334 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
335 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
336 %endif
337 %if %{with zfs}
338 mkdir -p $basemodpath-osd-zfs/fs
339 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
340 %endif
341 %if %{with lustre_tests}
342 mkdir -p $basemodpath-tests/fs
343 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
344 mkdir -p $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
345 mv $basemodpath/fs/kinode.ko $RPM_BUILD_ROOT%{_libdir}/lustre/tests/kernel/
346 %endif
347
348 :> lustre.files
349
350 %if %{with servers} && %{with lustre_utils}
351 # The .ha_v2 extension identifies the heartbeat resource agent as using
352 # legacy syntax. Install a compatibility symlink to avoid conflicts when
353 # newer-style agents are added.
354 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
355 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
356 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
357 %endif
358
359 # systemd is on redhat, fedora, and suse
360 %if %{with systemd}
361 echo '%{_unitdir}/lnet.service' >>lustre.files
362 %endif
363
364 %if %{_vendor}=="redhat"
365 # The following scripts are Red Hat specific
366 %if %{with servers}
367 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
368 echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
369 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
370 %endif
371
372 %if %{without systemd}
373 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
374 %endif
375
376 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
377 %endif
378
379 %if %{with servers}
380 mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/ocf/resource.d/lustre/
381 install -m 0755 contrib/scripts/pacemaker/* $RPM_BUILD_ROOT%{_prefix}/lib/ocf/resource.d/lustre/
382 %endif
383
384 # fc18 needs 'x' permission for library files
385 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
386
387 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
388 %if %{with static}
389 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
390 %endif
391 %if %{with shared}
392 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre.files
393 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
394 %endif
395
396 %if %{with ldiskfs}
397 echo '%{_libdir}/libiam.a' >>lustre.files
398 %endif
399
400 %if %{with snmp}
401 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
402 echo '%{_libdir}/lustre/snmp' >>lustre.files
403 %endif
404
405 %if %{with lustre_utils}
406 mkdir -p $RPM_BUILD_ROOT/%{_datadir}/lustre
407 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre ] ; then
408         find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ -name \*.la -type f -exec rm -f {} \;
409 fi
410 %endif
411
412 %if %{with lustre_modules}
413 # mark modules executable for find-debuginfo.sh
414 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
415 %endif
416
417 %if %{with lustre_tests}
418 :> lustre-tests.files
419 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
420 echo '%{_bindir}/mcreate' >>lustre-tests.files
421 echo '%{_bindir}/munlink' >>lustre-tests.files
422 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
423 echo '%{_sbindir}/wiretest' >>lustre-tests.files
424 %endif
425
426 %files -f lustre.files
427 %defattr(-,root,root)
428 %{_sbindir}/*
429 %if %{with lustre_tests}
430 %exclude %{_sbindir}/wirecheck
431 %exclude %{_sbindir}/wiretest
432 %endif
433 %if %{with zfs}
434 %exclude %{_sbindir}/zfsobj2fid
435 %endif
436 %if %{with lustre_utils}
437 %if %{with servers}
438 %{_libexecdir}/lustre/lc_common
439 %{_libexecdir}/lustre/haconfig
440 %{_bindir}/lustre_req_history
441 %endif
442
443 %{_bindir}/llobdstat
444 %{_bindir}/llstat
445 %{_bindir}/plot-llstat
446
447 %{_bindir}/lfs
448 %{_bindir}/lfs_migrate
449 /sbin/mount.lustre
450 %{_libdir}/liblustreapi.a
451 %{_libdir}/liblustreapi.so
452 %if %{with manpages}
453 %{_mandir}/man?/*
454 %endif
455 %{_datadir}/lustre
456 %{_includedir}/lustre
457 %{_includedir}/linux/lnet
458 %{_includedir}/linux/lustre
459 %endif
460 %{_sysconfdir}/udev/rules.d/99-lustre.rules
461 %config(noreplace) %{_sysconfdir}/ldev.conf
462 %config(noreplace) %{_sysconfdir}/lnet.conf
463 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
464 %if %{with lustre_utils}
465 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
466 %endif
467 %if %{with lustre_modules}
468
469 %if %{with shared}
470 %if %{with ldiskfs}
471 %if %{with lustre_utils}
472 %files osd-ldiskfs-mount
473 %defattr(-,root,root)
474 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
475 %endif
476 %endif
477 %endif
478
479 %if %{with shared}
480 %if %{with zfs}
481 %if %{with lustre_utils}
482 %files osd-zfs-mount
483 %defattr(-,root,root)
484 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
485 %endif
486 %endif
487 %endif
488
489 %endif # with lustre_modules
490
491 %if %{with servers}
492 %files resource-agents
493 %defattr(0755,root,root)
494 %{_prefix}/lib/ocf/resource.d/lustre/
495 %endif
496
497 %if %{with lustre_tests}
498 %files tests -f lustre-tests.files
499 %defattr(-,root,root)
500 %endif
501
502 %if %{with lustre_iokit}
503 %files -n lustre-iokit
504 %defattr(-, root, root)
505 %{_bindir}/iokit-config
506 %{_bindir}/iokit-gather-stats
507 %{_bindir}/iokit-libecho
508 %{_bindir}/iokit-lstats
509 %{_bindir}/iokit-parse-ior
510 %{_bindir}/iokit-plot-obdfilter
511 %{_bindir}/iokit-plot-ost
512 %{_bindir}/iokit-plot-sgpdd
513 %{_bindir}/ior-survey
514 %{_bindir}/mds-survey
515 %{_bindir}/obdfilter-survey
516 %{_bindir}/ost-survey
517 %{_bindir}/sgpdd-survey
518 %doc lustre-iokit/ior-survey/README.ior-survey
519 %doc lustre-iokit/mds-survey/README.mds-survey
520 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
521 %doc lustre-iokit/ost-survey/README.ost-survey
522 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
523 %doc lustre-iokit/stats-collect/README.iokit-lstats
524 %endif
525
526 %post
527 %if %{with systemd}
528 %systemd_post lnet.service
529 %endif
530
531 %preun
532 %if %{with systemd}
533 %systemd_preun lnet.service
534 %endif
535
536 %postun
537 %if %{with systemd}
538 %systemd_postun_with_restart lnet.service
539 %endif
540
541 %clean
542 rm -rf $RPM_BUILD_ROOT
543 rm -rf %{_tmppath}/kmp