3 # Declare rpmbuild --with/--without parameters
7 %bcond_without lustre_tests
8 %bcond_without lustre_utils
9 %bcond_without lustre_iokit
10 %bcond_without lustre_modules
12 %bcond_without manpages
16 %if %{without servers}
17 # --without servers overrides --with {ldiskfs|zfs}
18 # so undefine the internal variables set by bcond_*
19 %undefine with_ldiskfs
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)}
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)}
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}
38 %if 0%{?build_src_rpm}
39 %{!?myrelease: %global myrelease 1}
41 %{!?myrelease: %global myrelease %(echo %kversion | tr '-' '_')}
42 # for those uses that don't want the -smp/-bigsmp (or the .arch) on the end
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$//')
47 %define fullrelease %{myrelease}
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 %):
54 # %%global _use_internal_dependency_generator 0
56 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
57 # defining it here (until Suse changes their mind)
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
67 #%%global _use_internal_dependency_generator 0
69 # Set the package name prefix
70 %if %{undefined lustre_name}
72 %global lustre_name lustre
74 %global lustre_name lustre-client
78 %if %{undefined kmoddir}
79 %if %{defined kernel_module_package_moddir}
80 %global kmoddir %{kernel_module_package_moddir}
82 %if %{defined suse_kernel_module_package}
83 %global kmoddir updates
90 %global modules_fs_path /lib/modules/%{kversion}/%{kmoddir}
92 %if %{_vendor}=="redhat" || %{_vendor}=="fedora"
93 %global requires_kmod_name kmod-%{lustre_name}
94 %global requires_kmod_version %{version}
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_/;')
100 Summary: Lustre File System
103 Release: %{fullrelease}
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
122 Requires: lustre-osd-mount
123 Provides: lustre-client = %{version}-%{fullrelease}
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
131 %if %{with lustre_modules}
132 %if %{_vendor}=="redhat"
133 BuildRequires: redhat-rpm-config
138 Userspace tools and files for the Lustre file system.
140 %if %{with lustre_modules}
141 %kernel_module_package_buildreqs
144 %kernel_module_package -n %{name} -p %SOURCE1 -f %SOURCE2 default
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
154 %description osd-ldiskfs-mount
155 LDISKFS hooks for mount/mkfs into a dynamic library.
157 %endif # with lustre_utils
158 %endif # with ldiskfs
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
168 %description osd-zfs-mount
169 ZFS hooks for mount/mkfs into a dynamic library.
171 %endif # with lustre_utils
174 %endif # with lustre_modules
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).
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.
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
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
197 %description deps-sles
198 This package has RPM dependencies appropriate for SLES systems.
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
207 %description deps-rhel
208 This package has RPM dependencies appropriate for RHEL, RHL, and FC
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
219 This package contains a set of test binaries and scripts that are intended
220 to be used by the Lustre testing framework.
222 %if %{with lustre_modules}
223 %kernel_module_package -n %{name}-tests -f %SOURCE7 default
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
232 %description -n lustre-iokit
233 This package includes five tools:
235 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
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.
245 This survey tests the client-to-disk performance of individual OSTs, and
246 ranks then for comparison.
249 This script will collect IO stats on a defined set of nodes.
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/
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
262 %if 0%{?suse_version}
266 %setup -qn lustre-%{version}
267 ln lustre/ChangeLog ChangeLog-lustre
268 ln lnet/ChangeLog ChangeLog-lnet
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
276 %define optflags -g -O2 -Werror
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=[^ ][^ ]* \?//')
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')
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}
312 make %{?_smp_mflags} -s %{?make_args}
315 make install DESTDIR=$RPM_BUILD_ROOT
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}
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
331 mkdir -p $basemodpath-osd-zfs/fs
332 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
334 %if %{with lustre_tests}
335 mkdir -p $basemodpath-tests/fs
336 mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
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
350 %if %{_vendor}=="redhat"
351 # The following scripts are Red Hat specific
353 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
354 echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
355 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
357 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
358 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
361 # fc18 needs 'x' permission for library files
362 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
365 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
367 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
370 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre.files
371 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
376 echo '%{_libdir}/libiam.a' >>lustre.files
379 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/snmp ] ; then
380 echo '%{_libdir}/lustre/snmp' >>lustre.files
383 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ \
384 -name \*.la -type f -exec rm -f {} \;
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 {} \;
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
400 %files -f lustre.files
401 %defattr(-,root,root)
403 %exclude %{_sbindir}/wirecheck
404 %exclude %{_sbindir}/wiretest
406 %exclude %{_sbindir}/zfsobj2fid
408 %if %{with lustre_utils}
410 %{_libexecdir}/lustre/lc_common
411 %{_libexecdir}/lustre/haconfig
412 %{_bindir}/lustre_req_history
417 %{_bindir}/plot-llstat
420 %{_bindir}/lfs_migrate
422 %{_libdir}/libptlctl.a
423 %{_libdir}/libcfsutil.a
424 %{_libdir}/liblustreapi.a
425 %{_libdir}/liblustreapi.so
429 %{_includedir}/lustre
430 %{_includedir}/libcfs
433 %{_sysconfdir}/udev/rules.d/99-lustre.rules
434 %config(noreplace) %{_sysconfdir}/ldev.conf
435 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
437 %if %{with lustre_modules}
440 %if %{with lustre_utils}
441 %files osd-ldiskfs-mount
442 %defattr(-,root,root)
443 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
448 %if %{with lustre_utils}
450 %defattr(-,root,root)
451 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
455 %endif # with lustre_modules
457 # uncomment these lines to enable deps packages
461 %if %{with lustre_tests}
462 %files tests -f lustre-tests.files
463 %defattr(-,root,root)
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
491 rm -rf $RPM_BUILD_ROOT
492 rm -rf %{_tmppath}/kmp