Re: [PATCH v6 11/12] kbuild: deb-pkg: improve the usability of source package

Masahiro Yamada
2023-03-08T17:03:48Z

On Wed, Mar 8, 2023 at 9:29 PM Péter Ujfalusi
<peter.ujfalusi@linux.intel.com> wrote:
>
>
>
> On 15/02/2023 03:20, Masahiro Yamada wrote:
> > Improve the source package support in case the dpkg-buildpackage is
> > directly used to build binary packages.
> >
> > For cross-compiling, you can set CROSS_COMPILE via the environment
> > variable, but it is better to set it automatically - set it to
> > ${DEB_HOST_GNU_TYPE}- if we are cross-compiling but not from the top
> > Makefile.
> >
> > The generated source package may be carried to a different build
> > environment, which may have a different compiler installed.
> > Run olddefconfig first to set new CONFIG options to their default
> > values without prompting.
> >
> > Take KERNELRELEASE and KBUILD_BUILD_VERSION from the version field of
> > debian/changelog in case it is updated afterwards.
>
> I just arrived to this patch when trying to update the kernel for SOF
> from 6.2.0 base to 6.3.0-rc1:
> https://github.com/thesofproject/linux/pull/4223#issuecomment-1459997676
>
> Our CI is building a kernel deb package from PRs to test with this command:
> make bindeb-pkg LOCALVERSION=-$PRIDV-default KDEB_PKGVERSION=$(make
> kernelversion)-$GITSHA
>
> The files, directories and the name of the deb package follows the rule
> set up by scripts/setlocalversion, taking into account the LOCALVERSION,
> CONFIG_LOCALVERSION and CONFIG_LOCALVERSION_AUTO, but the built kernel
> is using the version derived from KDEB_PKGVERSION and the system is not
> able to boot up since the modules are in a different directory then they
> should be.
>
> Something like this:
> make bindeb-pkg LOCALVERSION=-testbuild
> vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty
> /lib/modules/6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty/
>
> strings vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty | grep 6.3
> 6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty
>
> Then with the KDEB_PKGVERSION:
> make bindeb-pkg LOCALVERSION=-testbuild KDEB_PKGVERSION=$(make
> kernelversion)-notworking
> vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty
> /lib/modules/6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty/
>
> strings vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty | grep 6.3
> 6.3.0-rc1
>
> in this case modprobe will not find the modules, it is looking for them
> under /lib/modules/6.3.0-rc1
>
> Reverting this patch makes the created deb package usable, the system
> is bootable.
>
> We use the LOCALVERSION to feed in PR inforamtion and the
> KDEB_PKGVERSION is used fro additional information, like build ID.
>
> Do you have any suggestion on how to get the functionality back or we
> must stop using the KDEB_PKGVERSION altogether?

I am aware of this issue.

KERNELVERSION does not need to match the package version.

I should have taken it from the <abiver> in the package name
(linux-image-<abiver>_<origver>-<rev>_<arch>.deb)
if I had wanted to do this dynamically by debian/control.

I wrongly took it from <origver>.

I will change this when I solve another issue required by Linus Tolvalds.

Please wait.

>
> Thank you,
> --
> Péter
>
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > ---
> >
> > Changes in v6:
> > - New patch
> >
> > scripts/package/deb-build-option | 16 ++++++++++++++++
> > scripts/package/mkdebian | 9 ++++-----
> > 2 files changed, 20 insertions(+), 5 deletions(-)
> > create mode 100755 scripts/package/deb-build-option
> >
> > diff --git a/scripts/package/deb-build-option b/scripts/package/deb-build-option
> > new file mode 100755
> > index 000000000000..b079b0d121d4
> > --- /dev/null
> > +++ b/scripts/package/deb-build-option
> > @@ -0,0 +1,16 @@
> > +#!/bin/sh
> > +# SPDX-License-Identifier: GPL-2.0-only
> > +
> > +# Set up CROSS_COMPILE if we are cross-compiling, but not called from the
> > +# kernel toplevel Makefile
> > +if [ -z "${CROSS_COMPILE}${cross_compiling}" -a "${DEB_HOST_ARCH}" != "${DEB_BUILD_ARCH}" ]; then
> > + echo CROSS_COMPILE=${DEB_HOST_GNU_TYPE}-
> > +fi
> > +
> > +version=$(dpkg-parsechangelog -S Version)
> > +version_upstream="${version%-*}"
> > +debian_revision="${version#${version_upstream}}"
> > +debian_revision="${debian_revision#*-}"
> > +
> > +echo KERNELRELEASE=${version_upstream}
> > +echo KBUILD_BUILD_VERSION=${debian_revision}
> > diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
> > index eef20d5dc288..f74380036bb5 100755
> > --- a/scripts/package/mkdebian
> > +++ b/scripts/package/mkdebian
> > @@ -90,10 +90,8 @@ rm -rf debian
> > version=$KERNELRELEASE
> > if [ -n "$KDEB_PKGVERSION" ]; then
> > packageversion=$KDEB_PKGVERSION
> > - revision=${packageversion##*-}
> > else
> > - revision=$($srctree/init/build-version)
> > - packageversion=$version-$revision
> > + packageversion=$version-$($srctree/init/build-version)
> > fi
> > sourcename=${KDEB_SOURCENAME:-linux-upstream}
> >
> > @@ -244,8 +242,9 @@ srctree ?= .
> >
> > build-indep:
> > build-arch:
> > - \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \
> > - KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile
> > + \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
> > + \$(shell \$(srctree)/scripts/package/deb-build-option) \
> > + olddefconfig all
> >
> > build: build-arch
> >
>
> --
> Péter

--
Best Regards
Masahiro Yamada