# as an alternative to this implementation we could simply "make -C $kdir kernelversion"
%{!?kversion: %global kversion %(files="include/generated/utsrelease.h include/linux/utsrelease.h include/linux/version.h"; for f in $files; do if test -r %{kobjdir}/$f && grep UTS_RELEASE %{kobjdir}/$f >/dev/null; then sed -ne '/^#define UTS_RELEASE/s/.*"\\(.*\\)"$/\\1/p' %{kobjdir}/$f; break; fi; done)}
+# We set this because kernel_module_package has its own method of identifying
+# which kernel to build against, and it is unlikely that its decision will
+# match with Lustre's method of selecting which kernel to build against.
+# By setting this variable, we override kernel_module_package's kernel
+# selection with our selection.
+%{!?kernel_version: %global kernel_version %kversion}
+
%if 0%{?build_src_rpm}
%{!?myrelease: %global myrelease 1}
%else
%endif
%endif
+%global modules_fs_path /lib/modules/%{kversion}/%{kmoddir}
+
+%if %{_vendor}=="redhat" || %{_vendor}=="fedora"
+ %global requires_kmod_name kmod-%{lustre_name}
+ %global requires_kmod_version %{version}
+%else #for Suse
+ %global requires_kmod_name %{lustre_name}-kmp
+ %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
+%endif
+
Summary: Lustre File System
Name: %{lustre_name}
Version: %{version}
License: GPL
Group: Utilities/System
Source: lustre-%{version}.tar.gz
+Source1: kmp-lustre.preamble
+Source2: kmp-lustre.files
+Source3: kmp-lustre-osd-ldiskfs.preamble
+Source4: kmp-lustre-osd-ldiskfs.files
+Source5: kmp-lustre-osd-zfs.preamble
+Source6: kmp-lustre-osd-zfs.files
+Source7: kmp-lustre-tests.files
URL: https://wiki.hpdd.intel.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}
-Requires: %{name}-modules = %{version}
+Requires: %{requires_kmod_name} = %{requires_kmod_version}
BuildRequires: libtool
%if %{with servers}
Requires: lustre-osd
BuildRequires: libselinux-devel
Requires: libselinux
%endif
+%if %{with lustre_modules}
+%if %{_vendor}=="redhat"
+BuildRequires: redhat-rpm-config
+%endif
+%endif
%description
Userspace tools and files for the Lustre file system.
%if %{with lustre_modules}
-%package modules
-Summary: Kernel Lustre modules for Linux %{kversion}
-# for SLES11, we need nothing here
-%if %{_vendor}=="redhat" || %{_vendor}=="fedora"
-%if %{defined krequires}
-# 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
-%if %{with lnet_dlc}
-Requires: libyaml
-BuildRequires: libyaml-devel
-%endif
-%endif
-Group: Development/Kernel
+%kernel_module_package_buildreqs
-%description modules
-Lustre file system, server and network drivers for Linux %{kversion}.
+# Lustre modules
+%kernel_module_package -n %{name} -p %SOURCE1 -f %SOURCE2 default
%if %{with ldiskfs}
-%package osd-ldiskfs
-Summary: osd-ldiskfs contains both ldiskfs and its osd interface in Lustre.
-Requires: lustre-modules = %{version}
-Requires: module-init-tools >= 3.9
-Requires: ldiskfsprogs >= 1.42.7.wc1
-Requires: lustre-osd-ldiskfs-mount = %{version}
-Provides: lustre-osd
-Obsoletes: lustre-ldiskfs
-Group: Development/Kernel
-
-%description osd-ldiskfs
-The Lustre Object Storage Device (OSD) API is the interface to access and
-modify data that is supposed to be stored persistently. This API is the interface
-to code that bridges individual file systems. This specific package provides an
-implementation of the OSD API for using the Ldiskfs filesystem as the underlying
-backing store of a Lustre server.
-
+%kernel_module_package -n %{name}-osd-ldiskfs -p %SOURCE3 -f %SOURCE4 default
%if %{with lustre_utils}
%package osd-ldiskfs-mount
Summary: osd-ldiskfs-mount contains mount's ldiskfs specific dso.
%description osd-ldiskfs-mount
LDISKFS hooks for mount/mkfs into a dynamic library.
-%endif
-%endif
+%endif # with lustre_utils
+%endif # with ldiskfs
%if %{with zfs}
-%package osd-zfs
-Summary: osd-zfs is the mandatory glue for ZFS support in Lustre.
-Requires: lustre-modules = %{version}, zfs-kmod
-Requires: lustre-osd-zfs-mount = %{version}
-Provides: lustre-osd
-Group: Development/Kernel
-
-%description osd-zfs
-The Lustre Object Storage Device (OSD) API is the interface to access and
-modify data that is supposed to be stored persistently. This API is the interface
-to code that bridges individual file systems. This specific package provides an
-implementation of the OSD API for using the ZFS filesystem as the underlying
-backing store of a Lustre server.
-
+%kernel_module_package -n %{name}-osd-zfs -p %SOURCE5 -f %SOURCE6 default
%if %{with lustre_utils}
%package osd-zfs-mount
Summary: osd-zfs-mount contains mount's zfs specific dso.
%description osd-zfs-mount
ZFS hooks for mount/mkfs into a dynamic library.
-%endif
-%endif
+%endif # with lustre_utils
+%endif # with zfs
+
%endif # with lustre_modules
# Since the RPMs we ship are to be used on both SLES and RHEL, we
Summary: Lustre testing framework
Group: Development/Kernel
Provides: %{name}-tests = %{version}
-Requires: %{name} = %{version}, %{name}-modules = %{version}, lustre-iokit
+Requires: %{name} = %{version}, %{requires_kmod_name} = %{requires_kmod_version}, lustre-iokit
Requires: attr, rsync, perl, lsof, /usr/bin/getconf
%description tests
This package contains a set of test binaries and scripts that are intended
to be used by the Lustre testing framework.
+%if %{with lustre_modules}
+%kernel_module_package -n %{name}-tests -f %SOURCE7 default
+%endif
+
%if %{with lustre_iokit}
%package -n lustre-iokit
Summary: The Lustre IO-Kit is a collection of benchmark tools for a cluster with the Lustre file system.
# string in it which we don't want word splitted by the shell
# also remove (build|host|target) options because they will be specified
# inside $CONFIGURE_ARGS
+# kmod tools/scripts require %{name} directory with kernel modules
%define eval_configure %(echo '%configure' | sed -e 's#\./configure#eval ./configure#' -e 's/--\\(build\\|host\\|target\\)=[^ ][^ ]* //g')
%eval_configure $CONFIGURE_ARGS \
--with-release=%{release} \
--with-linux=%{kdir} \
--with-linux-obj=%{kobjdir} \
- --with-kmp-moddir=%{kmoddir}
+ --with-kmp-moddir=%{kmoddir}/%{name}
make %{?_smp_mflags} -s %{?make_args}
%install
make install DESTDIR=$RPM_BUILD_ROOT
+# RHEL's kernel_module_path macro expects that all the modules
+# in a kmod package will be in modules_fs_path/<sub packagename>
+# but Lustre installs all of the modules in a single pass into
+# a shared location. Since this is a restriction imposed by
+# RHEL, we handle this here in the spec file rather than in
+# Lustre's build system. This is not expected to bother SLES's
+# kernel_module_path macro.
+basemodpath=$RPM_BUILD_ROOT%{modules_fs_path}/%{lustre_name}
+%if %{with ldiskfs}
+mkdir -p $basemodpath-osd-ldiskfs/fs
+mv $basemodpath/fs/osd_ldiskfs.ko $basemodpath-osd-ldiskfs/fs/osd_ldiskfs.ko
+mv $basemodpath/fs/ldiskfs.ko $basemodpath-osd-ldiskfs/fs/ldiskfs.ko
+%endif
+%if %{with zfs}
+mkdir -p $basemodpath-osd-zfs/fs
+mv $basemodpath/fs/osd_zfs.ko $basemodpath-osd-zfs/fs/osd_zfs.ko
+%endif
+%if %{with lustre_tests}
+mkdir -p $basemodpath-tests/fs
+mv $basemodpath/fs/llog_test.ko $basemodpath-tests/fs/llog_test.ko
+%endif
+
:> lustre.files
%if %{with servers} && %{with lustre_utils}
echo '%{_bindir}/req_layout' >>lustre-tests.files
echo '%{_sbindir}/wirecheck' >>lustre-tests.files
echo '%{_sbindir}/wiretest' >>lustre-tests.files
-%if %{with lustre_modules}
-echo '/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/llog_test.ko' >>lustre-tests.files
-%endif
%endif
%files -f lustre.files
%config(noreplace) %{_sysconfdir}/modprobe.d/ko2iblnd.conf
%if %{with lustre_modules}
-%files modules
-%defattr(-,root,root)
-/lib/modules/%{kversion}/%{kmoddir}/*
-%if %{with lustre_tests}
-%exclude /lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/llog_test.ko
-%endif
-%if %{with ldiskfs}
-%exclude /lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/ldiskfs.ko
-%exclude /lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/osd_ldiskfs.ko
-%endif
-%if %{with zfs}
-%exclude /lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/osd_zfs.ko
-%endif
-%doc COPYING
-%doc ChangeLog-lustre
-%doc ChangeLog-lnet
%if %{with ldiskfs}
-%files osd-ldiskfs
-%defattr(-,root,root)
-/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/ldiskfs.ko
-/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/osd_ldiskfs.ko
%if %{with lustre_utils}
%files osd-ldiskfs-mount
%defattr(-,root,root)
%endif
%if %{with zfs}
-%files osd-zfs
-%defattr(-,root,root)
-/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/osd_zfs.ko
-%{_sbindir}/zfsobj2fid
%if %{with lustre_utils}
%files osd-zfs-mount
%defattr(-,root,root)
%{_libdir}/@PACKAGE@/mount_osd_zfs.so
%endif
%endif
+
%endif # with lustre_modules
# uncomment these lines to enable deps packages
%doc lustre-iokit/stats-collect/README.iokit-lstats
%endif
-%if %{with lustre_modules}
-%post modules
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- 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 $MODULES_RPM_NAME | grep '\.ko$' |
- /usr/lib/module-init-tools/weak-modules --add-modules
-fi
-# RedHat
-if [ -x /sbin/weak-modules ]; then
- rpm -ql $MODULES_RPM_NAME | grep '\.ko$' |
- /sbin/weak-modules --add-modules
-fi
-
-# 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.
-if sysctl kernel.unsupported >/dev/null 2>&1 &&
- [ "$(sysctl -n kernel.unsupported 2>/dev/null)" = "0" ] &&
- ! modprobe -c | grep -q "^allow_unsupported_modules[ \t]1" ; then
- echo "
- warning: the Lustre modules are not supported by Novell. To use Lustre
- on this system, you should put
-
- allow_unsupported_modules 1
-
- into /etc/modprobe.d/unsupported_modules"
-fi
-
-%if %{with ldiskfs}
-%post osd-ldiskfs
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-
-OSD_LDISKFS_RPM_NAME=$(rpm -q %{name}-osd-ldiskfs | grep "%{version}-%{release}")
-# "weak modules" support
-# Suse
-if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- rpm -ql $OSD_LDISKFS_RPM_NAME | grep '\.ko$' |
- /usr/lib/module-init-tools/weak-modules --add-modules
-fi
-# RedHat
-if [ -x /sbin/weak-modules ]; then
- rpm -ql $OSD_LDISKFS_RPM_NAME | grep '\.ko$' |
- /sbin/weak-modules --add-modules
-fi
-
-# 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.
-if sysctl kernel.unsupported >/dev/null 2>&1 &&
- [ "$(sysctl -n kernel.unsupported 2>/dev/null)" = "0" ] &&
- ! modprobe -c | grep -q "^allow_unsupported_modules[ \t]1" ; then
- echo "
- warning: the Lustre modules are not supported by Novell. To use Lustre
- on this system, you should put
-
- allow_unsupported_modules 1
-
- into /etc/modprobe.d/unsupported_modules"
-fi
-%endif
-
-%if %{with zfs}
-%post osd-zfs
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-
-OSD_ZFS_RPM_NAME=$(rpm -q %{name}-osd-zfs | grep "%{version}-%{release}")
-# "weak modules" support
-# Suse
-if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- rpm -ql $OSD_ZFS_RPM_NAME | grep '\.ko$' |
- /usr/lib/module-init-tools/weak-modules --add-modules
-fi
-# RedHat
-if [ -x /sbin/weak-modules ]; then
- rpm -ql $OSD_ZFS_RPM_NAME | grep '\.ko$' |
- /sbin/weak-modules --add-modules
-fi
-
-# 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.
-if sysctl kernel.unsupported >/dev/null 2>&1 &&
- [ "$(sysctl -n kernel.unsupported 2>/dev/null)" = "0" ] &&
- ! modprobe -c | grep -q "^allow_unsupported_modules[ \t]1" ; then
- echo "
- warning: the Lustre modules are not supported by Novell. To use Lustre
- on this system, you should put
-
- allow_unsupported_modules 1
-
- into /etc/modprobe.d/unsupported_modules"
-fi
-%endif
-
-%preun modules
-MODULES_RPM_NAME=$(rpm -q %{name}-modules | grep "%{version}-%{release}")
-rpm -ql $MODULES_RPM_NAME | grep '\.ko$' > /var/run/%{name}-modules || true
-
-%if %{with ldiskfs}
-%preun osd-ldiskfs
-OSD_LDISKFS_RPM_NAME=$(rpm -q %{name}-osd-ldiskfs | grep "%{version}-%{release}")
-rpm -ql $OSD_LDISKFS_RPM_NAME | grep '\.ko$' > /var/run/%{name}-osd-ldiskfs || true
-%endif
-
-%if %{with zfs}
-%preun osd-zfs
-OSD_ZFS_RPM_NAME=$(rpm -q %{name}-osd-zfs | grep "%{version}-%{release}")
-rpm -ql $OSD_ZFS_RPM_NAME | grep '\.ko$' > /var/run/%{name}-osd-zfs || true
-%endif
-
-%postun modules
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-
-# "weak modules" support
-# Suse
-if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- 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 |
- /sbin/weak-modules --remove-modules
-fi
-rm /var/run/%{name}-modules
-
-%if %{with ldiskfs}
-%postun osd-ldiskfs
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-
-# "weak modules" support
-# Suse
-if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- cat /var/run/%{name}-osd-ldiskfs |
- /usr/lib/module-init-tools/weak-modules --remove-modules
-fi
-# RedHat
-if [ -x /sbin/weak-modules ]; then
- cat /var/run/%{name}-osd-ldiskfs |
- /sbin/weak-modules --remove-modules
-fi
-rm /var/run/%{name}-osd-ldiskfs
-%endif
-
-%if %{with zfs}
-%postun osd-zfs
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-
-# "weak modules" support
-# Suse
-if [ -x /usr/lib/module-init-tools/weak-modules ]; then
- cat /var/run/%{name}-osd-zfs |
- /usr/lib/module-init-tools/weak-modules --remove-modules
-fi
-# RedHat
-if [ -x /sbin/weak-modules ]; then
- cat /var/run/%{name}-osd-zfs |
- /sbin/weak-modules --remove-modules
-fi
-rm /var/run/%{name}-osd-zfs
-%endif
-%endif # with lustre_modules
-
-%if %{with lustre_tests}
-%if %{with lustre_modules}
-%post tests
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-
-%postun tests
-if [ -f /boot/System.map-%{kversion} ]; then
- depmod -ae -F /boot/System.map-%{kversion} %{kversion} || exit 0
-else
- depmod -ae %{kversion} || exit 0
-fi
-%endif
-%endif
-
%clean
rm -rf $RPM_BUILD_ROOT
+rm -rf %{_tmppath}/kmp