Add kmod repo integration
authorBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 27 Jul 2013 11:42:57 +0000 (04:42 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 1 Aug 2013 16:48:07 +0000 (09:48 -0700)
When the kmod packaging infrastructure was originally added the
dependency on the rpmfusion yum repositories was disabled.  This
was done at the time in favour of getting local builds working.

Now the time has come to conditionally re-enable that functionality
so we can properly provide binary kmod packages.

  ./configure --with-config=srpm
  make SRPM_DEFINE_KMOD='--define="repo rpmfusion"' srpm-kmod
  mock rebuild zfs-kmod-x.y.z-r.el6.src.rpm

One nice benefit of finishing this work is that the generic and
fedora spl-kmod spec files can be merged again.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
rpm/fedora/zfs-kmod.spec.in [changed from file to symlink]
rpm/generic/zfs-kmod.spec.in
scripts/kmodtool

deleted file mode 100644 (file)
index 88ab3b24b1d09df7f3ef30c029266865e87a0860..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,140 +0,0 @@
-%define module  @PACKAGE@
-%define repo    rpmfusion
-
-%define buildforkernels newest
-#define buildforkernels current
-#define buildforkernels akmod
-
-%bcond_with     debug
-%bcond_with     debug_dmu_tx
-
-
-Name:           %{module}-kmod
-
-Version:        @VERSION@
-Release:        @RELEASE@%{?dist}
-Summary:        Kernel module(s)
-
-Group:          System Environment/Kernel
-License:        @ZFS_META_LICENSE@
-URL:            http://zfsonlinux.org/
-Source0:        %{module}-%{version}.tar.gz
-Source10:       kmodtool
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-ExclusiveArch:  i586 i686 x86_64
-
-# Likely compiles but is not supported.
-ExcludeArch:    ppc ppc64
-
-# The developments headers will conflict with the dkms packages.
-Conflicts:      %{module}-dkms
-
-BuildRequires:  %{_bindir}/kmodtool
-BuildRequires:  spl-devel-kmod = %{version}-%{release}
-
-%global KmodsBuildRequires spl-devel-kmod
-%global KmodsRequires      kmod-spl
-
-%{!?kernels:BuildRequires: buildsys-build-rpmfusion-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu} }
-
-%if 0%{?fedora} >= 17
-%define prefix  /usr
-%endif
-
-# Kmodtool does its magic here.  A patched version of kmodtool is shipped
-# with the source rpm until kmod development packages are supported upstream.
-# https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714
-%{expand:%(sh %{SOURCE10} --target %{_target_cpu} --repo %{repo} --kmodname %{name} --devel %{?prefix:--prefix "%{?prefix}"} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) }
-
-
-%description
-This package contains the ZFS kernel modules.
-
-%prep
-# Error out if there was something wrong with kmodtool.
-%{?kmodtool_check}
-
-# Print kmodtool output for debugging purposes:
-sh %{SOURCE10}  --target %{_target_cpu}  --repo %{repo} --kmodname %{name} --devel %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null
-
-%if %{with debug}
-    %define debug --enable-debug
-%else
-    %define debug --disable-debug
-%endif
-
-%if %{with debug_dmu_tx}
-    %define debug_dmu_tx --enable-debug-dmu-tx
-%else
-    %define debug_dmu_tx --disable-debug-dmu-tx
-%endif
-
-#
-# Allow the overriding of spl locations
-#
-%if %{defined require_splver}
-%define splver %{require_splver}
-%else
-%define splver %{version}
-%endif
-
-%if %{defined require_spldir}
-%define spldir %{require_spldir}
-%else
-%define spldir %{_usrsrc}/spl-%{splver}
-%endif
-
-%if %{defined require_splobj}
-%define splobj %{require_splobj}
-%else
-%define splobj %{spldir}/${kernel_version%%___*}
-%endif
-
-
-# Leverage VPATH from configure to avoid making multiple copies.
-%define _configure ../%{module}-%{version}/configure
-
-%setup -q -c -T -a 0
-
-for kernel_version in %{?kernel_versions}; do
-    %{__mkdir} _kmod_build_${kernel_version%%___*}
-done
-
-%build
-for kernel_version in %{?kernel_versions}; do
-    pushd _kmod_build_${kernel_version%%___*}
-    %configure \
-        --with-config=kernel \
-        --with-linux="${kernel_version##*___}" \
-        --with-linux-obj="${kernel_version##*___}" \
-        --with-spl="%{spldir}" \
-        --with-spl-obj="%{splobj}" \
-        %{debug} \
-        %{debug_dmu_tx}
-    make %{?_smp_mflags}
-    popd
-done
-
-
-%install
-rm -rf ${RPM_BUILD_ROOT}
-
-# Relies on the kernel 'modules_install' make target.
-for kernel_version in %{?kernel_versions}; do
-    pushd _kmod_build_${kernel_version%%___*}
-    make install \
-        DESTDIR=${RPM_BUILD_ROOT} \
-        %{?prefix:INSTALL_MOD_PATH=%{?prefix}} \
-        INSTALL_MOD_DIR=%{kmodinstdir_postfix}
-    popd
-done
-chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/*
-%{?akmod_install}
-
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%changelog
-* Fri Mar 22 2013 Brian Behlendorf <behlendorf1@llnl.gov> - 0.6.1-1
-- First official stable release.
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..af19ecde0058e44fc98b1d671f6d50154f5aa4d2
--- /dev/null
@@ -0,0 +1 @@
+../generic/zfs-kmod.spec.in
\ No newline at end of file
index cec3f3f..2ea4bcb 100644 (file)
@@ -1,4 +1,11 @@
 %define module  @PACKAGE@
+#define repo    rpmfusion
+#define repo    chaos
+
+# (un)define the next line to either build for the newest or all current kernels
+%define buildforkernels newest
+#define buildforkernels current
+#define buildforkernels akmod
 
 %bcond_with     debug
 %bcond_with     debug_dmu_tx
@@ -20,18 +27,20 @@ BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n)
 # The developments headers will conflict with the dkms packages.
 Conflicts:      %{module}-dkms
 
-# Source packages minimally require a kernel-devel dependency.
+%if %{defined repo}
+
+# Building for a repository use the proper build-sysbuild package
+# to determine which kernel-devel packages should be installed.
+BuildRequires:  %{_bindir}/kmodtool
+%{!?kernels:BuildRequires: buildsys-build-%{repo}-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu}}
+
+%else
+
+# Building local packages attempt to to use the installed kernel.
 %{?rhel:BuildRequires: kernel-devel}
 %{?fedora:BuildRequires: kernel-devel}
 %{?suse_version:BuildRequires: kernel-source}
 
-%if 0%{?rhel}%{?fedora}%{?suse_version}
-BuildRequires:             spl-devel-kmod = %{version}
-%global KmodsBuildRequires spl-devel-kmod
-%global KmodsRequires      kmod-spl
-%endif
-
-# Binary packages build against all installed kernels by default.
 %if !%{defined kernels} && !%{defined build_src_rpm}
     %if 0%{?rhel}%{?fedora}%{?suse_version}
         %define kernels %(ls -1 /usr/src/kernels)
@@ -39,6 +48,14 @@ BuildRequires:             spl-devel-kmod = %{version}
         %define kernels %(ls -1 /lib/modules)
     %endif
 %endif
+%endif
+
+%if 0%{?rhel}%{?fedora}%{?suse_version}
+BuildRequires:             kmod-spl-devel = %{version}
+%global KmodsRequires      kmod-spl
+%global KmodsDevelRequires kmod-spl-devel
+%global KmodsMetaRequires  spl-kmod
+%endif
 
 %if 0%{?fedora} >= 17
 %define prefix  /usr
@@ -47,7 +64,7 @@ BuildRequires:             spl-devel-kmod = %{version}
 # Kmodtool does its magic here.  A patched version of kmodtool is shipped
 # with the source rpm until kmod development packages are supported upstream.
 # https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714
-%{expand:%(bash %{SOURCE10} --target %{_target_cpu} --kmodname %{name} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) }
+%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) }
 
 
 %description
@@ -58,7 +75,7 @@ This package contains the ZFS kernel modules.
 %{?kmodtool_check}
 
 # Print kmodtool output for debugging purposes:
-bash %{SOURCE10}  --target %{_target_cpu}  --repo %{repo} --kmodname %{name} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null
+bash %{SOURCE10}  --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null
 
 %if %{with debug}
     %define debug --enable-debug
index 6b73780..852ade0 100755 (executable)
@@ -155,9 +155,6 @@ Provides:         ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
 Requires:         ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version}
 Requires(post):   ${prefix}/sbin/depmod
 Requires(postun): ${prefix}/sbin/depmod
-%{?KmodsRequires:Requires: %{KmodsRequires}-uname-r = ${kernel_uname_r}}
-%{?KmodsBuildRequires:BuildRequires: %{KmodsBuildRequires}-uname-r = ${kernel_uname_r}}
-%{?KmodsBuildRequires:BuildRequires: %{KmodsBuildRequires}}
 EOF
 
        if [[ ${obsolete_name} ]]; then
@@ -170,6 +167,8 @@ EOF
             cat <<EOF
 Requires:         kernel-uname-r = ${kernel_uname_r}
 BuildRequires:   kernel-devel-uname-r = ${kernel_uname_r}
+%{?KmodsRequires:Requires: %{KmodsRequires}-uname-r = ${kernel_uname_r}}
+%{?KmodsRequires:BuildRequires: %{KmodsRequires}-uname-r = ${kernel_uname_r}}
 %post          -n kmod-${kmodname}-${kernel_uname_r}
 ${prefix}/sbin/depmod -aeF /boot/System.map-${kernel_uname_r} ${kernel_uname_r} > /dev/null || :
 %postun        -n kmod-${kmodname}-${kernel_uname_r}
@@ -202,15 +201,38 @@ EOF
 
 print_rpmtemplate_kmoddevelpkg ()
 {
+       if [[ "${1}" == "--custom" ]]; then
+               shift
+               local customkernel=true
+       elif [[ "${1}" == "--redhat" ]]; then
+               shift
+               local redhatkernel=true
+       fi
+
+       local kernel_uname_r=${1}
+
        cat <<EOF
 %package       -n kmod-${kmodname}-devel
 Summary:          ${kmodname} kernel module(s) devel common
 Group:            System Environment/Kernel
-Provides:         ${kmodname}-devel-kmod-common = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides:         ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
+EOF
+
+       if [[ ! ${customkernel} ]] && [[ ! ${redhatkernel} ]]; then
+               echo "Requires:        kmod-${kmodname}-devel-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}"
+       fi
 
+       if [[ ${obsolete_name} ]]; then
+               echo "Provides:        kmod-${obsolete_name}-devel = ${obsolete_version}"
+               echo "Obsoletes:       kmod-${obsolete_name}-devel < ${obsolete_version}"
+       fi
+
+       cat <<EOF
 %description  -n kmod-${kmodname}-devel
 This package provides the common header files to build kernel modules
-which depend on the ${kmodname} kernel module.
+which depend on the ${kmodname} kernel module.  It may optionally require
+the ${kmodname}-devel-<kernel> objects for the newest kernel.
+
 %files        -n kmod-${kmodname}-devel
 %defattr(644,root,root,755)
 %{_usrsrc}/${kmodname}-%{version}
@@ -239,23 +261,32 @@ print_rpmtemplate_per_kmoddevelpkg ()
        local kernel_uname_r=${1}
        local kernel_variant="${2:+-${2}}"
 
+       # first part
        cat <<EOF
 %package       -n kmod-${kmodname}-devel-${kernel_uname_r}
 Summary:          ${kmodname} kernel module(s) devel for ${kernel_uname_r}
 Group:            System Environment/Kernel
-Requires:         ${kmodname}-devel-kmod-common = %{?epoch:%{epoch}:}%{version}-%{release}
+Provides:         kernel-objects-for-kernel = ${kernel_uname_r}
 Provides:         ${kmodname}-devel-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
-Provides:         ${kmodname}-devel-kmod-uname-r = ${kernel_uname_r}
+Provides:         kmod-${kmodname}-devel-uname-r = ${kernel_uname_r}
 EOF
 
+       if [[ ${obsolete_name} ]]; then
+               echo "Provides:        kmod-${obsolete_name}-devel-${kernel_uname_r} = ${obsolete_version}"
+               echo "Obsoletes:       kmod-${obsolete_name}-devel-${kernel_uname_r} < ${obsolete_version}"
+       fi
+
        # second part
        if [[ ! "${customkernel}" ]]; then
                cat <<EOF
-Requires:         kernel-uname-r = ${kernel_uname_r}
+Requires:         kernel-devel-uname-r = ${kernel_uname_r}
 BuildRequires:    kernel-devel-uname-r = ${kernel_uname_r}
+%{?KmodsDevelRequires:Requires: %{KmodsDevelRequires}-uname-r = ${kernel_uname_r}}
+%{?KmodsDevelRequires:BuildRequires: %{KmodsDevelRequires}-uname-r = ${kernel_uname_r}}
 EOF
        fi
 
+       # third part
        cat <<EOF
 %description  -n kmod-${kmodname}-devel-${kernel_uname_r}
 This package provides objects and symbols required to build kernel modules
@@ -281,8 +312,9 @@ Group:           System Environment/Kernel
 
 Provides:        ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
 Requires:        kmod-${kmodname}-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}
+%{?KmodsMetaRequires:Requires: %{?KmodsMetaRequires}}
 EOF
-       
+
                if [[ ${obsolete_name} ]]; then
                        echo "Provides:        kmod-${obsolete_name}${kernel_variant} = ${obsolete_version}"
                        echo "Obsoletes:       kmod-${obsolete_name}${kernel_variant} < ${obsolete_version}"
@@ -316,6 +348,10 @@ print_customrpmtemplate ()
 
                        # create development package
                        if [[ "${devel}" ]]; then
+                               # create devel package including common headers
+                               print_rpmtemplate_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}}
+
+                               # create devel package
                                print_rpmtemplate_per_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}}
                        fi
                elif [[ -e ${prefix}/lib/modules/"${kernel}"/build/Makefile ]] ; then 
@@ -327,6 +363,10 @@ print_customrpmtemplate ()
 
                        # create development package
                        if [[ "${devel}" ]]; then
+                               # create devel package including common headers
+                               print_rpmtemplate_kmoddevelpkg --custom "${kernel}"
+
+                               # create devel package
                                print_rpmtemplate_per_kmoddevelpkg --custom "${kernel}"
                        fi
                else
@@ -334,11 +374,6 @@ print_customrpmtemplate ()
                fi
        done
 
-       # create common development package
-       if [[ "${devel}" ]]; then
-               print_rpmtemplate_kmoddevelpkg "${1}"
-       fi
-
        # well, it's no header anymore, but who cares ;-)
        print_rpmtemplate_header
 }
@@ -366,16 +401,14 @@ print_rpmtemplate ()
                # create package
                print_rpmtemplate_per_kmodpkg ${kernel} ${kernel##${kernel_verrelarch}}
 
-               # create development package
                if [[ "${devel}" ]]; then
+                       # create devel package including common headers
+                       print_rpmtemplate_kmoddevelpkg ${kernel} ${kernel##${kernel_verrelarch}}
+
+                       # create devel package
                        print_rpmtemplate_per_kmoddevelpkg ${kernel} ${kernel##${kernel_verrelarch}}
                fi
        done
-
-       # create common development package
-       if [[ "${devel}" ]]; then
-               print_rpmtemplate_kmoddevelpkg "${1}"
-       fi
 }
 
 myprog_help ()