Message ID | 20230215012034.403356-11-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v6,01/12] kbuild: add a tool to list files ignored by git | expand |
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,
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
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
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. 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