]> git.proxmox.com Git - mirror_spl.git/commitdiff
Add kmod repo integration
authorBrian Behlendorf <behlendorf1@llnl.gov>
Sat, 27 Jul 2013 09:37:38 +0000 (02:37 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 1 Aug 2013 17:27:34 +0000 (10:27 -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 spl-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/spl-kmod.spec.in [changed from file to symlink]
rpm/generic/spl-kmod.spec.in
scripts/kmodtool

deleted file mode 100644 (file)
index 79e1f9d9f214aadc80dacc800ac93624da0b870c..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,138 +0,0 @@
-%define module  @PACKAGE@
-%define repo    rpmfusion
-
-%define buildforkernels newest
-#define buildforkernels current
-#define buildforkernels akmod
-
-%bcond_with     debug
-%bcond_with     debug_log
-%bcond_with     debug_kmem
-%bcond_with     debug_kmem_tracking
-%bcond_with     atomic_spinlocks
-
-
-Name:           %{module}-kmod
-
-Version:        @VERSION@
-Release:        @RELEASE@%{?dist}
-Summary:        Kernel module(s)
-
-Group:          System Environment/Kernel
-License:        GPLv2+
-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
-
-%if 0%{?fedora} >= 17
-%define prefix  /usr
-%endif
-
-%{!?kernels:BuildRequires: buildsys-build-rpmfusion-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu} }
-
-# 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 kernel modules required to emulate
-several interfaces provided by the Solaris kernel.
-
-%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_log}
-    %define debug_log --enable-debug-log
-%else
-    %define debug_log --disable-debug-log
-%endif
-
-%if %{with debug_kmem}
-    %define debug_kmem --enable-debug-kmem
-%else
-    %define debug_kmem --disable-debug-kmem
-%endif
-
-%if %{with debug_kmem_tracking}
-    %define debug_kmem_tracking --enable-debug-kmem-tracking
-%else
-    %define debug_kmem_tracking --disable-debug-kmem-tracking
-%endif
-
-%if %{with atomic_spinlocks}
-    %define atomic_spinlocks --enable-atomic-spinlocks
-%else
-    %define atomic_spinlocks --disable-atomic-spinlocks
-%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##*___}" \
-        %{debug} \
-        %{debug_log} \
-        %{debug_kmem} \
-        %{debug_kmem_tracking} \
-        %{atomic_spinlocks}
-    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..311c24d8437eeaea79325bbd942c7a3e3b66f6da
--- /dev/null
@@ -0,0 +1 @@
+../generic/spl-kmod.spec.in
\ No newline at end of file
index 1b0a6f1ecb4f29250d8343ec3ab6a3ce0a2c4b63..635b81872535ecb1a8cce600e45df6b1b2f65ff8 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_log
@@ -23,12 +30,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}
 
-# 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)
@@ -36,6 +51,7 @@ Conflicts:      %{module}-dkms
         %define kernels %(ls -1 /lib/modules)
     %endif
 %endif
+%endif
 
 %if 0%{?fedora} >= 17
 %define prefix  /usr
@@ -44,7 +60,7 @@ Conflicts:      %{module}-dkms
 # Kmodtool does its magic here.  A patched version of kmodtool is shipped
 # because the latest versions may not be available for your distribution.
 # 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
@@ -56,7 +72,7 @@ several interfaces provided by the Solaris kernel.
 %{?kmodtool_check}
 
 # Print kmodtool output for debugging purposes:
-bash %{SOURCE10} --target %{_target_cpu}  --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 6b73780980e95d91d58188810683d254df2ed586..852ade021d3c8a509deb929e6ca8872875e128f9 100644 (file)
@@ -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 ()