Whamcloud - gitweb
1cd6613ad67358d86aec997facee5c24812a285a
[fs/lustre-release.git] / lustre.spec.in
1 # lustre.spec
2 %{!?version: %define version @VERSION@}
3 %{!?kdir: %define kdir %(dir=$(echo "%configure_args" | sed -ne 's/.*--with-linux=\\([^ ][^ ]*\\).*$/\\1/p'); if [ -n "$dir" ]; then echo "$dir"; else echo "/lib/modules/$(uname -r)/build"; fi)}
4
5 %{!?kobjdir: %define kobjdir %(dir=$(echo "%configure_args" | sed -ne 's/.*--with-linux-obj=\\([^ ][^ ]*\\).*$/\\1/p'); if [ -n "$dir" ]; then echo "$dir"; else echo "%kdir"; fi)}
6
7 # as an alternative to this implementation we could simply "make -C $kdir kernelversion"
8 %{!?kversion: %define kversion %(if test -s %kobjdir/include/linux/utsrelease.h ; then LINUXRELEASEHEADER=utsrelease.h; else LINUXRELEASEHEADER=version.h; fi; sed -ne '/^#define UTS_RELEASE/s/.*"\\(.*\\)"$/\\1/p' %kobjdir/include/linux/$LINUXRELEASEHEADER)}
9
10 %{!?downstream_release: %define downstream_release "@DOWNSTREAM_RELEASE@"}
11
12 %define buildid %(if [ -n "@BUILDID@" ]; then echo "_@BUILDID@"; fi)
13
14 %{!?myrelease: %define myrelease %(if [ -n "%downstream_release" ]; then echo -n "%{downstream_release}_"; fi; echo %kversion | tr '-' '_')}
15
16 # always append the buildid, even when the caller defines %release
17 %define fullrelease %{myrelease}%{buildid}
18
19 %{!?lustre_name: %define lustre_name lustre}
20 %{!?build_lustre_tests: %define build_lustre_tests 1}
21
22 # in order to get kernel symset and/or kernel module dependencies into
23 # the RPM, in order to support weak-modules, the internal dependency gen-
24 # erator needs to be disabled
25 # this is done with (reduce the double % down to a single %):
26 #
27 # %%global _use_internal_dependency_generator 0
28 #
29 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
30 # defining it here (until Suse changes their mind)
31 #
32 # on RHEL5, however, we do need to explicitly disable the internal dep-
33 # endency generator and allow the external one be used
34 # but since RedHat's kABI is only a subset of the total kernel ABI, it
35 # doesn't include all of the symbols we (or OFED for that matter) need
36 # until RedHat includes all of the symbols we need in their symsets we
37 # cannot support weak-modules
38 # we did e-mail the maintainer of all of this stuff @redhat but got no
39 # response from them
40 #%%global _use_internal_dependency_generator 0
41
42 %define is_client %(bash -c "if [[ %{lustre_name} = *-client ]]; then echo -n '1'; else echo -n '0'; fi")
43 # for those uses that don't want the -smp/-bigsmp on the end of %kversion
44 %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$//'")
45
46 %define sles10 %(bash -c "if [ "%sles_version" = "10" ]; then echo -n '1'; else echo -n '0'; fi")
47
48 %if %sles10
49 %define flavor %(bash -c "echo %{kversion} | sed -e 's/^.*-//'")
50 %endif
51
52 Summary: Lustre File System
53 Name: %{lustre_name}
54 Version: %{version}
55 Release: %{fullrelease}
56 License: GPL
57 Group: Utilities/System
58 Source: lustre-%{version}.tar.gz
59 URL: http://www.sun.com/software/products/lustre/index.xml
60 BuildRoot: %{_tmppath}/lustre-%{version}-root
61 Obsoletes: lustre-lite, lustre-lite-utils, lustre-ldap nfs-utils-lustre
62 Provides: lustre-lite = %{version}, lustre-lite-utils = %{version}
63 Requires: %{name}-modules = %{version}
64 # GSS requires this: BuildRequires: pkgconfig, libgssapi-devel >= 0.10
65
66 %description
67 Userspace tools and files for the Lustre file system.
68
69 %package modules
70 Summary: Kernel Lustre modules for Linux %{kversion}
71 # for RHEL5 and SLES11, we need nothing here
72 # for SLES10, we need (where %{flavor} is, i.e. smp):
73 %if %sles10
74 Requires: kernel-%{flavor}
75 %endif
76 Group: Development/Kernel
77
78 %description modules
79 Lustre file system, server and network drivers for Linux %{kversion}.
80
81 %package source
82 Summary: Object-Based Disk storage driver source
83 Group: Development/Kernel
84
85 %description source
86 Lustre sources for further development
87
88 # Since the RPMs we ship are to be used on both SLES and RHEL, we
89 # can't include any dependency information (since the package names
90 # are different on the two platforms).
91 #
92 # Instead, we can build these empty meta-packages that only include
93 # dependency information.  These let people get the correct
94 # dependencies for their platform and lets them use tools like yum and
95 # red carpet to install the correct files.
96 #
97 # Unfortunately I have not seen this come up on the lists much, so I
98 # have disabled them (by commenting out their empty files section
99 # below) until it's clear that they resolve more confusion than they
100 # add.
101
102 %package deps-sles
103 Summary: Lustre dependencies meta-package for SLES
104 Group: Utilities/System
105 Provides: lustre-deps = %{version}
106 Requires: %{name} = %{version}, sles-release
107 Conflicts: %{name}-deps-rhel
108
109 %description deps-sles
110 This package has RPM dependencies appropriate for SLES systems.
111
112 %package deps-rhel
113 Summary: Lustre dependencies meta-package for RHEL
114 Group: Utilities/System
115 Provides: lustre-deps = %{version}
116 Requires: %{name} = %{version}, redhat-release
117 Conflicts: %{name}-deps-sles
118
119 %description deps-rhel
120 This package has RPM dependencies appropriate for RHEL, RHL, and FC
121 systems.
122
123 %package tests
124 Summary: Lustre testing framework
125 Group: Development/Kernel
126 Provides: %{name}-tests = %{version}
127 Requires: %{name} = %{version}, %{name}-modules = %{version}
128
129 %description tests
130 This package contains a set of test binaries and scripts that are intended
131 to be used by the Lustre testing framework.
132
133 %if 0%{?suse_version}
134 %debug_package
135 %endif
136 %prep
137 %setup -qn lustre-%{version}
138 ln lustre/ChangeLog ChangeLog-lustre
139 ln lnet/ChangeLog ChangeLog-lnet
140
141 %build
142 # if RPM_BUILD_NCPUS unset, set it
143 if [ -z "$RPM_BUILD_NCPUS" ] ; then
144     RPM_BUILD_NCPUS=$(egrep -c "^cpu[0-9]+" /proc/stat 2>/dev/null || echo 0 :)
145     if [ $RPM_BUILD_NCPUS -eq 0 ] ; then
146         RPM_BUILD_NCPUS=1
147     fi
148     if [ $RPM_BUILD_NCPUS -gt 8 ] ; then
149         RPM_BUILD_NCPUS=8
150     fi
151 fi
152
153 rm -rf $RPM_BUILD_ROOT
154
155 # Set an explicit path to our Linux tree, if we can.
156 cd $RPM_BUILD_DIR/lustre-%{version}
157 # override %optflags so that the vendor's overzealous flags don't create
158 # build failures
159 %define optflags -g -O2 -Werror
160 CONFIGURE_ARGS="%{?configure_args} --with-release=%release"
161 %if %{build_lustre_tests}
162 CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-tests --enable-liblustre-tests"
163 %else
164 CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-tests --disable-liblustre-tests"
165 %endif
166
167 # if %%kdir was given, make sure it's not in the configure arguments
168 if [ -n "%kdir" ]; then
169         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
170 fi
171 # ditto for %%kobjdir
172 if [ -n "%kobjdir" ]; then
173         CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
174 fi
175
176 # we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
177 # string in it which we don't want word splitted by the shell
178 %define eval_configure %(echo '%configure' | sed -e 's#\./configure#eval ./configure#')
179
180 %eval_configure \
181         %{?kdir: --with-linux=%kdir} %{?kobjdir: --with-linux-obj=%kobjdir} \
182         $CONFIGURE_ARGS
183 make -j $RPM_BUILD_NCPUS -s
184
185 %install
186 make install DESTDIR=$RPM_BUILD_ROOT
187 # hack to avoid changing the libsysio code for "make install"
188 rm -f $RPM_BUILD_ROOT%{_libdir}/libsysio.a
189 # Remove ldiskfs module(s) - they are packaged by the ldiskfs .spec.
190 rm -rf $RPM_BUILD_ROOT/lib/modules/%{kversion}/updates/kernel/fs/lustre-ldiskfs
191
192 # hack to include the llog_test module in lustre-tests
193 llog_base=$RPM_BUILD_DIR/lustre-%{version}/lustre/obdclass/llog_test
194 if [ -e ${llog_base}.ko ]; then
195   cp ${llog_base}.ko $RPM_BUILD_ROOT/lib/modules/%{kversion}/updates/kernel/fs/lustre
196 elif [ -e ${llog_base}.o ]; then
197   cp ${llog_base}.o $RPM_BUILD_ROOT/lib/modules/%{kversion}/updates/kernel/fs/lustre
198 fi
199
200 # Create the pristine source directory.
201 cd $RPM_BUILD_DIR/lustre-%{version}
202 mkdir -p $RPM_BUILD_ROOT/usr/src
203 rm -f lustre-source
204 ln -s $RPM_BUILD_ROOT/usr/src lustre-source
205 make distdir distdir=lustre-source/lustre-%{version}
206 chmod -R go-w lustre-source/lustre-%{version}
207
208 cat >lustre.files <<EOF
209 %attr(-, root, root) /sbin/mount.lustre
210 %attr(-, root, root) /usr/sbin/*
211 %attr(-, root, root) /usr/bin/*
212
213 %attr(-, root, root) /usr/share/lustre
214
215 %attr(-, root, root) %{_libdir}/libptlctl.a
216 %attr(-, root, root) %{_libdir}/liblustreapi.a
217 %attr(-, root, root) /usr/include/lustre
218
219 %attr(-, root, root) %{_mandir}/man?/*
220
221 %attr(-, root, root) %{_libexecdir}/lustre/lc_common
222
223 %attr(-, root, root) %{_sysconfdir}/udev/rules.d/99-lustre.rules
224 EOF
225
226 if [ -f $RPM_BUILD_ROOT%{_libdir}/libcfsutil.a ] ; then
227   echo '%attr(-, root, root) %{_libdir}/libcfsutil.a' >>lustre.files
228 fi
229
230 if [ -f $RPM_BUILD_ROOT%{_libdir}/liblustre.so ] ; then
231   echo '%attr(-, root, root) %{_libdir}/liblustre.a' >>lustre.files
232   echo '%attr(-, root, root) %{_libdir}/liblustre.so' >>lustre.files
233 fi
234
235 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/utils/libiam.c ] ; then
236   echo '%attr(-, root, root) %{_libdir}/libiam.a' >>lustre.files
237 fi
238
239 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/snmp ] ; then
240   echo '%attr(-, root, root) %{_libdir}/lustre/snmp' >>lustre.files
241   echo '%attr(-, root, root) %{_datadir}/lustre/snmp/mibs' >>lustre.files
242 fi
243
244 # Have universal lustre headers 
245 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/include/lustre/lustre_idl.h ] ; then
246   echo '%attr(-, root, root) /usr/include/linux/lustre_user.h' >>lustre.files
247 else
248   echo '%attr(-, root, root) /usr/include/linux/lustre_idl.h' >>lustre.files
249 fi
250
251 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/include/linux/lustre_types.h ] ; then
252   echo '%attr(-, root, root) /usr/include/linux/lustre_types.h' >>lustre.files
253 fi
254
255 %if %{build_lustre_tests}
256 echo '%attr(-, root, root) %{_libdir}/lustre/tests/*' >lustre-tests.files
257 echo '%attr(-, root, root) /lib/modules/%{kversion}/updates/kernel/fs/lustre/llog_test.*' >>lustre-tests.files
258 modules_excludes="|llog_test"
259 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/liblustre/tests ] ; then
260   echo '%attr(-, root, root) %{_libdir}/lustre/liblustre/tests/*' >>lustre-tests.files
261 fi
262 %endif
263
264 pushd $RPM_BUILD_ROOT >/dev/null
265 > $RPM_BUILD_DIR/lustre-%{version}/lustre-modules.files
266 find lib/modules/%{kversion}/updates -type f | awk "!/(ZZZZZZZZZZ$modules_excludes)/ {print \"%attr(-, root, root) /\"\$0}" >>$RPM_BUILD_DIR/lustre-%{version}/lustre-modules.files
267 popd >/dev/null
268
269 %files -f lustre.files
270
271 %files modules -f lustre-modules.files
272 %attr(-, root, root) %doc COPYING
273 %attr(-, root, root) %doc ChangeLog-lustre
274 %attr(-, root, root) %doc ChangeLog-lnet
275
276 %files source
277 %attr(-, root, root) /usr/src/lustre-%{version}
278
279 # uncomment these lines to enable deps packages
280 # %files deps-sles
281 # %files deps-rhel
282
283 %if %{build_lustre_tests}
284 %files tests -f lustre-tests.files
285 %endif
286
287 %post modules
288 if [ -f /boot/System.map-%{kversion} ]; then
289         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
290 else
291         depmod -ae %{kversion} || exit 0
292 fi
293
294 # "weak modules" support
295 # Suse
296 if [ -x /usr/lib/module-init-tools/weak-modules ]; then
297     rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
298         /usr/lib/module-init-tools/weak-modules --add-modules
299 fi
300 # RedHat
301 if [ -x /sbin/weak-modules ]; then
302     rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
303         /sbin/weak-modules --add-modules
304 fi
305
306 cat <<EOF
307 Congratulations on finishing your Lustre installation!  To register
308 your copy of Lustre and find out more about Lustre Support, Service,
309 and Training offerings please visit
310
311 http://www.sun.com/software/products/lustre/lustre_reg.jsp
312 EOF
313
314 # for update from < v1.4.6
315
316 for f in /etc/modules.conf /etc/modprobe.conf /etc/modprobe.conf.local ; 
317 do
318         if [ -f $f ]; then
319                 if grep 'lustre llite' $f >/dev/null 2>/dev/null ; then
320                         [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
321                         TMPFILE=`mktemp $f.XXXXXX` && \
322                         rm -f $TMPFILE && touch $TMPFILE && \
323                         grep -v 'lustre llite' $f >> $TMPFILE && \
324                         mv $TMPFILE $f
325                 fi
326                 if egrep "^[^#]*(add below|install) ptlrpc" $f ; then
327                         [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
328                         TMPFILE=`mktemp $f.XXXXXX` && \
329                         rm -f $TMPFILE && touch $TMPFILE && \
330                         sed -e "s/^[^#]*\(add below\|install\) ptlrpc.*/#&/" $f >> $TMPFILE && \
331                         mv $TMPFILE $f
332                 fi
333         fi
334 done
335
336 # If the kernel was built to reject unsupported modules (e.g. not a Lustre
337 # kernel), and this hasn't been overridden in /etc/modprobe.d yet, then
338 # print a warning so that users are aware of this issue.
339 if sysctl kernel.unsupported >/dev/null 2>&1 &&
340    [ "$(sysctl -n kernel.unsupported 2>/dev/null)" = "0" ] &&
341     ! modprobe -c | grep -q "^allow_unsupported_modules[ \t]1" ; then
342      echo "
343      warning: the Lustre modules are not supported by Novell. To use Lustre
344               on this system, you should put
345
346      allow_unsupported_modules 1
347
348      into /etc/modprobe.d/unsupported_modules"
349 fi
350
351 %preun modules
352 rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' > /var/run/%{name}-modules
353
354 %postun modules
355 if [ -f /boot/System.map-%{kversion} ]; then
356         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
357 else
358         depmod -ae %{kversion} || exit 0
359 fi
360
361 # "weak modules" support
362 # Suse
363 if [ -x /usr/lib/module-init-tools/weak-modules ]; then
364     cat /var/run/%{name}-modules | grep '\.ko$' |
365         /usr/lib/module-init-tools/weak-modules --remove-modules
366 fi
367 # RedHat
368 if [ -x /sbin/weak-modules ]; then
369     cat /var/run/%{name}-modules | grep '\.ko$' |
370         /sbin/weak-modules --remove-modules
371 fi
372 rm /var/run/%{name}-modules
373
374 %if %{build_lustre_tests}
375 %post tests
376 if [ -f /boot/System.map-%{kversion} ]; then
377         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
378 else
379         depmod -ae %{kversion} || exit 0
380 fi
381
382 %postun tests
383 if [ -f /boot/System.map-%{kversion} ]; then
384         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
385 else
386         depmod -ae %{kversion} || exit 0
387 fi
388 %endif
389
390 %clean
391 rm -rf $RPM_BUILD_ROOT