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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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?

Thank you,
-- 
Péter

> 
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> ---
> 
> 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



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux