Whamcloud - gitweb
LU-8343 build: fix kmod_version on SLES 12
[fs/lustre-release.git] / lustre.spec.in
index 337c80c..c2b6ce1 100644 (file)
 # 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
+       %if 0%{?suse_version} >= 1200
+               %global requires_kmod_version %{version}_k%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
+       %else
+               %global requires_kmod_version %{version}_%(echo %{krequires} | sed -r 'y/-/_/; s/^(2\.6\.[0-9]+)_/\\1.0_/;')
+       %endif
+%endif
+
 Summary: Lustre File System
 Name: %{lustre_name}
 Version: %{version}
@@ -87,11 +108,18 @@ Release: %{fullrelease}
 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
@@ -104,48 +132,23 @@ Provides: lustre-client = %{version}-%{fullrelease}
 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.
@@ -155,24 +158,11 @@ Group: Development/Kernel
 %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.
@@ -182,16 +172,10 @@ Group: Development/Kernel
 %description osd-zfs-mount
 ZFS hooks for mount/mkfs into a dynamic library.
 
-%endif
-%endif
-%endif # with lustre_modules
-
-%package source
-Summary: Object-Based Disk storage driver source
-Group: Development/Kernel
+%endif # with lustre_utils
+%endif # with zfs
 
-%description source
-Lustre sources for further development
+%endif # with lustre_modules
 
 # Since the RPMs we ship are to be used on both SLES and RHEL, we
 # can't include any dependency information (since the package names
@@ -232,13 +216,17 @@ systems.
 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.
@@ -305,6 +293,7 @@ fi
 # 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 \
@@ -322,13 +311,35 @@ fi
        --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}
@@ -344,19 +355,13 @@ echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
 # The following scripts are Red Hat specific
 %if %{with servers}
 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
+echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
 %endif
 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
 %endif
 
-# Create the pristine source directory.
-cd $RPM_BUILD_DIR/lustre-%{version}
-mkdir -p $RPM_BUILD_ROOT%{_prefix}/src
-rm -f lustre-source
-ln -s $RPM_BUILD_ROOT%{_prefix}/src lustre-source
-make distdir distdir=lustre-source/lustre-%{version}
-chmod -R go-w lustre-source/lustre-%{version}
 # fc18 needs 'x' permission for library files
 find $RPM_BUILD_ROOT -name \*.so -type f -exec chmod +x {} \;
 
@@ -382,6 +387,11 @@ fi
 find $RPM_BUILD_ROOT%{_libdir}/@PACKAGE@ \
     -name \*.la -type f -exec rm -f {} \;
 
+%if %{with lustre_modules}
+# mark modules executable for find-debuginfo.sh
+find $RPM_BUILD_ROOT/lib/modules -name \*.ko -type f -exec chmod u+x {} \;
+%endif
+
 %if %{with lustre_tests}
 echo '%{_libdir}/lustre/tests/*' >>lustre-tests.files
 echo '%{_bindir}/mcreate' >>lustre-tests.files
@@ -389,9 +399,6 @@ echo '%{_bindir}/munlink' >>lustre-tests.files
 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
@@ -432,28 +439,8 @@ echo '/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/llog_test.ko' >>lu
 %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)
@@ -462,21 +449,14 @@ echo '/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/llog_test.ko' >>lu
 %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
 
-%files source
-%defattr(-,root,root)
-%{_prefix}/src/lustre-%{version}
+%endif # with lustre_modules
 
 # uncomment these lines to enable deps packages
 # %files deps-sles
@@ -511,214 +491,6 @@ echo '/lib/modules/%{kversion}/%{kmoddir}/kernel/fs/@PACKAGE@/llog_test.ko' >>lu
 %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