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