@@ -2,22 +2,30 @@ class Signing:
def __init__(self):
self._flavour_to_arch = {}
+ self._package_to_flavour_to_arch = {}
self._arch_flavour_data = {}
- def add(self, arch, stype, binary, flavours):
+ def add(self, arch, stype, binary, flavours, options):
for flavour in flavours:
- self._flavour_to_arch.setdefault(flavour, []).append(arch)
self._arch_flavour_data[(arch, flavour)] = (stype, binary)
+ self._flavour_to_arch.setdefault(flavour, set()).add(arch)
+ self._package_to_flavour_to_arch.setdefault("image", {}).setdefault(flavour, set()).add(arch)
+ if "di" in options:
+ self._package_to_flavour_to_arch.setdefault("di", {}).setdefault(flavour, set()).add(arch)
@property
def flavour_archs(self):
- return sorted(self._flavour_to_arch.items())
+ for flavour, archs in sorted(self._flavour_to_arch.items()):
+ yield flavour, sorted(list(archs))
+
+ def package_flavour_archs(self, package):
+ for flavour, archs in sorted(self._package_to_flavour_to_arch.get(package, {}).items()):
+ yield flavour, sorted(list(archs))
@property
def arch_flavour_data(self):
return sorted(self._arch_flavour_data.items())
-
@classmethod
def load(cls, config):
signing = Signing()
@@ -26,5 +34,8 @@ class Signing:
cmd, *args = line.strip().split()
if cmd == "sign":
arch, stype, binary, *flavours = args
- signing.add(arch, stype, binary, flavours)
+ options = []
+ while flavours[-1].startswith("--"):
+ options.append(flavours.pop()[2:])
+ signing.add(arch, stype, binary, flavours, options)
return signing
@@ -20,7 +20,7 @@ with open("debian/control.stub") as tfd, open("debian/control", "w") as cfd:
else:
print(line, end='', file=cfd)
- for flavour, archs in signing.flavour_archs:
+ for flavour, archs in signing.package_flavour_archs("image"):
print(dedent(f"""\
Package: linux-image-{abi_version}-{flavour}
@@ -35,10 +35,24 @@ with open("debian/control.stub") as tfd, open("debian/control", "w") as cfd:
A kernel image for {flavour}. This version of it is signed with
Canonical's signing key.
""").rstrip(), file=cfd)
+ for flavour, archs in signing.package_flavour_archs("di"):
+ print(dedent(f"""\
+ Package: kernel-signed-image-{abi_version}-{flavour}-di
+ Package-Type: udeb
+ Section: debian-installer
+ Priority: extra
+ Provides: kernel-signed-image
+ Architecture: {" ".join(archs)}
+ Built-Using: {unsigned_name} (= {unsigned_version})
+ Description: Signed kernel image generic for the Debian installer
+ A kernel image for {flavour}. This version of it is signed with
+ Canonical's UEFI signing key. It is intended for the Debian installer,
+ it does _not_ provide a usable kernel for your full Debian system.
+ """).rstrip(), file=cfd)
# XXX: all dbgsym packages _must_ be at the end of debian/control else the
# build will hang forever on the builder.
- for flavour, archs in signing.flavour_archs:
+ for flavour, archs in signing.package_flavour_archs("image"):
print(dedent(f"""\
Package: linux-image-{abi_version}-{flavour}-dbgsym
Signed-off-by: Andy Whitcroft <apw@canonical.com> --- debian/scripts/config.py | 21 ++++++++++++++++----- debian/scripts/generate-control | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-)