2 %{!?version: %define version @VERSION@}
3 %{!?kversion: %define kversion @LINUXRELEASE@}
4 %{!?release: %define release @RELEASE@}
5 %{!?lustre_name: %define lustre_name lustre}
6 %{!?build_lustre_tests: %define build_lustre_tests 1}
8 # in order to get kernel symset and/or kernel module dependencies into
9 # the RPM, in order to support weak-modules, the internal dependency gen-
10 # erator needs to be disabled
11 # this is done with (reduce the double % down to a single %):
13 # %%global _use_internal_dependency_generator 0
15 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
16 # defining it here (until Suse changes their mind)
18 # on RHEL5, however, we do need to explicitly disable the internal dep-
19 # endency generator and allow the external one be used
20 # but since RedHat's kABI is only a subset of the total kernel ABI, it
21 # doesn't include all of the symbols we (or OFED for that matter) need
22 # until RedHat includes all of the symbols we need in their symsets we
23 # cannot support weak-modules
24 # we did e-mail the maintainer of all of this stuff @redhat but got no
26 #%%global _use_internal_dependency_generator 0
28 %define is_client %(bash -c "if [[ %{lustre_name} = *-client ]]; then echo -n '1'; else echo -n '0'; fi")
29 # for those uses that don't want the -smp/-bigsmp on the end of %kversion
30 %define krequires %(bash -c "echo %{kversion} | sed -e 's/.x86_64$//' -e 's/.i586$//' -e 's/-smp$//' -e 's/-bigsmp$//' -e 's/-ppc64$//' -e 's/-default$//'")
32 %define sles10 %(bash -c "if [ "%sles_version" = "10" ]; then echo -n '1'; else echo -n '0'; fi")
35 %define flavor %(bash -c "echo %{kversion} | sed -e 's/^.*-//'")
38 Summary: Lustre File System
43 Group: Utilities/System
44 Source: lustre-%{version}.tar.gz
45 URL: http://www.sun.com/software/products/lustre/index.xml
46 BuildRoot: %{_tmppath}/lustre-%{version}-root
47 Obsoletes: lustre-lite, lustre-lite-utils, lustre-ldap nfs-utils-lustre
48 Provides: lustre-lite = %{version}, lustre-lite-utils = %{version}
49 Requires: %{name}-modules = %{version}
50 # GSS requires this: BuildRequires: pkgconfig, libgssapi-devel >= 0.10
53 Userspace tools and files for the Lustre file system.
56 Summary: Kernel Lustre modules for Linux %{kversion}
57 # for RHEL5 and SLES11, we need nothing here
58 # for SLES10, we need (where %{flavor} is, i.e. smp):
60 Requires: kernel-%{flavor}
62 Group: Development/Kernel
65 Lustre file system, server and network drivers for Linux %{kversion}.
68 Summary: Object-Based Disk storage driver source
69 Group: Development/Kernel
72 Lustre sources for further development
74 # Since the RPMs we ship are to be used on both SLES and RHEL, we
75 # can't include any dependency information (since the package names
76 # are different on the two platforms).
78 # Instead, we can build these empty meta-packages that only include
79 # dependency information. These let people get the correct
80 # dependencies for their platform and lets them use tools like yum and
81 # red carpet to install the correct files.
83 # Unfortunately I have not seen this come up on the lists much, so I
84 # have disabled them (by commenting out their empty files section
85 # below) until it's clear that they resolve more confusion than they
89 Summary: Lustre dependencies meta-package for SLES
90 Group: Utilities/System
91 Provides: lustre-deps = %{version}
92 Requires: %{name} = %{version}, sles-release
93 Conflicts: %{name}-deps-rhel
95 %description deps-sles
96 This package has RPM dependencies appropriate for SLES systems.
99 Summary: Lustre dependencies meta-package for RHEL
100 Group: Utilities/System
101 Provides: lustre-deps = %{version}
102 Requires: %{name} = %{version}, redhat-release
103 Conflicts: %{name}-deps-sles
105 %description deps-rhel
106 This package has RPM dependencies appropriate for RHEL, RHL, and FC
110 Summary: Lustre testing framework
111 Group: Development/Kernel
112 Provides: %{name}-tests = %{version}
113 Requires: %{name} = %{version}, %{name}-modules = %{version}
116 This package contains a set of test binaries and scripts that are intended
117 to be used by the Lustre testing framework.
120 %setup -qn lustre-%{version}
121 ln lustre/ChangeLog ChangeLog-lustre
122 ln lnet/ChangeLog ChangeLog-lnet
125 # if RPM_BUILD_NCPUS unset, set it
126 if [ -z "$RPM_BUILD_NCPUS" ] ; then
127 RPM_BUILD_NCPUS=$(egrep -c "^cpu[0-9]+" /proc/stat 2>/dev/null || echo 0 :)
128 if [ $RPM_BUILD_NCPUS -eq 0 ] ; then
131 if [ $RPM_BUILD_NCPUS -gt 8 ] ; then
136 rm -rf $RPM_BUILD_ROOT
138 # Set an explicit path to our Linux tree, if we can.
139 cd $RPM_BUILD_DIR/lustre-%{version}
140 # override %optflags so that the vendor's overzealous flags don't create
142 %define optflags -g -O2 -Werror
144 %if %{build_lustre_tests}
145 CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-tests --enable-liblustre-tests"
147 CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-tests --disable-liblustre-tests"
149 %configure %{?configure_args:%configure_args} $CONFIGURE_ARGS
150 make -j $RPM_BUILD_NCPUS -s
153 make install DESTDIR=$RPM_BUILD_ROOT
154 # hack to avoid changing the libsysio code for "make install"
155 rm -f $RPM_BUILD_ROOT%{_libdir}/libsysio.a
156 # Remove ldiskfs module(s) - they are packaged by the ldiskfs .spec.
157 rm -rf $RPM_BUILD_ROOT/lib/modules/%{kversion}/updates/kernel/fs/lustre-ldiskfs
159 # hack to include the llog_test module in lustre-tests
160 llog_base=$RPM_BUILD_DIR/lustre-%{version}/lustre/obdclass/llog_test
161 if [ -e ${llog_base}.ko ]; then
162 cp ${llog_base}.ko $RPM_BUILD_ROOT/lib/modules/%{kversion}/updates/kernel/fs/lustre
163 elif [ -e ${llog_base}.o ]; then
164 cp ${llog_base}.o $RPM_BUILD_ROOT/lib/modules/%{kversion}/updates/kernel/fs/lustre
167 # Create the pristine source directory.
168 cd $RPM_BUILD_DIR/lustre-%{version}
169 mkdir -p $RPM_BUILD_ROOT/usr/src
171 ln -s $RPM_BUILD_ROOT/usr/src lustre-source
172 make distdir distdir=lustre-source/lustre-%{version}
173 chmod -R go-w lustre-source/lustre-%{version}
175 cat >lustre.files <<EOF
176 %attr(-, root, root) /sbin/mount.lustre
177 %attr(-, root, root) /usr/sbin/*
178 %attr(-, root, root) /usr/bin/*
180 %attr(-, root, root) /usr/share/lustre
182 %attr(-, root, root) %{_libdir}/libptlctl.a
183 %attr(-, root, root) %{_libdir}/liblustreapi.a
184 %attr(-, root, root) /usr/include/lustre
186 %attr(-, root, root) %{_mandir}/man?/*
188 %attr(-, root, root) %{_libexecdir}/lustre/lc_common
190 %attr(-, root, root) %{_sysconfdir}/udev/rules.d/99-lustre.rules
193 if [ -f $RPM_BUILD_ROOT%{_libdir}/libcfsutil.a ] ; then
194 echo '%attr(-, root, root) %{_libdir}/libcfsutil.a' >>lustre.files
197 if [ -f $RPM_BUILD_ROOT%{_libdir}/liblustre.so ] ; then
198 echo '%attr(-, root, root) %{_libdir}/liblustre.a' >>lustre.files
199 echo '%attr(-, root, root) %{_libdir}/liblustre.so' >>lustre.files
202 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/utils/libiam.c ] ; then
203 echo '%attr(-, root, root) %{_libdir}/libiam.a' >>lustre.files
206 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/snmp ] ; then
207 echo '%attr(-, root, root) %{_libdir}/lustre/snmp' >>lustre.files
208 echo '%attr(-, root, root) %{_datadir}/lustre/snmp/mibs' >>lustre.files
211 # Have universal lustre headers
212 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/include/lustre/lustre_idl.h ] ; then
213 echo '%attr(-, root, root) /usr/include/linux/lustre_user.h' >>lustre.files
215 echo '%attr(-, root, root) /usr/include/linux/lustre_idl.h' >>lustre.files
218 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/include/linux/lustre_types.h ] ; then
219 echo '%attr(-, root, root) /usr/include/linux/lustre_types.h' >>lustre.files
222 %if %{build_lustre_tests}
223 echo '%attr(-, root, root) %{_libdir}/lustre/tests/*' >lustre-tests.files
224 echo '%attr(-, root, root) /lib/modules/%{kversion}/updates/kernel/fs/lustre/llog_test.*' >>lustre-tests.files
225 modules_excludes="|llog_test"
226 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/liblustre/tests ] ; then
227 echo '%attr(-, root, root) %{_libdir}/lustre/liblustre/tests/*' >>lustre-tests.files
231 pushd $RPM_BUILD_ROOT >/dev/null
232 find lib/modules/%{kversion}/updates -type f | awk "!/(ZZZZZZZZZZ$modules_excludes)/ {print \"%attr(-, root, root) /\"\$0}" >>$RPM_BUILD_DIR/lustre-%{version}/lustre-modules.files
235 %files -f lustre.files
237 %files modules -f lustre-modules.files
238 %attr(-, root, root) %doc COPYING
239 %attr(-, root, root) %doc ChangeLog-lustre
240 %attr(-, root, root) %doc ChangeLog-lnet
243 %attr(-, root, root) /usr/src/lustre-%{version}
245 # uncomment these lines to enable deps packages
249 %if %{build_lustre_tests}
250 %files tests -f lustre-tests.files
254 if [ -f /boot/System.map-%{kversion} ]; then
255 depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
257 depmod -ae %{kversion} || exit 0
260 # "weak modules" support
262 if [ -x /usr/lib/module-init-tools/weak-modules ]; then
263 rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
264 /usr/lib/module-init-tools/weak-modules --add-modules
267 if [ -x /sbin/weak-modules ]; then
268 rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
269 /sbin/weak-modules --add-modules
273 Congratulations on finishing your Lustre installation! To register
274 your copy of Lustre and find out more about Lustre Support, Service,
275 and Training offerings please visit
277 http://www.sun.com/software/products/lustre/lustre_reg.jsp
280 # for update from < v1.4.6
282 for f in /etc/modules.conf /etc/modprobe.conf /etc/modprobe.conf.local ;
285 if grep 'lustre llite' $f >/dev/null 2>/dev/null ; then
286 [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
287 TMPFILE=`mktemp $f.XXXXXX` && \
288 rm -f $TMPFILE && touch $TMPFILE && \
289 grep -v 'lustre llite' $f >> $TMPFILE && \
292 if egrep "^[^#]*(add below|install) ptlrpc" $f ; then
293 [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
294 TMPFILE=`mktemp $f.XXXXXX` && \
295 rm -f $TMPFILE && touch $TMPFILE && \
296 sed -e "s/^[^#]*\(add below\|install\) ptlrpc.*/#&/" $f >> $TMPFILE && \
302 # If the kernel was built to reject unsupported modules (e.g. not a Lustre
303 # kernel), and this hasn't been overridden in /etc/modprobe.d yet, then
304 # print a warning so that users are aware of this issue.
305 if sysctl kernel.unsupported >/dev/null 2>&1 &&
306 [ "$(sysctl -n kernel.unsupported 2>/dev/null)" = "0" ] &&
307 ! modprobe -c | grep -q "^allow_unsupported_modules[ \t]1" ; then
309 warning: the Lustre modules are not supported by Novell. To use Lustre
310 on this system, you should put
312 allow_unsupported_modules 1
314 into /etc/modprobe.d/unsupported_modules"
318 rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' > /var/run/%{name}-modules
321 if [ -f /boot/System.map-%{kversion} ]; then
322 depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
324 depmod -ae %{kversion} || exit 0
327 # "weak modules" support
329 if [ -x /usr/lib/module-init-tools/weak-modules ]; then
330 cat /var/run/%{name}-modules | grep '\.ko$' |
331 /usr/lib/module-init-tools/weak-modules --remove-modules
334 if [ -x /sbin/weak-modules ]; then
335 cat /var/run/%{name}-modules | grep '\.ko$' |
336 /sbin/weak-modules --remove-modules
338 rm /var/run/%{name}-modules
340 %if %{build_lustre_tests}
342 if [ -f /boot/System.map-%{kversion} ]; then
343 depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
345 depmod -ae %{kversion} || exit 0
349 if [ -f /boot/System.map-%{kversion} ]; then
350 depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
352 depmod -ae %{kversion} || exit 0
357 rm -rf $RPM_BUILD_ROOT