Whamcloud - gitweb
LU-7099 lnet: lock improvement for ko2iblnd
[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 %package tests
181 Summary: Lustre testing framework
182 Group: Development/Kernel
183 Provides: %{name}-tests = %{version}
184 Requires: %{name} = %{version}, %{requires_kmod_name} = %{requires_kmod_version}, lustre-iokit
185 Requires: attr, rsync, perl, lsof, /usr/bin/getconf
186
187 %description tests
188 This package contains a set of test binaries and scripts that are intended
189 to be used by the Lustre testing framework.
190
191 %if %{with lustre_modules}
192 %kernel_module_package -n %{name}-tests -f %SOURCE7  default
193 %endif
194
195 %if %{with lustre_iokit}
196 %package -n lustre-iokit
197 Summary: The Lustre IO-Kit is a collection of benchmark tools for a cluster with the Lustre file system.
198 Group: Applications/System
199 Requires: python > 2.2, sg3_utils
200
201 %description -n lustre-iokit
202 This package includes five tools:
203 sgpdd-survey:
204 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
205
206 obdfilter-survey
207 This survey can be run in 3 modes to test disk I/O including the filesystem,
208 network I/O, and disk I/O via the network.  The script does sequential I/O
209 with varying numbers of threads and objects (files) by using lctl::test_brw
210 to drive the echo_client connected to local or remote obdfilter instances,
211 or remote obdecho instances.
212
213 ost-survey
214 This survey tests the client-to-disk performance of individual OSTs, and
215 ranks then for comparison.
216
217 stats-collect
218 This script will collect IO stats on a defined set of nodes.
219
220 ior-survey:
221 A script to run the IOR benchmark. The latest version can be downloaded from
222 http://www.llnl.gov/asci/purple/benchmarks/limited/ior/
223
224 mds-survey:
225 This survey tests the local metadata performance using the echo_client to drive
226 the MDD layer to perform operations. It is run with multiple threads (to
227 simulate MDT service threads) locally on the MDS node, and does not need Lustre
228 clients in order to run
229 %endif
230
231 %if 0%{?suse_version}
232 %debug_package
233 %endif
234 %prep
235 %setup -qn lustre-%{version}
236 ln lustre/ChangeLog ChangeLog-lustre
237 ln lnet/ChangeLog ChangeLog-lnet
238
239 %build
240
241 # Set an explicit path to our Linux tree, if we can.
242 cd $RPM_BUILD_DIR/lustre-%{version}
243 # override %optflags so that the vendor's overzealous flags don't create
244 # build failures
245 %define optflags -g -O2 -Werror
246
247 CONFIGURE_ARGS="%{?configure_args}"
248 if [ -n "$CONFIGURE_ARGS" ]; then
249         # make sure %%kdir and %%kobjdir are not in the configure arguments
250         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
251         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
252         # remove --with-kmp-moddir from configure arguments,
253         # it will be set --with-kmp-moddir=%%kmoddir
254         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-kmp-moddir=[^ ][^ ]* \?//')
255 fi
256
257 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
258 # string in it which we don't want word splitted by the shell
259 # also remove (build|host|target) options because they will be specified
260 # inside $CONFIGURE_ARGS
261 # kmod tools/scripts require %{name} directory with kernel modules
262 %define eval_configure %(echo '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
263
264 %eval_configure $CONFIGURE_ARGS \
265         %{?with_lustre_tests:--enable-tests}%{!?with_lustre_tests:--disable-tests} \
266         %{?with_lustre_utils:--enable-utils}%{!?with_lustre_utils:--disable-utils} \
267         %{?with_lustre_modules:--enable-modules}%{!?with_lustre_modules:--disable-modules} \
268         %{!?with_shared:--disable-shared} \
269         %{!?with_static:--disable-static} \
270         %{!?with_lustre_iokit:--disable-iokit} \
271         %{!?with_ldiskfs:--disable-ldiskfs} \
272         %{!?with_servers:--disable-server} \
273         %{!?with_zfs:--without-zfs} \
274         %{!?with_lnet_dlc:--disable-dlc} \
275         %{!?with_manpages:--disable-manpages} \
276         --with-release=%{release} \
277         --with-linux=%{kdir} \
278         --with-linux-obj=%{kobjdir} \
279         --with-kmp-moddir=%{kmoddir}/%{name}
280
281 make %{?_smp_mflags} -s %{?make_args}
282
283 %install
284 make install DESTDIR=$RPM_BUILD_ROOT
285
286 # RHEL's kernel_module_path macro expects that all the modules
287 # in a kmod package will be in modules_fs_path/<sub packagename>
288 # but Lustre installs all of the modules in a single pass into
289 # a shared location.  Since this is a restriction imposed by
290 # RHEL, we handle this here in the spec file rather than in
291 # Lustre's build system.  This is not expected to bother SLES's
292 # kernel_module_path macro.
293 basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{lustre_name}
294 %if %{with ldiskfs}
295 mkdir -p $basemodpath-osd-ldiskfs/fs
296 mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
297 mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
298 %endif
299 %if %{with zfs}
300 mkdir -p $basemodpath-osd-zfs/fs
301 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
302 %endif
303 %if %{with lustre_tests}
304 mkdir -p $basemodpath-tests/fs
305 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
306 %endif
307
308 :> lustre.files
309
310 %if %{with servers} && %{with lustre_utils}
311 # The .ha_v2 extension identifies the heartbeat resource agent as using
312 # legacy syntax. Install a compatibility symlink to avoid conflicts when
313 # newer-style agents are added.
314 ln -s Lustre.ha_v2 $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/Lustre
315 echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
316 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
317 %endif
318
319 %if %{_vendor}=="redhat"
320 # The following scripts are Red Hat specific
321 %if %{with servers}
322 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
323 echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
324 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
325 %endif
326 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
327 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
328 %endif
329
330 # fc18 needs 'x' permission for library files
331 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
332
333 %if %{with lnet_dlc}
334 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
335 %if %{with static}
336 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
337 %endif
338 %if %{with shared}
339 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre.files
340 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
341 %endif
342 %endif
343
344 %if %{with ldiskfs}
345 echo '%{_libdir}/libiam.a' >>lustre.files
346 %endif
347
348 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/snmp ] ; then
349         echo '%{_libdir}/lustre/snmp' >>lustre.files
350 fi
351
352 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ \
353     -name \*.la -type f -exec rm -f {} \;
354
355 %if %{with lustre_modules}
356 # mark modules executable for find-debuginfo.sh
357 find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
358 %endif
359
360 %if %{with lustre_tests}
361 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
362 echo '%{_bindir}/mcreate' >>lustre-tests.files
363 echo '%{_bindir}/munlink' >>lustre-tests.files
364 echo '%{_bindir}/req_layout' >>lustre-tests.files
365 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
366 echo '%{_sbindir}/wiretest' >>lustre-tests.files
367 %endif
368
369 %files -f lustre.files
370 %defattr(-,root,root)
371 %{_sbindir}/*
372 %exclude %{_sbindir}/wirecheck
373 %exclude %{_sbindir}/wiretest
374 %if %{with zfs}
375 %exclude %{_sbindir}/zfsobj2fid
376 %endif
377 %if %{with lustre_utils}
378 %if %{with servers}
379 %{_libexecdir}/lustre/lc_common
380 %{_libexecdir}/lustre/haconfig
381 %{_bindir}/lustre_req_history
382 %endif
383
384 %{_bindir}/llobdstat
385 %{_bindir}/llstat
386 %{_bindir}/plot-llstat
387
388 %{_bindir}/lfs
389 %{_bindir}/lfs_migrate
390 /sbin/mount.lustre
391 %{_libdir}/libptlctl.a
392 %{_libdir}/libcfsutil.a
393 %{_libdir}/liblustreapi.a
394 %{_libdir}/liblustreapi.so
395 %if %{with manpages}
396 %{_mandir}/man?/*
397 %endif
398 %{_includedir}/lustre
399 %{_includedir}/libcfs
400 %endif
401 %{_datadir}/lustre
402 %{_sysconfdir}/udev/rules.d/99-lustre.rules
403 %config(noreplace) %{_sysconfdir}/ldev.conf
404 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
405
406 %if %{with lustre_modules}
407
408 %if %{with ldiskfs}
409 %if %{with lustre_utils}
410 %files osd-ldiskfs-mount
411 %defattr(-,root,root)
412 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
413 %endif
414 %endif
415
416 %if %{with zfs}
417 %if %{with lustre_utils}
418 %files osd-zfs-mount
419 %defattr(-,root,root)
420 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
421 %endif
422 %endif
423
424 %endif # with lustre_modules
425
426 %if %{with lustre_tests}
427 %files tests -f lustre-tests.files
428 %defattr(-,root,root)
429 %endif
430
431 %if %{with lustre_iokit}
432 %files -n lustre-iokit
433 %defattr(-, root, root)
434 %{_bindir}/iokit-config
435 %{_bindir}/iokit-gather-stats
436 %{_bindir}/iokit-libecho
437 %{_bindir}/iokit-lstats
438 %{_bindir}/iokit-parse-ior
439 %{_bindir}/iokit-plot-obdfilter
440 %{_bindir}/iokit-plot-ost
441 %{_bindir}/iokit-plot-sgpdd
442 %{_bindir}/ior-survey
443 %{_bindir}/mds-survey
444 %{_bindir}/obdfilter-survey
445 %{_bindir}/ost-survey
446 %{_bindir}/sgpdd-survey
447 %doc lustre-iokit/ior-survey/README.ior-survey
448 %doc lustre-iokit/mds-survey/README.mds-survey
449 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
450 %doc lustre-iokit/ost-survey/README.ost-survey
451 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
452 %doc lustre-iokit/stats-collect/README.iokit-lstats
453 %endif
454
455 %clean
456 rm -rf $RPM_BUILD_ROOT
457 rm -rf %{_tmppath}/kmp