NACK: [SRU][L, K, J, F][M, U][PATCH 1/1] UBUNTU: [Packaging] Expose base (parent) abi for derivatives
Roxana Nicolescu
roxana.nicolescu at canonical.com
Tue Jun 6 09:47:35 UTC 2023
On 06/06/2023 10:20, Juerg Haefliger wrote:
> Title is misleading, you're not exposing the ABI, just the ABI number.
>
True. Changed in v2
>> BugLink: https://bugs.launchpad.net/bugs/2017006
>>
>> This will introduce a new variable UTS_UBUNTU_BASE_RELEASE_ABI equal
>> with the parent abi. For backports with multiple inheritance (like
>> jammy:linux-aws-5.19) the version from debian.master (kinetic:linux)
>> wil be used. In case there is no inheritance, the actual kernel abi
>> will be used.
>> This will be exposed in <generated/utsrelease.h> so that (dkms)
>> modules can use this variable for versioning.
>>
>> This is particularly needed in 5.19 kernels, but in anticipation of
>> similar usecases, it is best to introduce this in all releases.
>>
>> The dkms fix that needs this variable is caused by a commit that
>> broke the interface between the kernel and the lttng-module dkms.
>> For other releases, the kernel upstream version was used, but this
>> version has stayed the same because 5.19 version is not maintained
>> anymore upstream and the commit that broke the interface was fetched
>> from the 5.15 stable release.
>> We do expose the abi version of the kernel, but it alone will not solve
>> this issue because we deliver many derivatives, each with their own
>> version. Hence a base main abi version needs to exposed in the
>> headers.
>>
>> Signed-off-by: Roxana Nicolescu <roxana.nicolescu at canonical.com>
>> ---
>> debian/rules.d/0-common-vars.mk | 9 +++++++++
>> debian/rules.d/2-binary-arch.mk | 4 ++++
>> 2 files changed, 13 insertions(+)
>>
>> diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk
>> index 1d8f8b85772f..11e202598ee7 100644
>> --- a/debian/rules.d/0-common-vars.mk
>> +++ b/debian/rules.d/0-common-vars.mk
>> @@ -88,6 +88,15 @@ ifneq ($(full_build),false)
>> uploadnum := $(uploadnum)-Ubuntu
>> endif
>>
>> +# This exposes the base (parent) abi number
>> +# For main kernels, this version matches their abi version
>> +# Because we may deal with multiple inheritance (jammy:linux-aws-5.19)
>> +# we always extract the abi version from debian.master/changelog
>> +DEBIAN_BASE_MASTER=debian.master
>> +src_base_pkg_name=linux
>> +base_revision := $(shell sed -n '1s/^$(src_base_pkg_name)\ .*($(release)-\(.*\)).*$$/\1/p' $(DEBIAN_BASE_MASTER)/changelog)
>> +base_abinum := $(shell echo $(base_revision) | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$$/\1/')$(abi_suffix)
>> +
> Yikes.
> 1) Do we really need to define make variables which are only used in a single
> rule?
> 2) If make variables then they (base_<foo>) need to be added to the output of
> 'printenv' and the definitions should be moved to where the other abinum,
> prev_abinum are defined to keep it all in one place.
> 3) Defining DEBIAN_BASE_MASTER is pointless.
> 3) Why hard-code/define the source package name? It's not really needed, is
> it?
> 4) That sed magic seems overly complicated just to get the abi number...
> Why not use dpkg-parsechangelog to get the version? Look through
> 0-common-vars.mk how similar stuff is done elsewhere.
> 5) $(abi_suffix) was dropped in lunar, please don't reintroduce it.
>
>
> In hindsight, it might be helpful to define make variables and show them in
> printenv for debugging purposes... So I'm not totally opposed to that :-)
>
> ...Juerg
>
Thanks for your feedback. I agree, the rule is a big ugly and there's a
better alternative.
I submitted a v2 where I use dpkg-parsechangelog and I also removed
these variables.
>> # XXX: linux-libc-dev got bumped to -803.N inadvertantly by a ti-omap4 upload
>> # shift our version higher for this package only. Ensure this only
>> # occurs for the v2.6.35 kernel so that we do not propogate this into
>> diff --git a/debian/rules.d/2-binary-arch.mk b/debian/rules.d/2-binary-arch.mk
>> index 6eef2039ec7a..100f3d8e9f7e 100644
>> --- a/debian/rules.d/2-binary-arch.mk
>> +++ b/debian/rules.d/2-binary-arch.mk
>> @@ -335,6 +335,10 @@ endif
>> "$(hdrdir)/include/generated/compile.h"
>> # Add UTS_UBUNTU_RELEASE_ABI since UTS_RELEASE is difficult to parse.
>> echo "#define UTS_UBUNTU_RELEASE_ABI $(abinum)" >> $(hdrdir)/include/generated/utsrelease.h
>> +
>> + # Add UTS_UBUNTU_BASE_RELEASE_ABI, needed for dkms modules where we cannot use the upstream version
>> + echo "#define UTS_UBUNTU_BASE_RELEASE_ABI $(base_abinum)" >> $(hdrdir)/include/generated/utsrelease.h
>> +
>> # powerpc kernel arch seems to need some .o files for external module linking. Add them in.
>> ifeq ($(build_arch),powerpc)
>> mkdir -p $(hdrdir)/arch/powerpc/lib
More information about the kernel-team
mailing list