Launchpad and cbd generate different deb packages

Masahiro Yamada masahiro.yamada at canonical.com
Mon Jan 16 12:55:00 UTC 2023


Hi.

Presumably, the official place for building kernel packages is launchpad.
People who stick to the _golden_ workflow will create a
source package, and dput it to the launchpad.

cbd is available as a quicker path, but a problem is that I get a different
set of *.deb packages.

I am seeing this problem on focal:linux-iot, but I want to escape this
because this is a more global, generic issue.


If I use launchpad, I get linux-image-unsigned-<release>-<abi>-iot_*_arm64.deb

If I use cbd, I get linux-image-<release>-<abi>-iot_*_arm64.deb


This comes to the issue that debian/control is different depending on how you
build the source package.


In the current code, uefi_signed is different depending on architecture.
(I believe this is another bug, but let me continue to focal on the real issue)


$ git grep _signed debian.iot/rules.d/amd64.mk
debian.iot/rules.d/amd64.mk:uefi_signed = true

$ git grep _signed debian.iot/rules.d/arm64.mk
debian.iot/rules.d/arm64.mk:uefi_signed     = false


When you use launchpad, you will create a source package.
Presumably, you run "dpkg-buildpackage -S"  (or cranky build-sources)
Assuming you are using amd64 build host,
debian.iot/rules.d/amd64.mk is included, and "any_signed" is set true.

debian/scripts/control-create will create the following snippet for
control file.


  Package: linux-image-unsigned-5.4.0-1010-iot
  Build-Profiles: <!stage1>
  Architecture: amd64 arm64
  Section: kernel


If you build it in cbd, "dpkg-architecture -qDEB_HOST_ARCH" returns arm64,
so debian.iot/rules.d/arm64.mk is included. "any_signed" is empty.

debian/scripts/control-create will create the following snippet.


  Package: linux-image-5.4.0-1010-iot
  Build-Profiles: <!stage1>
  Architecture: amd64 arm64
  Section: kernel



Given the debian.iot/rules.d/{amd64.mk,arm64.mk} above
debian/scripts/control-create should create the following control file,
but it cannot do this.


  Package: linux-image-unsigned-5.4.0-1010-iot
  Build-Profiles: <!stage1>
  Architecture: amd64
  Section: kernel

  Package: linux-image-5.4.0-1010-iot
  Build-Profiles: <!stage1>
  Architecture: arm64
  Section: kernel





To sum up the problem,

- We requite the user to run 'fakeroot debian/rules clean'
  to generate debian/control.

- The resulting debian/control might be different depending on
  the return value of "dpkg-architecture -qDEB_HOST_ARCH"

- As a consequence, you will get different deb packages
  depending on your build environment.



The easy way is to fix debian/scripts/control-create,
but why do we dynamically generate debian/control
in the first place?

If we had checked-in debian/control (and debian/changelog)
while cranking the kernel, I would not have been hit
by this issue.




-- 
Best Regards
Masahiro Yamada <masahiro.yamada at canonical.com>
Canonical Kernel Team



More information about the kernel-team mailing list