Whamcloud - gitweb
LU-6142 UAPI: replace cfs_size_* macros with __ALIGN_KERNEL
[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 rm -f $RPM_BUILD_ROOT%{_libdir}/liblustreapi.la
418
419 %if %{with lustre_tests}
420 :> lustre-tests.files
421 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
422 echo '%{_bindir}/mcreate' >>lustre-tests.files
423 echo '%{_bindir}/munlink' >>lustre-tests.files
424 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
425 echo '%{_sbindir}/wiretest' >>lustre-tests.files
426 %endif
427
428 %files -f lustre.files
429 %defattr(-,root,root)
430 %{_sbindir}/*
431 %if %{with lustre_tests}
432 %exclude %{_sbindir}/wirecheck
433 %exclude %{_sbindir}/wiretest
434 %endif
435 %if %{with zfs}
436 %exclude %{_sbindir}/zfsobj2fid
437 %endif
438 %if %{with lustre_utils}
439 %if %{with servers}
440 %{_libexecdir}/lustre/lc_common
441 %{_libexecdir}/lustre/haconfig
442 %{_bindir}/lustre_req_history
443 %endif
444
445 %{_bindir}/llobdstat
446 %{_bindir}/llstat
447 %{_bindir}/plot-llstat
448
449 %{_bindir}/lfs
450 %{_bindir}/lfs_migrate
451 /sbin/mount.lustre
452 %if %{with static}
453 %{_libdir}/liblustreapi.a
454 %endif
455 %if %{with shared}
456 %{_libdir}/liblustreapi.so*
457 %endif
458 %if %{with manpages}
459 %{_mandir}/man?/*
460 %endif
461 %{_datadir}/lustre
462 %{_includedir}/lustre
463 %{_includedir}/linux/lnet
464 %{_includedir}/linux/lustre
465 %endif
466 %{_sysconfdir}/udev/rules.d/99-lustre.rules
467 %if %{with zfs}
468 %config(noreplace) %{_sysconfdir}/ldev.conf
469 %endif
470 %config(noreplace) %{_sysconfdir}/lnet.conf
471 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
472 %if %{with lustre_utils}
473 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
474 %endif
475 %if %{with lustre_modules}
476
477 %if %{with shared}
478 %if %{with ldiskfs}
479 %if %{with lustre_utils}
480 %files osd-ldiskfs-mount
481 %defattr(-,root,root)
482 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
483 %endif
484 %endif
485 %endif
486
487 %if %{with shared}
488 %if %{with zfs}
489 %if %{with lustre_utils}
490 %files osd-zfs-mount
491 %defattr(-,root,root)
492 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
493 %{_sysconfdir}/zfs/zed.d/*
494 %endif
495 %endif
496 %endif
497
498 %endif # with lustre_modules
499
500 %if %{with servers}
501 %files resource-agents
502 %defattr(0755,root,root)
503 %{_prefix}/lib/ocf/resource.d/lustre/
504 %endif
505
506 %if %{with lustre_tests}
507 %files tests -f lustre-tests.files
508 %defattr(-,root,root)
509 %endif
510
511 %if %{with lustre_iokit}
512 %files -n lustre-iokit
513 %defattr(-, root, root)
514 %{_bindir}/iokit-config
515 %{_bindir}/iokit-gather-stats
516 %{_bindir}/iokit-libecho
517 %{_bindir}/iokit-lstats
518 %{_bindir}/iokit-parse-ior
519 %{_bindir}/iokit-plot-obdfilter
520 %{_bindir}/iokit-plot-ost
521 %{_bindir}/iokit-plot-sgpdd
522 %{_bindir}/ior-survey
523 %{_bindir}/mds-survey
524 %{_bindir}/obdfilter-survey
525 %{_bindir}/ost-survey
526 %{_bindir}/sgpdd-survey
527 %doc lustre-iokit/ior-survey/README.ior-survey
528 %doc lustre-iokit/mds-survey/README.mds-survey
529 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
530 %doc lustre-iokit/ost-survey/README.ost-survey
531 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
532 %doc lustre-iokit/stats-collect/README.iokit-lstats
533 %endif
534
535 %post
536 %if %{with systemd}
537 %systemd_post lnet.service
538 %endif
539
540 %preun
541 %if %{with systemd}
542 %systemd_preun lnet.service
543 %endif
544
545 %postun
546 %if %{with systemd}
547 %systemd_postun_with_restart lnet.service
548 %endif
549
550 %clean
551 rm -rf $RPM_BUILD_ROOT
552 rm -rf %{_tmppath}/kmp