[PATCH 2/4][SRU][Jammy/OEM-5.17/unstable] UBUNTU: [Packaging] support build dkms as standalone package

You-Sheng Yang vicamo.yang at canonical.com
Tue Apr 19 17:23:05 UTC 2022


From: "You-Sheng Yang (vicamo)" <vicamo.yang at canonical.com>

BugLink: https://bugs.launchpad.net/bugs/1969434

Signed-off-by: You-Sheng Yang (vicamo) <vicamo.yang at canonical.com>
---
 debian/control.d/flavour-module.stub | 30 ++++++++++++++++++++++++++++
 debian/rules                         |  8 ++++++++
 debian/rules.d/0-common-vars.mk      | 10 ++++++++++
 debian/rules.d/2-binary-arch.mk      | 20 +++++++++++++++++--
 debian/scripts/control-create        | 12 +++++++++++
 5 files changed, 78 insertions(+), 2 deletions(-)
 create mode 100644 debian/control.d/flavour-module.stub

diff --git a/debian/control.d/flavour-module.stub b/debian/control.d/flavour-module.stub
new file mode 100644
index 000000000000..2e020ad9ded1
--- /dev/null
+++ b/debian/control.d/flavour-module.stub
@@ -0,0 +1,30 @@
+
+Package: linux-modules-MODULE-FLAVOUR
+Build-Profiles: <!stage1>
+Architecture: ARCH
+Section: kernel
+Provides: MODULE-modules, MODULE-prebuilt-kernel
+Depends:
+ ${misc:Depends},
+ linux-modules-MODULE-PKGVER-ABINUM-FLAVOUR (= ${binary:Version}),
+Description: Extra drivers for MODULE for the FLAVOUR flavour
+ Install extra signed MODULE modules compatible with the FLAVOUR flavour.
+
+Package: linux-modules-MODULE-PKGVER-ABINUM-FLAVOUR
+Build-Profiles: <!stage1>
+Architecture: ARCH
+Section: kernel
+Priority: optional
+Depends:
+ ${misc:Depends},
+ linux-image-PKGVER-ABINUM-FLAVOUR | linux-image-unsigned-PKGVER-ABINUM-FLAVOUR,
+Built-Using: ${linux:BuiltUsing}
+Description: Linux kernel MODULE modules for version PKGVER-ABINUM
+ This package provides the Linux kernel MODULE modules for version
+ PKGVER-ABINUM.
+ .
+ You likely do not want to install this package directly. Instead, install the
+ one of the linux-modules-MODULE-FLAVOUR* meta-packages,
+ which will ensure that upgrades work correctly, and that supporting packages are
+ also installed.
+
diff --git a/debian/rules b/debian/rules
index 948711203ccc..855ec328be90 100755
--- a/debian/rules
+++ b/debian/rules
@@ -67,6 +67,7 @@ ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
     do_source_package=false
     do_flavour_image_package=false
     do_flavour_header_package=false
+    do_standalone_dkms=false
 endif
 
 # autopkgtest -- rebuild support
@@ -76,6 +77,7 @@ ifneq ($(filter autopkgtest,$(DEB_BUILD_PROFILES)),)
 	flavours := $(firstword $(flavours))
 	do_zfs=false
 	do_v4l2loopback=false
+	do_standalone_dkms=false
 endif
 
 # Being used to build a mainline build -- turn off things which do not work.
@@ -87,6 +89,7 @@ ifeq ($(do_mainline_build),true)
 	skipabi=true
 	skipmodule=true
 	skipretpoline=true
+	do_standalone_dkms=false
 endif
 
 # Disable tools build and packaging if do_tools != true
@@ -109,6 +112,10 @@ ifeq ($(do_dkms_wireguard),false)
 	do_wireguard_disable:=$(shell for m in $$(cat $(DROOT)/wireguard-modules.ignore); do grep -qxF $$m $(prev_abidir)/../modules.ignore 2>/dev/null || echo $$m >> $(prev_abidir)/../modules.ignore; done)
 endif
 
+ifeq ($(do_standalone_dkms),false)
+$(foreach _m,$(all_standalone_dkms_modules),$(eval do_$(_m) = false))
+endif
+
 # Either tools package needs the common source preparation
 do_any_tools=$(sort $(filter-out false,$(do_linux_tools) $(do_cloud_tools)))
 
@@ -178,6 +185,7 @@ endif
 $(DEBIAN)/control.stub: 				\
 		$(DROOT)/scripts/control-create		\
 		$(control_files)			\
+		$(DROOT)/control.d/flavour-module.stub	\
 		$(DEBIAN)/changelog			\
 		$(wildcard $(DEBIAN)/control.d/* $(DEBIAN)/sub-flavours/*.vars)
 	for i in $(control_files); do                                           \
diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk
index 9596c98ae374..eba261a68b64 100644
--- a/debian/rules.d/0-common-vars.mk
+++ b/debian/rules.d/0-common-vars.mk
@@ -293,3 +293,13 @@ $(foreach _v,$(_all_dkms_versions),$(eval dkms_$(call dkms_srcpkg_to_module,$(fi
 all_dkms_modules = $(foreach _v,$(_all_dkms_versions),$(call dkms_srcpkg_to_module,$(firstword $(subst :, ,$(_v)))))
 dkms_v4l2loopback_deb_path = pool/universe/v/v4l2loopback/v4l2loopback-dkms_$(dkms_v4l2loopback_version)_all.deb
 dkms_zfs_deb_path = pool/universe/z/zfs-linux/zfs-dkms_$(dkms_zfs_version)_all.deb
+_known_standalone_dkms_modules =
+all_standalone_dkms_modules = $(filter $(_known_standalone_dkms_modules),$(all_dkms_modules))
+$(foreach _m,$(all_dkms_modules),\
+  $(if $(filter $(_m),$(all_standalone_dkms_modules)),\
+    $(eval dkms_$(_m)_pkg_name = linux-modules-$(_m)-$(abi_release))\
+    $(eval dkms_$(_m)_metapkg_name = linux-modules-$(_m))\
+  ,\
+    $(eval dkms_$(_m)_pkg_name = $(mods_pkg_name))\
+  )\
+)
diff --git a/debian/rules.d/2-binary-arch.mk b/debian/rules.d/2-binary-arch.mk
index 957445a4b83b..d027c29a03f2 100644
--- a/debian/rules.d/2-binary-arch.mk
+++ b/debian/rules.d/2-binary-arch.mk
@@ -118,7 +118,9 @@ $(stampdir)/stamp-install-%: MODPUBKEY=$(builddir)/build-$*/certs/signing_key.x5
 $(stampdir)/stamp-install-%: build_dir=$(builddir)/build-$*
 $(stampdir)/stamp-install-%: dkms_dir=$(call dkms_dir_prefix,$(builddir)/build-$*)
 $(foreach _m,$(all_dkms_modules), \
-  $(eval $$(stampdir)/stamp-install-%: enable_$(_m) = $$(call custom_override,do_$(_m),$$*)))
+  $(eval $$(stampdir)/stamp-install-%: enable_$(_m) = $$(call custom_override,do_$(_m),$$*))\
+  $(eval $$(stampdir)/stamp-install-%: dkms_$(_m)_pkgdir = $$(CURDIR)/debian/$(dkms_$(_m)_pkg_name)-$$*)\
+)
 $(stampdir)/stamp-install-%: dbgpkgdir_dkms = $(if $(filter true,$(skipdbg)),"",$(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/kernel)
 $(stampdir)/stamp-install-%: $(stampdir)/stamp-build-% $(stampdir)/stamp-install-headers
 	@echo Debug: $@ kernel_file $(kernel_file) kernfile $(kernfile) install_file $(install_file) instfile $(instfile)
@@ -126,6 +128,10 @@ $(stampdir)/stamp-install-%: $(stampdir)/stamp-build-% $(stampdir)/stamp-install
 	dh_prep -p$(bin_pkg_name)-$*
 	dh_prep -p$(mods_pkg_name)-$*
 	dh_prep -p$(hdrs_pkg_name)-$*
+	$(foreach _m,$(all_standalone_dkms_modules), \
+		$(if $(filter true,$(enable_$(_m))), \
+			dh_prep -p$(dkms_$(_m)_pkg_name)-$*; \
+			dh_prep -p$(dkms_$(_m)_metapkg_name)-$*))
 ifneq ($(skipdbg),true)
 	dh_prep -p$(bin_pkg_name)-$*-dbgsym
 endif
@@ -263,6 +269,10 @@ ifeq ($(do_extras_package),true)
 		$(call install_control,$(mods_extra_pkg_name)-$*,extra,postinst postrm); \
 	fi
 endif
+	$(foreach _m,$(all_standalone_dkms_modules), \
+		$(if $(filter true,$(enable_$(_m))), \
+			install -d $(dkms_$(_m)_pkgdir)/usr/lib/linux/triggers; \
+			$(call install_control,$(dkms_$(_m)_pkg_name)-$*,extra,postinst postrm);))
 
 	# Install the full changelog.
 ifeq ($(do_doc_package),true)
@@ -412,7 +422,7 @@ endif
 	install -d $(dkms_dir) $(dkms_dir)/headers $(dkms_dir)/build $(dkms_dir)/source
 	cp -rp "$(hdrdir)" "$(indep_hdrdir)" "$(dkms_dir)/headers"
 
-	$(foreach _m,$(all_dkms_modules),$(if $(filter true,$(enable_$(_m))),$(call build_dkms, $(mods_pkg_name)-$*, $(pkgdir)/lib/modules/$(abi_release)-$*/kernel, $(dbgpkgdir_dkms),$(_m),$(dkms_$(_m)_deb_path))))
+	$(foreach _m,$(all_dkms_modules),$(if $(filter true,$(enable_$(_m))),$(call build_dkms, $(dkms_$(_m)_pkg_name)-$*, $(dkms_$(_m)_pkgdir)/lib/modules/$(abi_release)-$*/kernel, $(dbgpkgdir_dkms),$(_m),$(dkms_$(_m)_deb_path));))
 
 
 ifneq ($(skipdbg),true)
@@ -599,6 +609,7 @@ binary-%: pkgcloud = $(cloud_flavour_pkg_name)-$*
 binary-%: rprovides = $(if $(filter true,$(call custom_override,do_zfs,$*)),spl-modules$(comma) spl-dkms$(comma) zfs-modules$(comma) zfs-dkms$(comma)) \
 		$(if $(filter true,$(call custom_override,do_v4l2loopback,$*)),v4l2loopback-modules$(comma) v4l2loopback-dkms$(comma))
 binary-%: target_flavour = $*
+$(foreach _m,$(all_standalone_dkms_modules),$(eval binary-%: enable_$(_m) = $$(call custom_override,do_$(_m),$$*)))
 binary-%: checks-%
 	@echo Debug: $@
 	dh_testdir
@@ -622,6 +633,11 @@ ifeq ($(do_extras_package),true)
   endif
 endif
 
+	$(foreach _m,$(all_standalone_dkms_modules), \
+		$(if $(filter true,$(enable_$(_m))), \
+			$(call dh_all,$(dkms_$(_m)_pkg_name)-$*); \
+			$(call dh_all,$(dkms_$(_m)_metapkg_name)-$*);))
+
 	$(call dh_all,$(pkgbldinfo))
 	$(call dh_all,$(pkghdr))
 
diff --git a/debian/scripts/control-create b/debian/scripts/control-create
index 2ab9e497515f..73ec00f941ec 100755
--- a/debian/scripts/control-create
+++ b/debian/scripts/control-create
@@ -38,3 +38,15 @@ cat $stub | grep -v '^#' | sed \
 	-e "s#=SIGN-ME-PKG=#$sign_me_pkg#g"	\
 	-e "s#=SIGN-ME-TXT=#$sign_me_txt#g"	\
 	-e "s#=SIGN-PEER-PKG=#$sign_peer_pkg#g"
+
+while read package version
+do
+	case "$package" in
+	*) continue ;;
+	esac
+
+	cat debian/control.d/flavour-module.stub | grep -v '^#' | sed	\
+		-e "s#ARCH#$arch#g"	\
+		-e "s#MODULE#$module#g"		\
+		-e "s#FLAVOUR#$flavour#g"
+done <"debian/dkms-versions"
-- 
2.34.1




More information about the kernel-team mailing list