# lustre.spec
%{!?version: %define version @VERSION@}
-%{!?kversion: %define kversion @LINUXRELEASE@}
-%{!?release: %define release @RELEASE@}
+%{!?kver: %define kver ""}
+%{!?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)}
+
+%{!?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)}
+
+# as an alternative to this implementation we could simply "make -C $kdir kernelversion"
+%{!?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)}
+
+%{!?downstream_release: %define downstream_release "@DOWNSTREAM_RELEASE@"}
+
+%define buildid %(if [ -n "@BUILDID@" ]; then echo "_@BUILDID@"; fi)
+
+%{!?myrelease: %define myrelease %(if [ -n "%downstream_release" ]; then echo -n "%{downstream_release}_"; fi; echo %kversion | tr '-' '_')}
+
+# always append the buildid, even when the caller defines %release
+%define fullrelease %{myrelease}%{buildid}
+
%{!?lustre_name: %define lustre_name lustre}
%{!?build_lustre_tests: %define build_lustre_tests 1}
#%%global _use_internal_dependency_generator 0
%define is_client %(bash -c "if [[ %{lustre_name} = *-client ]]; then echo -n '1'; else echo -n '0'; fi")
-# for those uses that don't want the -smp/-bigsmp on the end of %kversion
-%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$//'")
+# for those uses that don't want the -smp/-bigsmp (or the .arch) on the end
+# of %kversion
+%define krequires %(bash -c "echo %{kversion} | sed -e 's/\.x86_64$//' -e 's/\.i[3456]86$//' -e 's/-smp$//' -e 's/-bigsmp$//' -e 's/-ppc64$//' -e 's/-default$//'")
%define sles10 %(bash -c "if [ "%sles_version" = "10" ]; then echo -n '1'; else echo -n '0'; fi")
Summary: Lustre File System
Name: %{lustre_name}
Version: %{version}
-Release: %{release}
+Release: %{fullrelease}
License: GPL
Group: Utilities/System
Source: lustre-%{version}.tar.gz
-URL: http://www.sun.com/software/products/lustre/index.xml
+URL: http://wiki.whamcloud.com/
BuildRoot: %{_tmppath}/lustre-%{version}-root
Obsoletes: lustre-lite, lustre-lite-utils, lustre-ldap nfs-utils-lustre
Provides: lustre-lite = %{version}, lustre-lite-utils = %{version}
%package modules
Summary: Kernel Lustre modules for Linux %{kversion}
-# for RHEL5 and SLES11, we need nothing here
+# for SLES11, we need nothing here
# for SLES10, we need (where %{flavor} is, i.e. smp):
%if %sles10
Requires: kernel-%{flavor}
+%else
+%if %{_vendor}=="redhat" || %{_vendor}=="fedora"
+# for RHEL we need to require the specific kernel still since weak-modules
+# support on RH is, well, weak, to be punny about it
+Requires: kernel = %{krequires}
+%endif
+%endif
+%if ! %{is_client}
+Requires: lustre-backend-fs
%endif
Group: Development/Kernel
This package contains a set of test binaries and scripts that are intended
to be used by the Lustre testing framework.
+%if 0%{?suse_version}
+%debug_package
+%endif
%prep
%setup -qn lustre-%{version}
ln lustre/ChangeLog ChangeLog-lustre
# override %optflags so that the vendor's overzealous flags don't create
# build failures
%define optflags -g -O2 -Werror
-CONFIGURE_ARGS=""
+CONFIGURE_ARGS="%{?configure_args} --with-release=%release"
%if %{build_lustre_tests}
CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-tests --enable-liblustre-tests"
%else
CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-tests --disable-liblustre-tests"
%endif
-%configure %{?configure_args:%configure_args} $CONFIGURE_ARGS
+
+# if %%kdir was given, make sure it's not in the configure arguments
+if [ -n "%kdir" ]; then
+ CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux=[^ ][^ ]* \?//')
+fi
+# ditto for %%kobjdir
+if [ -n "%kobjdir" ]; then
+ CONFIGURE_ARGS=$(echo $CONFIGURE_ARGS | sed -e 's/"\?--with-linux-obj=[^ ][^ ]* \?//')
+fi
+
+# we need to eval "configure" because $CONFIGURE_ARGS could have a quoted
+# string in it which we don't want word splitted by the shell
+%define eval_configure %(echo '%configure' | sed -e 's#\./configure#eval ./configure#')
+
+%eval_configure \
+ %{?kdir: --with-linux=%kdir} %{?kobjdir: --with-linux-obj=%kobjdir} \
+ $CONFIGURE_ARGS
make -j $RPM_BUILD_NCPUS -s
%install
%attr(-, root, root) %{_libdir}/libptlctl.a
%attr(-, root, root) %{_libdir}/liblustreapi.a
%attr(-, root, root) /usr/include/lustre
+%attr(-, root, root) /usr/include/libcfs
%attr(-, root, root) %{_mandir}/man?/*
%endif
pushd $RPM_BUILD_ROOT >/dev/null
+> $RPM_BUILD_DIR/lustre-%{version}/lustre-modules.files
find lib/modules/%{kversion}/updates -type f | awk "!/(ZZZZZZZZZZ$modules_excludes)/ {print \"%attr(-, root, root) /\"\$0}" >>$RPM_BUILD_DIR/lustre-%{version}/lustre-modules.files
popd >/dev/null
depmod -ae %{kversion} || exit 0
fi
+MODULES_RPM_NAME=$(rpm -q %{name}-modules | grep "%{version}-%{release}")
# "weak modules" support
# Suse
if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
+ rpm -ql $MODULES_RPM_NAME | grep '\.ko$' |
/usr/lib/module-init-tools/weak-modules --add-modules
fi
# RedHat
if [ -x /sbin/weak-modules ]; then
- rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' |
+ rpm -ql $MODULES_RPM_NAME | grep '\.ko$' |
/sbin/weak-modules --add-modules
fi
-cat <<EOF
-Congratulations on finishing your Lustre installation! To register
-your copy of Lustre and find out more about Lustre Support, Service,
-and Training offerings please visit
-
-http://www.sun.com/software/products/lustre/lustre_reg.jsp
-EOF
-
-# for update from < v1.4.6
-
-for f in /etc/modules.conf /etc/modprobe.conf /etc/modprobe.conf.local ;
-do
- if [ -f $f ]; then
- if grep 'lustre llite' $f >/dev/null 2>/dev/null ; then
- [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
- TMPFILE=`mktemp $f.XXXXXX` && \
- rm -f $TMPFILE && touch $TMPFILE && \
- grep -v 'lustre llite' $f >> $TMPFILE && \
- mv $TMPFILE $f
- fi
- if egrep "^[^#]*(add below|install) ptlrpc" $f ; then
- [ ! -f $f.rpmsave ] && cp $f $f.rpmsave
- TMPFILE=`mktemp $f.XXXXXX` && \
- rm -f $TMPFILE && touch $TMPFILE && \
- sed -e "s/^[^#]*\(add below\|install\) ptlrpc.*/#&/" $f >> $TMPFILE && \
- mv $TMPFILE $f
- fi
- fi
-done
-
# If the kernel was built to reject unsupported modules (e.g. not a Lustre
# kernel), and this hasn't been overridden in /etc/modprobe.d yet, then
# print a warning so that users are aware of this issue.
fi
%preun modules
-rpm -ql %{name}-modules-%{version}-%{release} | grep '\.ko$' > /var/run/%{name}-modules
+MODULES_RPM_NAME=$(rpm -q %{name}-modules | grep "%{version}-%{release}")
+rpm -ql $MODULES_RPM_NAME | grep '\.ko$' > /var/run/%{name}-modules || true
%postun modules
if [ -f /boot/System.map-%{kversion} ]; then
# "weak modules" support
# Suse
if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- cat /var/run/%{name}-modules | grep '\.ko$' |
+ cat /var/run/%{name}-modules |
/usr/lib/module-init-tools/weak-modules --remove-modules
fi
# RedHat
if [ -x /sbin/weak-modules ]; then
- cat /var/run/%{name}-modules | grep '\.ko$' |
+ cat /var/run/%{name}-modules |
/sbin/weak-modules --remove-modules
fi
rm /var/run/%{name}-modules