Whamcloud - gitweb
b=23185 use resolve_arch() in the test too
[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 Summary: Lustre File System
33 Name: %{lustre_name}
34 Version: %{version}
35 Release: %{release}
36 License: GPL
37 Group: Utilities/System
38 Source: lustre-%{version}.tar.gz
39 URL: http://www.sun.com/software/products/lustre/index.xml
40 BuildRoot: %{_tmppath}/lustre-%{version}-root
41 Obsoletes: lustre-lite, lustre-lite-utils, lustre-ldap nfs-utils-lustre
42 Provides: lustre-lite = %{version}, lustre-lite-utils = %{version}
43 Requires: %{name}-modules = %{version}
44 # GSS requires this: BuildRequires: pkgconfig, libgssapi-devel >= 0.10
45
46 %description
47 Userspace tools and files for the Lustre file system.
48
49 %package modules
50 Summary: Kernel Lustre modules for Linux %{kversion}
51 Requires: modutils >= 2.4.10, kernel = %{krequires}
52 Group: Development/Kernel
53
54 %description modules
55 Lustre file system, server and network drivers for Linux %{kversion}.
56
57 %package source
58 Summary: Object-Based Disk storage driver source
59 Group: Development/Kernel
60
61 %description source
62 Lustre sources for further development
63
64 # Since the RPMs we ship are to be used on both SLES and RHEL, we
65 # can't include any dependency information (since the package names
66 # are different on the two platforms).
67 #
68 # Instead, we can build these empty meta-packages that only include
69 # dependency information.  These let people get the correct
70 # dependencies for their platform and lets them use tools like yum and
71 # red carpet to install the correct files.
72 #
73 # Unfortunately I have not seen this come up on the lists much, so I
74 # have disabled them (by commenting out their empty files section
75 # below) until it's clear that they resolve more confusion than they
76 # add.
77
78 %package deps-sles
79 Summary: Lustre dependencies meta-package for SLES
80 Group: Utilities/System
81 Provides: lustre-deps = %{version}
82 Requires: %{name} = %{version}, sles-release
83 Conflicts: %{name}-deps-rhel
84
85 %description deps-sles
86 This package has RPM dependencies appropriate for SLES systems.
87
88 %package deps-rhel
89 Summary: Lustre dependencies meta-package for RHEL
90 Group: Utilities/System
91 Provides: lustre-deps = %{version}
92 Requires: %{name} = %{version}, redhat-release
93 Conflicts: %{name}-deps-sles
94
95 %description deps-rhel
96 This package has RPM dependencies appropriate for RHEL, RHL, and FC
97 systems.
98
99 %package tests
100 Summary: Lustre testing framework
101 Group: Development/Kernel
102 Provides: %{name}-tests = %{version}
103 Requires: %{name} = %{version}, %{name}-modules = %{version}
104
105 %description tests
106 This package contains a set of test binaries and scripts that are intended
107 to be used by the Lustre testing framework.
108
109 %prep
110 %setup -qn lustre-%{version}
111 ln lustre/ChangeLog ChangeLog-lustre
112 ln lnet/ChangeLog ChangeLog-lnet
113
114 %build
115 # if RPM_BUILD_NCPUS unset, set it
116 if [ -z "$RPM_BUILD_NCPUS" ] ; then
117     RPM_BUILD_NCPUS=$(egrep -c "^cpu[0-9]+" /proc/stat 2>/dev/null || echo 0 :)
118     if [ $RPM_BUILD_NCPUS -eq 0 ] ; then
119         RPM_BUILD_NCPUS=1
120     fi
121     if [ $RPM_BUILD_NCPUS -gt 8 ] ; then
122         RPM_BUILD_NCPUS=8
123     fi
124 fi
125
126 rm -rf $RPM_BUILD_ROOT
127
128 # Set an explicit path to our Linux tree, if we can.
129 cd $RPM_BUILD_DIR/lustre-%{version}
130 # override %optflags so that the vendor's overzealous flags don't create
131 # build failures
132 %define optflags -g -O2 -Werror
133 CONFIGURE_ARGS=""
134 %if %{build_lustre_tests}
135 CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-tests --enable-liblustre-tests"
136 %else
137 CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-tests --disable-liblustre-tests"
138 %endif
139 %configure %{?configure_args:%configure_args} $CONFIGURE_ARGS
140 make -j $RPM_BUILD_NCPUS -s
141
142 %install
143 make install DESTDIR=$RPM_BUILD_ROOT
144 # hack to avoid changing the libsysio code for "make install"
145 rm -f $RPM_BUILD_ROOT%{_libdir}/libsysio.a
146 # Remove ldiskfs module(s) - they are packaged by the ldiskfs .spec.
147 rm -rf $RPM_BUILD_ROOT/lib/modules/%{kversion}/kernel/fs/lustre-ldiskfs
148
149 # hack to include the llog_test module in lustre-tests
150 llog_base=$RPM_BUILD_DIR/lustre-%{version}/lustre/obdclass/llog_test
151 if [ -e ${llog_base}.ko ]; then
152   cp ${llog_base}.ko $RPM_BUILD_ROOT/lib/modules/%{kversion}/kernel/fs/lustre
153 elif [ -e ${llog_base}.o ]; then
154   cp ${llog_base}.o $RPM_BUILD_ROOT/lib/modules/%{kversion}/kernel/fs/lustre
155 fi
156
157 # Create the pristine source directory.
158 cd $RPM_BUILD_DIR/lustre-%{version}
159 mkdir -p $RPM_BUILD_ROOT/usr/src
160 rm -f lustre-source
161 ln -s $RPM_BUILD_ROOT/usr/src lustre-source
162 make distdir distdir=lustre-source/lustre-%{version}
163 chmod -R go-w lustre-source/lustre-%{version}
164
165 cat >lustre.files <<EOF
166 %attr(-, root, root) /sbin/mount.lustre
167 %attr(-, root, root) /usr/sbin/*
168 %attr(-, root, root) /usr/bin/*
169
170 %attr(-, root, root) /usr/share/lustre
171
172 %attr(-, root, root) %{_libdir}/libptlctl.a
173 %attr(-, root, root) %{_libdir}/liblustreapi.a
174 %attr(-, root, root) /usr/include/lustre
175
176 %attr(-, root, root) %{_mandir}/man?/*
177
178 %attr(-, root, root) %{_libexecdir}/lustre/lc_common
179 EOF
180
181 if [ -f $RPM_BUILD_ROOT%{_libdir}/libcfsutil.a ] ; then
182   echo '%attr(-, root, root) %{_libdir}/libcfsutil.a' >>lustre.files
183 fi
184
185 if [ -f $RPM_BUILD_ROOT%{_libdir}/liblustre.so ] ; then
186   echo '%attr(-, root, root) %{_libdir}/liblustre.a' >>lustre.files
187   echo '%attr(-, root, root) %{_libdir}/liblustre.so' >>lustre.files
188 fi
189
190 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/utils/libiam.c ] ; then
191   echo '%attr(-, root, root) %{_libdir}/libiam.a' >>lustre.files
192 fi
193
194 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/snmp ] ; then
195   echo '%attr(-, root, root) %{_libdir}/lustre/snmp' >>lustre.files
196   echo '%attr(-, root, root) %{_datadir}/lustre/snmp/mibs' >>lustre.files
197 fi
198
199 # Have universal lustre headers 
200 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/include/lustre/lustre_idl.h ] ; then
201   echo '%attr(-, root, root) /usr/include/linux/lustre_user.h' >>lustre.files
202 else
203   echo '%attr(-, root, root) /usr/include/linux/lustre_idl.h' >>lustre.files
204 fi
205
206 if [ -f $RPM_BUILD_DIR/lustre-%{version}/lustre/include/linux/lustre_types.h ] ; then
207   echo '%attr(-, root, root) /usr/include/linux/lustre_types.h' >>lustre.files
208 fi
209
210 %if %{build_lustre_tests}
211 echo '%attr(-, root, root) %{_libdir}/lustre/tests/*' >lustre-tests.files
212 echo '%attr(-, root, root) /lib/modules/%{kversion}/kernel/fs/lustre/llog_test.*' >>lustre-tests.files
213 modules_excludes="|llog_test"
214 if [ -d $RPM_BUILD_ROOT%{_libdir}/lustre/liblustre/tests ] ; then
215   echo '%attr(-, root, root) %{_libdir}/lustre/liblustre/tests/*' >>lustre-tests.files
216 fi
217 %endif
218
219 pushd $RPM_BUILD_ROOT >/dev/null
220 find lib/modules/%{kversion}/kernel -type f | awk "!/(ZZZZZZZZZZ$modules_excludes)/ {print \"%attr(-, root, root) /\"\$0}" >>$RPM_BUILD_DIR/lustre-%{version}/lustre-modules.files
221 popd >/dev/null
222
223 %files -f lustre.files
224
225 %files modules -f lustre-modules.files
226 %attr(-, root, root) %doc COPYING
227 %attr(-, root, root) %doc ChangeLog-lustre
228 %attr(-, root, root) %doc ChangeLog-lnet
229
230 %files source
231 %attr(-, root, root) /usr/src/lustre-%{version}
232
233 # uncomment these lines to enable deps packages
234 # %files deps-sles
235 # %files deps-rhel
236
237 %if %{build_lustre_tests}
238 %files tests -f lustre-tests.files
239 %endif
240
241 %post modules
242 if [ -f /boot/System.map-%{kversion} ]; then
243         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
244 else
245         depmod -ae %{kversion} || exit 0
246 fi
247 cat <<EOF
248 Congratulations on finishing your Lustre installation!  To register  
249 your copy of Lustre and find out more about Lustre Support, Service,  
250 and Training offerings please visit
251
252 http://www.sun.com/software/products/lustre/lustre_reg.jsp
253 EOF
254
255 # for update from < v1.4.6
256
257 for f in /etc/modules.conf /etc/modprobe.conf /etc/modprobe.conf.local ; 
258 do
259         if [ -f $f ]; then
260                 if grep 'lustre llite' $f >/dev/null 2>/dev/null ; then
261                         [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
262                         TMPFILE=`mktemp $f.XXXXXX` && \
263                         rm -f $TMPFILE && touch $TMPFILE && \
264                         grep -v 'lustre llite' $f >> $TMPFILE && \
265                         mv $TMPFILE $f
266                 fi
267                 if egrep "^[^#]*(add below|install) ptlrpc" $f ; then
268                         [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
269                         TMPFILE=`mktemp $f.XXXXXX` && \
270                         rm -f $TMPFILE && touch $TMPFILE && \
271                         sed -e "s/^[^#]*\(add below\|install\) ptlrpc.*/#&/" $f >> $TMPFILE && \
272                         mv $TMPFILE $f
273                 fi
274         fi
275 done
276
277 # If the kernel was built to reject unsupported modules (e.g. not a Lustre
278 # kernel), and this hasn't been overridden in /etc/modprobe.d yet, then
279 # print a warning so that users are aware of this issue.
280 if sysctl kernel.unsupported >/dev/null 2>&1 &&
281    [ "$(sysctl -n kernel.unsupported 2>/dev/null)" = "0" ] &&
282     ! modprobe -c | grep -q "^allow_unsupported_modules[ \t]1" ; then
283      echo "
284      warning: the Lustre modules are not supported by Novell. To use Lustre
285               on this system, you should put
286
287      allow_unsupported_modules 1
288
289      into /etc/modprobe.d/unsupported_modules"
290 fi
291
292 %postun modules
293 if [ -f /boot/System.map-%{kversion} ]; then
294         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
295 else
296         depmod -ae %{kversion} || exit 0
297 fi
298
299 %if %{build_lustre_tests}
300 %post tests
301 if [ -f /boot/System.map-%{kversion} ]; then
302         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
303 else
304         depmod -ae %{kversion} || exit 0
305 fi
306
307 %postun tests
308 if [ -f /boot/System.map-%{kversion} ]; then
309         depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
310 else
311         depmod -ae %{kversion} || exit 0
312 fi
313 %endif
314
315 %clean
316 rm -rf $RPM_BUILD_ROOT