ACK/Cmnt: [SRU][linux-meta][JAMMY][PATCH v5] UBUNTU: [Packaging] support standalone dkms module builds
Stefan Bader
stefan.bader at canonical.com
Wed May 25 13:01:53 UTC 2022
On 25.05.22 13:32, Dimitri John Ledkov wrote:
> From: "You-Sheng Yang (vicamo)" <vicamo at gmail.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1969434
>
> Signed-off-by: You-Sheng Yang (vicamo) <vicamo.yang at canonical.com>
> Signed-off-by: Dimitri John Ledkov <dimitri.ledkov at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
With similar disclaimer as for the kernel part.
-Stefan
>
> * Changes since v4:
> - None, just a resend to match the v5 patches for the main package
>
> debian/control.d/generic | 2 +-
> debian/control.dkms | 10 ++++++
> debian/rules | 69 +++++++++++++++++++++++++++++++++++++---
> 3 files changed, 75 insertions(+), 6 deletions(-)
> create mode 100644 debian/control.dkms
>
> diff --git a/debian/control.d/generic b/debian/control.d/generic
> index 016f763a55..8d6db34def 100644
> --- a/debian/control.d/generic
> +++ b/debian/control.d/generic
> @@ -9,7 +9,7 @@ Description: Generic Linux kernel headers
> Package: linux-image-generic${variant:suffix}
> Architecture: amd64 armhf arm64 powerpc ppc64el s390x
> Section: kernel
> -Provides: ${dkms:zfs-modules} ${dkms:virtualbox-guest-modules} ${dkms:wireguard-linux-compat-modules}
> +Provides: ${dkms:v4l2loopback-modules} ${dkms:zfs-modules} ${dkms:virtualbox-guest-modules} ${dkms:wireguard-linux-compat-modules}
> Depends: ${misc:Depends}, linux-image-${kernel-abi-version}-generic, linux-modules-extra-${kernel-abi-version}-generic [amd64 arm64 powerpc ppc64el s390x], linux-firmware [amd64 armhf arm64 ppc64el], intel-microcode [amd64], amd64-microcode [amd64]
> Recommends: thermald [amd64]
> Description: Generic Linux kernel image
> diff --git a/debian/control.dkms b/debian/control.dkms
> new file mode 100644
> index 0000000000..304af7b995
> --- /dev/null
> +++ b/debian/control.dkms
> @@ -0,0 +1,10 @@
> +
> +Package: linux-modules-MODULE-FLAVOUR${variant:suffix}
> +Architecture: ARCH
> +Section: kernel
> +Provides: ${dkms:MODULE-modules}
> +Depends:
> + ${misc:Depends},
> + linux-modules-MODULE-${kernel-abi-version}-FLAVOUR,
> +Description: Extra drivers for MODULE for the FLAVOUR flavour
> + Install extra signed MODULE modules compatible with the FLAVOUR flavour.
> diff --git a/debian/rules b/debian/rules
> index 789df4c083..5b1fd42120 100755
> --- a/debian/rules
> +++ b/debian/rules
> @@ -7,6 +7,11 @@
> # Copyright (c) 2004 Jens Schmalzing <jensen at debian.org>
> #
>
> +include /usr/share/dpkg/architecture.mk
> +
> +# Used when you need to 'escape' a comma.
> +comma = ,
> +
> SERIES=$(shell dpkg-parsechangelog -SDistribution | sed -e 's/-\(security\|updates\|proposed\)$$//')
> SOURCE=$(shell dpkg-parsechangelog -SSource)
> KERNEL_SOURCE=$(shell echo "$(SOURCE)" | sed -e 's/-meta//')
> @@ -26,10 +31,11 @@ endif
> control_files := debian/control.common
> # control files only wanted for the primary variant
> primary_control_files := $(shell LC_ALL=C ls -d debian/control.d/primary debian/control.d/transitionals-* 2>/dev/null)
> +dkms_control_files :=
> ifneq ($(filter --,$(variants)),)
> control_files += $(primary_control_files)
> endif
> -control_files += $(filter-out $(primary_control_files),$(shell LC_ALL=C ls -d debian/control.d/*))
> +control_files += $(filter-out $(primary_control_files) $(wildcard debian/control.d/dkms-*),$(shell LC_ALL=C ls -d debian/control.d/*))
>
> SHELL := sh -e
>
> @@ -38,13 +44,57 @@ clean: debian/control
> dh_testroot
> dh_clean
>
> -# Versions of dkms packages.
> -dkms_zfs_linux_version=$(shell gawk '/^zfs-linux/ { print $$2; }' debian/dkms-versions)
> +# DKMS
> +all_dkms_modules =
> +$(foreach _line,$(shell gawk '{ OFS = "!"; $$1 = $$1; print }' debian/dkms-versions), \
> + $(eval _params = $(subst !, ,$(_line))) \
> + $(eval _deb_pkgname = $(firstword $(_params))) \
> + $(eval _deb_version = $(word 2,$(_params))) \
> + $(if $(filter modulename=%,$(_params)), \
> + $(eval _m = $(word 2,$(subst =, ,$(filter modulename=%,$(_params))))) \
> + , \
> + $(info modulename for $(_deb_pkgname) not specified in dkms-versions. Assume $(_deb_pkgname).) \
> + $(eval _m = $(_deb_pkgname)) \
> + ) \
> + $(eval all_dkms_modules += $(_m)) \
> + $(eval dkms_$(_m)_version = $(_deb_version)) \
> + $(if $(filter arch=%,$(_params)), \
> + $(eval dkms_$(_m)_archs = $(patsubst arch=%,%,$(filter arch=%,$(_params)))) \
> + , \
> + $(eval dkms_$(_m)_archs = any) \
> + ) \
> + $(eval dkms_$(_m)_rprovides = $(patsubst rprovides=%,%,$(filter rprovides=%,$(_params)))) \
> + $(eval dkms_$(_m)_type = $(word 1,$(patsubst type=%,%,$(filter type=%,$(_params))) built-in)) \
> + $(eval all_$(dkms_$(_m)_type)_dkms_modules += $(_m)) \
> + $(if $(filter standalone,$(dkms_$(_m)_type)), \
> + $(eval dkms_$(_m)_rprovides += $(_m)-prebuilt-kernel) \
> + $(eval dkms_control_files += debian/control.d/dkms-$(_m)) \
> + ) \
> +)
> dkms_virtualbox_version=$(KERNEL_ABI_VERSION)
> dkms_wireguard_version=$(shell /sbin/modinfo -F version /lib/modules/$(KERNEL_ABI_VERSION)-generic/kernel/drivers/net/wireguard/wireguard.ko)
>
> +debian/control.d/dkms-%: module = $(patsubst debian/control.d/dkms-%,%,$@)
> +debian/control.d/dkms-%: module_archs = $(dkms_$(patsubst debian/control.d/dkms-%,%,$@)_archs)
> +debian/control.d/dkms-%: debian/control.dkms
> + for cf in $(filter-out debian/control.common $(primary_control_files),$(control_files)); do \
> + flavour=$$(basename $$cf); \
> + flavour_archs=$$(gawk "/^Package: linux-image-$${flavour}\\\$$/ { getline; \$$1=\"\"; print; }" $$cf); \
> + available_archs=$${flavour_archs}; \
> + if ! test "$(module_archs)" = "any"; then \
> + available_archs=$$(echo "$${flavour_archs} $(module_archs)" | tr " " "\n" | sort | uniq -d); \
> + test -n "$${available_archs}" || continue; \
> + fi; \
> + cat debian/control.dkms | sed \
> + -e "s/MODULE/$(module)/g" \
> + -e "s/ARCH/$${available_archs}/g" \
> + -e "s/FLAVOUR/$${flavour}/g"; \
> + done >$@.tmp
> + rm -f $@
> + mv $@.tmp $@
> +
> debian/control: tp_key=test:provides\(-full\|-image\|-headers\|-modules-extra\)
> -debian/control: $(control_files)
> +debian/control: $(control_files) $(dkms_control_files)
> for i in $^; do \
> if grep -q "{variant:" $$i; then \
> variant_first='yes'; \
> @@ -75,7 +125,16 @@ debian/control: $(control_files)
>
> gencontrol_flags = -Vkernel-version=$(KERNEL_VERSION)
> gencontrol_flags += -Vkernel-abi-version=$(KERNEL_ABI_VERSION)
> -gencontrol_flags += -Vdkms:zfs-modules="zfs-modules (= $(dkms_zfs_linux_version)),"
> +gencontrol_flags += \
> + $(foreach _m,$(all_dkms_modules), \
> + $(if $(filter $(DEB_HOST_ARCH),$(subst any,$(DEB_HOST_ARCH),$(dkms_$(_m)_archs))), \
> + $(if $(filter standalone,$(dkms_$(_m)_type)), \
> + -Vdkms:$(_m)-modules="$(foreach _p,$(dkms_$(_m)_rprovides),$(_p) (= $(dkms_$(_m)_version))$(comma) )" \
> + , \
> + -Vdkms:$(_m)-modules="$(foreach _p,$(filter %-modules,$(dkms_$(_m)_rprovides)),$(_p) (= $(dkms_$(_m)_version))$(comma) )" \
> + ) \
> + ) \
> + )
> gencontrol_flags += -Vdkms:virtualbox-guest-modules="virtualbox-guest-modules (= $(dkms_virtualbox_version)),"
> gencontrol_flags += -Vdkms:wireguard-linux-compat-modules="wireguard-modules (= $(dkms_wireguard_version)),"
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20220525/a1e24874/attachment.sig>
More information about the kernel-team
mailing list