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