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