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