Set strict dependency on kernel version 07/7107/2
authorLuca Boccassi <luca.boccassi@gmail.com>
Mon, 12 Jun 2017 14:52:53 +0000 (15:52 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 12 Jun 2017 17:00:59 +0000 (18:00 +0100)
The in-kernel API/ABI is (intentionally) not stable, so the binary
kernel modules package must strictly depend on the same kernel that
it was built against.

Change-Id: I85cd6d465678e7693fb33659e3b4525730992cb0
Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com>
debian/control.modules.in
debian/prep-modules

index dd1d9f8..8814154 100644 (file)
@@ -1,8 +1,8 @@
 Package: dpdk-modules-#KVERS#
 Section: kernel
 Architecture: amd64 arm64 i386
+Depends: linux-image-#KVERS# #KDREV#
 Provides: dpdk-modules
-Recommends: linux-image-#KVERS#
 Conflicts: dpdk-igb-uio-dkms, dpdk-rte-kni-dkms
 Built-Using: ${built:using:kernel}
 Description: Data Plane Development Kit (rte kni, igb uio modules)
index 3e1f9f8..0caf81e 100755 (executable)
 #    in the Debian kernel package names (in other words, the ABI version, not
 #    the package version).
 #
-#  * Make the package recommend linux-image-$(KVERS) as appropriate for the
-#    kernel version that we're building against.  Use recommend rather than
-#    depends since the user may have built their own kernel outside of the
-#    Debian package infrastructure.
+#  * Make the package depend on linux-image-$(KVERS) (= version) as appropriate
+#    for the kernel version that we're building against.  Use depend as the
+#    kernel ABI is not stable and it's not guaranteed that a module built
+#    against a version of the headers will work under a different kernel.
 #
 #  * Save the version number of the binary package in debian/VERSION for later
 #    use by dh_gencontrol.  This will be the version number of the source
@@ -79,7 +79,12 @@ elif [ ! -f "$changelog" ] ; then
         dpdk_kvers=`perl debian/kernel-version "$1"`
     fi
     if [ -z "$KDREV" ] ; then
-        dpdk_kdrev="${dpdk_kvers}-1"
+        set +e
+        dpdk_kdrev=`dpkg-query -W -f='${Version}\n' linux-headers-${dpdk_kvers} 2> /dev/null`
+        if [ $? -ne 0 ] ; then
+            dpdk_kdrev="${dpdk_kvers}-1"
+        fi
+        set -e
     else
         dpdk_kvers="${dpdk_kvers}${INT_SUBARCH}"
         dpdk_kdrev="${KDREV}"
@@ -101,7 +106,7 @@ dpdk_kdrev="$(echo "$dpdk_kdrev" | tr _ -)"
 
 # Generate the control file from the template.
 
-sed "s/#KVERS#/${dpdk_kvers}/g" debian/control.modules.in > debian/control.modules
+sed -e "s/#KVERS#/${dpdk_kvers}/g" -e "s/#KDREV#/(= ${dpdk_kdrev})/g" debian/control.modules.in > debian/control.modules
 
 # Now, calcuate the binary package version.  Extract the epoch from the kernel
 # package revision and add it to the beginning of the binary package version