kbuild: Restore .version auto-increment behaviour for Debian packages

Message ID 20221115220453.3463096-1-maz@kernel.org
State New
Headers
Series kbuild: Restore .version auto-increment behaviour for Debian packages |

Commit Message

Marc Zyngier Nov. 15, 2022, 10:04 p.m. UTC
  Since 2df8220cc511 ("kbuild: build init/built-in.a just once"),
generating Debian packages using 'make bindeb-pkg' results in
packages that are stuck to the same .version, leading to unexpected
behaviours (multiple packages with the same version).

That's because the mkdebian script samples the build version
before building the kernel, and forces the use of that version
number for the actual build.

Restore the previous behaviour by calling init/build-version
instead of reading the .version file. This is likely to result
in too many .version bumps, but this is what was happening before
(although the bump was affecting builds made after the current one).

Eventually, this script should be turned into something that
is a bit less counter-intuitive (building the kernel first
and only then generating the packaging artefacts).

Fixes: 2df8220cc511 ("kbuild: build init/built-in.a just once")
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Michal Marek <michal.lkml@markovi.net>
Cc: Nick Desaulniers <ndesaulniers@google.com>
---

Notes:
    v2: Drop the RPM version which was wrong, and make the path
        relative to $srctree.

 scripts/package/mkdebian | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Masahiro Yamada Nov. 16, 2022, 6:09 a.m. UTC | #1
On Wed, Nov 16, 2022 at 7:05 AM Marc Zyngier <maz@kernel.org> wrote:
>
> Since 2df8220cc511 ("kbuild: build init/built-in.a just once"),
> generating Debian packages using 'make bindeb-pkg' results in
> packages that are stuck to the same .version, leading to unexpected
> behaviours (multiple packages with the same version).
>
> That's because the mkdebian script samples the build version
> before building the kernel, and forces the use of that version
> number for the actual build.
>
> Restore the previous behaviour by calling init/build-version
> instead of reading the .version file. This is likely to result
> in too many .version bumps, but this is what was happening before
> (although the bump was affecting builds made after the current one).


What do you mean by "too many .version bumps"?

Every "make bindeb-pkg" increments the version by one.

Is there any case where it increases more?





> Eventually, this script should be turned into something that
> is a bit less counter-intuitive (building the kernel first
> and only then generating the packaging artefacts).


How to achieve this?

The version is recorded in debian/chanegelog.
Without it, dpkg-buildpackage fails.

In my understanding, the version must be fixed before building the kernel.








>
> Fixes: 2df8220cc511 ("kbuild: build init/built-in.a just once")
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> Cc: Masahiro Yamada <masahiroy@kernel.org>
> Cc: Michal Marek <michal.lkml@markovi.net>
> Cc: Nick Desaulniers <ndesaulniers@google.com>
> ---
>
> Notes:
>     v2: Drop the RPM version which was wrong, and make the path
>         relative to $srctree.
>
>  scripts/package/mkdebian | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
> index 60a2a63a5e90..a3ac5a716e9f 100755
> --- a/scripts/package/mkdebian
> +++ b/scripts/package/mkdebian
> @@ -90,7 +90,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then
>         packageversion=$KDEB_PKGVERSION
>         revision=${packageversion##*-}
>  else
> -       revision=$(cat .version 2>/dev/null||echo 1)
> +       revision=$($srctree/init/build-version)
>         packageversion=$version-$revision
>  fi
>  sourcename=$KDEB_SOURCENAME
> --
> 2.34.1
>


--
Best Regards
Masahiro Yamada
  
Marc Zyngier Nov. 16, 2022, 12:28 p.m. UTC | #2
On Wed, 16 Nov 2022 06:09:31 +0000,
Masahiro Yamada <masahiroy@kernel.org> wrote:
> 
> On Wed, Nov 16, 2022 at 7:05 AM Marc Zyngier <maz@kernel.org> wrote:
> >
> > Since 2df8220cc511 ("kbuild: build init/built-in.a just once"),
> > generating Debian packages using 'make bindeb-pkg' results in
> > packages that are stuck to the same .version, leading to unexpected
> > behaviours (multiple packages with the same version).
> >
> > That's because the mkdebian script samples the build version
> > before building the kernel, and forces the use of that version
> > number for the actual build.
> >
> > Restore the previous behaviour by calling init/build-version
> > instead of reading the .version file. This is likely to result
> > in too many .version bumps, but this is what was happening before
> > (although the bump was affecting builds made after the current one).
> 
> 
> What do you mean by "too many .version bumps"?
> 
> Every "make bindeb-pkg" increments the version by one.

And isn't that a problem? We increase the build number pointlessly,
even if there is *nothing* to change.

> 
> Is there any case where it increases more?

No, but that's bad enough IMHO.

> > Eventually, this script should be turned into something that
> > is a bit less counter-intuitive (building the kernel first
> > and only then generating the packaging artefacts).
> 
> 
> How to achieve this?


By building the kernel *before* sampling the version number, just like
RPM does.

> 
> The version is recorded in debian/chanegelog.
> Without it, dpkg-buildpackage fails.

And again, nothing forces us to do it in that order.

> In my understanding, the version must be fixed before building the kernel.

Can't immediately see what mandates it, but I'm sure you know better.

Anyway, the current situation needs fixing. If you're unhappy with the
patch, feel free to replace it with something that you consider more
appropriate.

	M.
  
Masahiro Yamada Nov. 16, 2022, 8:56 p.m. UTC | #3
On Wed, Nov 16, 2022 at 9:28 PM Marc Zyngier <maz@kernel.org> wrote:
>
> On Wed, 16 Nov 2022 06:09:31 +0000,
> Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > On Wed, Nov 16, 2022 at 7:05 AM Marc Zyngier <maz@kernel.org> wrote:
> > >
> > > Since 2df8220cc511 ("kbuild: build init/built-in.a just once"),
> > > generating Debian packages using 'make bindeb-pkg' results in
> > > packages that are stuck to the same .version, leading to unexpected
> > > behaviours (multiple packages with the same version).
> > >
> > > That's because the mkdebian script samples the build version
> > > before building the kernel, and forces the use of that version
> > > number for the actual build.
> > >
> > > Restore the previous behaviour by calling init/build-version
> > > instead of reading the .version file. This is likely to result
> > > in too many .version bumps, but this is what was happening before
> > > (although the bump was affecting builds made after the current one).
> >
> >
> > What do you mean by "too many .version bumps"?
> >
> > Every "make bindeb-pkg" increments the version by one.
>
> And isn't that a problem? We increase the build number pointlessly,
> even if there is *nothing* to change.


I think "make *-pkg" should increment the version every time.


The .version is incremented only when vmlinux is updated.

When you change module code, only *.ko is relinked.
The .version stays because it is embedded in vmlinux.


Even if you build the kernel first, and .version has no change,
the package contents may have some changes.





> >
> > Is there any case where it increases more?
>
> No, but that's bad enough IMHO.
>
> > > Eventually, this script should be turned into something that
> > > is a bit less counter-intuitive (building the kernel first
> > > and only then generating the packaging artefacts).
> >
> >
> > How to achieve this?
>
>
> By building the kernel *before* sampling the version number, just like
> RPM does.
>
> >
> > The version is recorded in debian/chanegelog.
> > Without it, dpkg-buildpackage fails.
>
> And again, nothing forces us to do it in that order.
>
> > In my understanding, the version must be fixed before building the kernel.
>
> Can't immediately see what mandates it, but I'm sure you know better.
>
> Anyway, the current situation needs fixing. If you're unhappy with the
> patch, feel free to replace it with something that you consider more
> appropriate.
>
>         M.
>
> --
> Without deviation from the norm, progress is not possible.
  
Marc Zyngier Nov. 16, 2022, 9:40 p.m. UTC | #4
On Wed, 16 Nov 2022 20:56:38 +0000,
Masahiro Yamada <masahiroy@kernel.org> wrote:
> 
> On Wed, Nov 16, 2022 at 9:28 PM Marc Zyngier <maz@kernel.org> wrote:
> >
> > On Wed, 16 Nov 2022 06:09:31 +0000,
> > Masahiro Yamada <masahiroy@kernel.org> wrote:
> > >
> > > On Wed, Nov 16, 2022 at 7:05 AM Marc Zyngier <maz@kernel.org> wrote:
> > > >
> > > > Since 2df8220cc511 ("kbuild: build init/built-in.a just once"),
> > > > generating Debian packages using 'make bindeb-pkg' results in
> > > > packages that are stuck to the same .version, leading to unexpected
> > > > behaviours (multiple packages with the same version).
> > > >
> > > > That's because the mkdebian script samples the build version
> > > > before building the kernel, and forces the use of that version
> > > > number for the actual build.
> > > >
> > > > Restore the previous behaviour by calling init/build-version
> > > > instead of reading the .version file. This is likely to result
> > > > in too many .version bumps, but this is what was happening before
> > > > (although the bump was affecting builds made after the current one).
> > >
> > >
> > > What do you mean by "too many .version bumps"?
> > >
> > > Every "make bindeb-pkg" increments the version by one.
> >
> > And isn't that a problem? We increase the build number pointlessly,
> > even if there is *nothing* to change.
> 
> 
> I think "make *-pkg" should increment the version every time.

But that's not what the rpm package builder does.

> 
> 
> The .version is incremented only when vmlinux is updated.
> 
> When you change module code, only *.ko is relinked.
> The .version stays because it is embedded in vmlinux.
> 
> 
> Even if you build the kernel first, and .version has no change,
> the package contents may have some changes.

And again, isn't that an inconsistency?

Anyway, enough idle arguing. What do want me to do about this bug?

	M.
  
Masahiro Yamada Nov. 17, 2022, 8:58 a.m. UTC | #5
On Thu, Nov 17, 2022 at 6:40 AM Marc Zyngier <maz@kernel.org> wrote:
>
> On Wed, 16 Nov 2022 20:56:38 +0000,
> Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > On Wed, Nov 16, 2022 at 9:28 PM Marc Zyngier <maz@kernel.org> wrote:
> > >
> > > On Wed, 16 Nov 2022 06:09:31 +0000,
> > > Masahiro Yamada <masahiroy@kernel.org> wrote:
> > > >
> > > > On Wed, Nov 16, 2022 at 7:05 AM Marc Zyngier <maz@kernel.org> wrote:
> > > > >
> > > > > Since 2df8220cc511 ("kbuild: build init/built-in.a just once"),
> > > > > generating Debian packages using 'make bindeb-pkg' results in
> > > > > packages that are stuck to the same .version, leading to unexpected
> > > > > behaviours (multiple packages with the same version).
> > > > >
> > > > > That's because the mkdebian script samples the build version
> > > > > before building the kernel, and forces the use of that version
> > > > > number for the actual build.
> > > > >
> > > > > Restore the previous behaviour by calling init/build-version
> > > > > instead of reading the .version file. This is likely to result
> > > > > in too many .version bumps, but this is what was happening before
> > > > > (although the bump was affecting builds made after the current one).
> > > >
> > > >
> > > > What do you mean by "too many .version bumps"?
> > > >
> > > > Every "make bindeb-pkg" increments the version by one.
> > >
> > > And isn't that a problem? We increase the build number pointlessly,
> > > even if there is *nothing* to change.
> >
> >
> > I think "make *-pkg" should increment the version every time.
>
> But that's not what the rpm package builder does.
>
> >
> >
> > The .version is incremented only when vmlinux is updated.
> >
> > When you change module code, only *.ko is relinked.
> > The .version stays because it is embedded in vmlinux.
> >
> >
> > Even if you build the kernel first, and .version has no change,
> > the package contents may have some changes.
>
> And again, isn't that an inconsistency?


Yes, it is inconsistent.
Basically, I want all *-pkg targets working in the same way.
Changing binrpm-pkg is easy (Bump the version first),
but the opposite way is impossible (at least, I cannot come
up with a good solution).


>
> Anyway, enough idle arguing. What do want me to do about this bug?
>
>         M.
>
> --
> Without deviation from the norm, progress is not possible.


I dropped the last paragraph, and applied. Thanks.
  

Patch

diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
index 60a2a63a5e90..a3ac5a716e9f 100755
--- a/scripts/package/mkdebian
+++ b/scripts/package/mkdebian
@@ -90,7 +90,7 @@  if [ -n "$KDEB_PKGVERSION" ]; then
 	packageversion=$KDEB_PKGVERSION
 	revision=${packageversion##*-}
 else
-	revision=$(cat .version 2>/dev/null||echo 1)
+	revision=$($srctree/init/build-version)
 	packageversion=$version-$revision
 fi
 sourcename=$KDEB_SOURCENAME