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
17 %if %{without servers}
18 # --without servers overrides --with {ldiskfs|zfs}
19 # so undefine the internal variables set by bcond_*
20 %undefine with_ldiskfs
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)}
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)}
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}
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 %):
44 # %%global _use_internal_dependency_generator 0
46 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
47 # defining it here (until Suse changes their mind)
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
57 #%%global _use_internal_dependency_generator 0
59 # Set the package name prefix
60 %if %{undefined lustre_name}
62 %global lustre_name lustre
64 %global lustre_name lustre-client
68 %if %{undefined kmoddir}
69 %if %{defined kernel_module_package_moddir}
70 %global kmoddir %{kernel_module_package_moddir}
72 %if %{defined suse_kernel_module_package}
73 %global kmoddir updates
80 %global modules_fs_path /lib/modules/%{kversion}/%{kmoddir}
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
87 %global requires_kmod_version %{version}
89 %global requires_kmod_name %{lustre_name}-kmp
90 %if %{with lustre_tests}
91 %global requires_kmod_tests_name %{lustre_name}-tests-kmp
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_/;')
97 %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
101 # RHEL >= 7 comes with systemd
103 %define with_systemd 1
106 # Fedora >= 15 comes with systemd, but only >= 18 has
108 %if 0%{?fedora} >= 18
109 %define with_systemd 1
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
118 Summary: Lustre File System
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
138 Requires: lustre-osd-mount
139 Obsoletes: lustre-client < %{version}
140 Provides: lustre-client = %{version}-%{release}
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
148 %if %{with lustre_modules}
149 BuildRequires: %kernel_module_package_buildreqs
150 %if %{_vendor}=="redhat"
151 BuildRequires: redhat-rpm-config
156 Requires(post): systemd
157 Requires(preun): systemd
158 Requires(postun): systemd
159 BuildRequires: systemd
163 Userspace tools and files for the Lustre file system.
165 %if %{with lustre_modules}
166 %kernel_module_package -n %{name} -p %SOURCE1 -f %SOURCE2 default
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
176 %description osd-ldiskfs-mount
177 LDISKFS hooks for mount/mkfs into a dynamic library.
179 %endif # with lustre_utils
180 %endif # with ldiskfs
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
190 %description osd-zfs-mount
191 ZFS hooks for mount/mkfs into a dynamic library.
193 %endif # with lustre_utils
196 %endif # with lustre_modules
199 %package resource-agents
200 Summary: HA Resuable Cluster Resource Scripts for Lustre
201 Group: System Environment/Base
203 Requires: resource-agents
205 %description resource-agents
206 A set of scripts to operate Lustre resources in a High Availablity
207 environment for both Pacemaker and rgmanager.
210 %if %{with lustre_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
218 Requires: %{name} = %{version}
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
225 This package contains a set of test binaries and scripts that are intended
226 to be used by the Lustre testing framework.
228 %if %{with lustre_modules}
229 %kernel_module_package -n %{name}-tests -f %SOURCE7 default
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
239 %description -n lustre-iokit
240 This package includes five tools:
242 A test of the 'bare metal' performance, bypassing as much of the kernel as we can. Uses the sgp_dd utility.
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.
252 This survey tests the client-to-disk performance of individual OSTs, and
253 ranks then for comparison.
256 This script will collect IO stats on a defined set of nodes.
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/
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
269 %if 0%{?suse_version}
273 %setup -qn lustre-%{version}
274 ln lustre/ChangeLog ChangeLog-lustre
275 ln lnet/ChangeLog ChangeLog-lnet
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
282 %define optflags -g -O2 -Werror
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=[^ ][^ ]* \?//')
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')
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}
319 make %{?_smp_mflags} -s %{?make_args}
322 make install DESTDIR=$RPM_BUILD_ROOT
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}
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
338 mkdir -p $basemodpath-osd-zfs/fs
339 mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
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/
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
359 # systemd is on redhat, fedora, and suse
361 echo '%{_unitdir}/lnet.service' >>lustre.files
364 %if %{_vendor}=="redhat"
365 # The following scripts are Red Hat specific
367 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
368 echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
369 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
372 %if %{without systemd}
373 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
376 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
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/
384 # fc18 needs 'x' permission for library files
385 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
387 rm -f $RPM_BUILD_ROOT%{_libdir}/liblnetconfig.la
389 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.a' >>lustre.files
392 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so' >>lustre.files
393 echo '%attr(-, root, root) %{_libdir}/liblnetconfig.so.*' >>lustre.files
397 echo '%{_libdir}/libiam.a' >>lustre.files
401 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/lustre/snmp
402 echo '%{_libdir}/lustre/snmp' >>lustre.files
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 {} \;
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 {} \;
417 %if %{with lustre_tests}
418 :> lustre-tests.files
419 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
420 echo '%{_bindir}/mcreate' >>lustre-tests.files
421 echo '%{_bindir}/munlink' >>lustre-tests.files
422 echo '%{_sbindir}/wirecheck' >>lustre-tests.files
423 echo '%{_sbindir}/wiretest' >>lustre-tests.files
426 %files -f lustre.files
427 %defattr(-,root,root)
429 %if %{with lustre_tests}
430 %exclude %{_sbindir}/wirecheck
431 %exclude %{_sbindir}/wiretest
434 %exclude %{_sbindir}/zfsobj2fid
436 %if %{with lustre_utils}
438 %{_libexecdir}/lustre/lc_common
439 %{_libexecdir}/lustre/haconfig
440 %{_bindir}/lustre_req_history
445 %{_bindir}/plot-llstat
448 %{_bindir}/lfs_migrate
450 %{_libdir}/liblustreapi.a
451 %{_libdir}/liblustreapi.so
456 %{_includedir}/lustre
457 %{_includedir}/linux/lnet
458 %{_includedir}/linux/lustre
460 %{_sysconfdir}/udev/rules.d/99-lustre.rules
461 %config(noreplace) %{_sysconfdir}/ldev.conf
462 %config(noreplace) %{_sysconfdir}/lnet.conf
463 %config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
464 %if %{with lustre_utils}
465 %config(noreplace) %{_sysconfdir}/lnet_routes.conf
467 %if %{with lustre_modules}
471 %if %{with lustre_utils}
472 %files osd-ldiskfs-mount
473 %defattr(-,root,root)
474 %{_libdir}/@PACKAGE@/mount_osd_ldiskfs.so
481 %if %{with lustre_utils}
483 %defattr(-,root,root)
484 %{_libdir}/@PACKAGE@/mount_osd_zfs.so
489 %endif # with lustre_modules
492 %files resource-agents
493 %defattr(0755,root,root)
494 %{_prefix}/lib/ocf/resource.d/lustre/
497 %if %{with lustre_tests}
498 %files tests -f lustre-tests.files
499 %defattr(-,root,root)
502 %if %{with lustre_iokit}
503 %files -n lustre-iokit
504 %defattr(-, root, root)
505 %{_bindir}/iokit-config
506 %{_bindir}/iokit-gather-stats
507 %{_bindir}/iokit-libecho
508 %{_bindir}/iokit-lstats
509 %{_bindir}/iokit-parse-ior
510 %{_bindir}/iokit-plot-obdfilter
511 %{_bindir}/iokit-plot-ost
512 %{_bindir}/iokit-plot-sgpdd
513 %{_bindir}/ior-survey
514 %{_bindir}/mds-survey
515 %{_bindir}/obdfilter-survey
516 %{_bindir}/ost-survey
517 %{_bindir}/sgpdd-survey
518 %doc lustre-iokit/ior-survey/README.ior-survey
519 %doc lustre-iokit/mds-survey/README.mds-survey
520 %doc lustre-iokit/obdfilter-survey/README.obdfilter-survey
521 %doc lustre-iokit/ost-survey/README.ost-survey
522 %doc lustre-iokit/sgpdd-survey/README.sgpdd-survey
523 %doc lustre-iokit/stats-collect/README.iokit-lstats
528 %systemd_post lnet.service
533 %systemd_preun lnet.service
538 %systemd_postun_with_restart lnet.service
542 rm -rf $RPM_BUILD_ROOT
543 rm -rf %{_tmppath}/kmp