Whamcloud - gitweb
b=21452 support for weak-modules
[fs/lustre-release.git] / lustre.spec.in
1 # lustre.spec
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}
7
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 %):
12 #
13 # %%global _use_internal_dependency_generator 0
14 #
15 # on SLES10, /usr/lib/rpm/macros already sets this, so no harm in also
16 # defining it here (until Suse changes their mind)
17 #
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
25 # response from them
26 #%%global _use_internal_dependency_generator 0
27
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$//'")
31
32 %define sles10 %(bash -c "if [ "%sles_version" = "10" ]; then echo -n '1'; else echo -n '0'; fi")
33
34 %if %sles10
35 %define flavor %(bash -c "echo %{kversion} | sed -e 's/^.*-//'")
36 %endif
37
38 Summary: Lustre File System
39 Name: %{lustre_name}
40 Version: %{version}
41 Release: %{release}
42 License: GPL
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
51
52 %description
53 Userspace tools and files for the Lustre file system.
54
55 %package modules
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):
59 %if %sles10
60 Requires: kernel-%{flavor}
61 %endif
62 Group: Development/Kernel
63
64 %description modules
65 Lustre file system, server and network drivers for Linux %{kversion}.
66
67 %package source
68 Summary: Object-Based Disk storage driver source
69 Group: Development/Kernel
70
71 %description source
72 Lustre sources for further development
73
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).
77 #
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.
82 #
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
86 # add.
87
88 %package deps-sles
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
94
95 %description deps-sles
96 This package has RPM dependencies appropriate for SLES systems.
97
98 %package deps-rhel
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
104
105 %description deps-rhel
106 This package has RPM dependencies appropriate for RHEL, RHL, and FC
107 systems.
108
109 %package tests
110 Summary: Lustre testing framework
111 Group: Development/Kernel
112 Provides: %{name}-tests = %{version}
113 Requires: %{name} = %{version}, %{name}-modules = %{version}
114
115 %description tests
116 This package contains a set of test binaries and scripts that are intended
117 to be used by the Lustre testing framework.
118
119 %prep
120 %setup -qn lustre-%{version}
121 ln lustre/ChangeLog ChangeLog-lustre
122 ln lnet/ChangeLog ChangeLog-lnet
123
124 %build
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
129         RPM_BUILD_NCPUS=1
130     fi
131     if [ $RPM_BUILD_NCPUS -gt 8 ] ; then
132         RPM_BUILD_NCPUS=8
133     fi
134 fi
135
136 rm -rf $RPM_BUILD_ROOT
137
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
141 # build failures
142 %define optflags -g -O2 -Werror
143 CONFIGURE_ARGS=""
144 %if %{build_lustre_tests}
145 CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-tests --enable-liblustre-tests"
146 %else
147 CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-tests --disable-liblustre-tests"
148 %endif
149 %configure %{?configure_args:%configure_args} $CONFIGURE_ARGS
150 make -j $RPM_BUILD_NCPUS -s
151
152 %install
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
158
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
165 fi
166
167 # Create the pristine source directory.
168 cd $RPM_BUILD_DIR/lustre-%{version}
169 mkdir -p $RPM_BUILD_ROOT/usr/src
170 rm -f lustre-source
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}
174
175 cat >lustre.files <<EOF
176 %attr(-, root, root) /sbin/mount.lustre
177 %attr(-, root, root) /usr/sbin/*
178 %attr(-, root, root) /usr/bin/*
179
180 %attr(-, root, root) /usr/share/lustre
181
182 %attr(-, root, root) %{_libdir}/libptlctl.a
183 %attr(-, root, root) %{_libdir}/liblustreapi.a
184 %attr(-, root, root) /usr/include/lustre
185
186 %attr(-, root, root) %{_mandir}/man?/*
187
188 %attr(-, root, root) %{_libexecdir}/lustre/lc_common
189
190 %attr(-, root, root) %{_sysconfdir}/udev/rules.d/99-lustre.rules
191 EOF
192
193 if [ -f $RPM_BUILD_ROOT%{_libdir}/libcfsutil.a ] ; then
194   echo '%attr(-, root, root) %{_libdir}/libcfsutil.a' >>lustre.files
195 fi
196
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
200 fi
201
202 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/utils/libiam.c ] ; then
203   echo '%attr(-, root, root) %{_libdir}/libiam.a' >>lustre.files
204 fi
205
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
209 fi
210
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
214 else
215   echo '%attr(-, root, root) /usr/include/linux/lustre_idl.h' >>lustre.files
216 fi
217
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
220 fi
221
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
228 fi
229 %endif
230
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
233 popd >/dev/null
234
235 %files -f lustre.files
236
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
241
242 %files source
243 %attr(-, root, root) /usr/src/lustre-%{version}
244
245 # uncomment these lines to enable deps packages
246 # %files deps-sles
247 # %files deps-rhel
248
249 %if %{build_lustre_tests}
250 %files tests -f lustre-tests.files
251 %endif
252
253 %post modules
254 if [ -f /boot/System.map-%{kversion} ]; then
255         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
256 else
257         depmod -ae %{kversion} || exit 0
258 fi
259
260 # "weak modules" support
261 # Suse
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
265 fi
266 # RedHat
267 if [ -x /sbin/weak-modules ]; then
268     rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
269         /sbin/weak-modules --add-modules
270 fi
271
272 cat <<EOF
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
276
277 http://www.sun.com/software/products/lustre/lustre_reg.jsp
278 EOF
279
280 # for update from < v1.4.6
281
282 for f in /etc/modules.conf /etc/modprobe.conf /etc/modprobe.conf.local ; 
283 do
284         if [ -f $f ]; then
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 && \
290                         mv $TMPFILE $f
291                 fi
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 && \
297                         mv $TMPFILE $f
298                 fi
299         fi
300 done
301
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
308      echo "
309      warning: the Lustre modules are not supported by Novell. To use Lustre
310               on this system, you should put
311
312      allow_unsupported_modules 1
313
314      into /etc/modprobe.d/unsupported_modules"
315 fi
316
317 %preun modules
318 rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' > /var/run/%{name}-modules
319
320 %postun modules
321 if [ -f /boot/System.map-%{kversion} ]; then
322         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
323 else
324         depmod -ae %{kversion} || exit 0
325 fi
326
327 # "weak modules" support
328 # Suse
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
332 fi
333 # RedHat
334 if [ -x /sbin/weak-modules ]; then
335     cat /var/run/%{name}-modules | grep '\.ko$' |
336         /sbin/weak-modules --remove-modules
337 fi
338 rm /var/run/%{name}-modules
339
340 %if %{build_lustre_tests}
341 %post tests
342 if [ -f /boot/System.map-%{kversion} ]; then
343         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
344 else
345         depmod -ae %{kversion} || exit 0
346 fi
347
348 %postun tests
349 if [ -f /boot/System.map-%{kversion} ]; then
350         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
351 else
352         depmod -ae %{kversion} || exit 0
353 fi
354 %endif
355
356 %clean
357 rm -rf $RPM_BUILD_ROOT