From 082a2046e7242832719cea58676e668e4f2c3e0b Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Wed, 19 Dec 2018 22:11:16 +0000 Subject: [PATCH] Add a LXD image to builds for the buildd subproject --- debian/changelog | 6 ++++ live-build/auto/build | 12 ++++++++ live-build/auto/config | 2 ++ live-build/make-lxd-metadata.py | 49 +++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100755 live-build/make-lxd-metadata.py diff --git a/debian/changelog b/debian/changelog index 2673f96c..b0fdca1e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +livecd-rootfs (2.553) UNRELEASED; urgency=medium + + * Add a LXD image to builds for the buildd subproject. + + -- Colin Watson Wed, 19 Dec 2018 22:10:19 +0000 + livecd-rootfs (2.552) disco; urgency=medium * Do not include curtin in the live-server installer.squashfs as the diff --git a/live-build/auto/build b/live-build/auto/build index 9648e78f..8e38516b 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -531,6 +531,18 @@ elif [ "$SUBPROJECT" = buildd ]; then tar --transform='s,^binary,chroot-autobuild,' \ --sort=name --numeric-owner \ -czf "$PREFIX.rootfs.tar.gz" binary + + # Build a LXD image as well, which is preferable for some build types. + TMPDIR="$(mktemp -d)" + config/make-lxd-metadata "${LB_DISTRIBUTION%-*}" "$ARCH" >"$TMPDIR/metadata.yaml" + tar --numeric-owner -cf "$PREFIX.lxd.tar" -C "$TMPDIR" metadata.yaml + rm -rf "$TMPDIR" + # When using the combined metadata/rootfs form, the rootfs must be + # under rootfs/ rather than under chroot-autobuild/. + tar --transform='s,^binary,rootfs,' \ + --sort=name --numeric-owner \ + -rf "$PREFIX.lxd.tar" binary + gzip -9 "$PREFIX.lxd.tar" fi if [ "$PROJECT:${SUBPROJECT:-}" = "ubuntu-core:system-image" ]; then diff --git a/live-build/auto/config b/live-build/auto/config index 496e8dea..2cafdb4e 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -707,6 +707,8 @@ case $SUBPROJECT in add_package install build-essential # Needed for LXD-based builds. add_package install init + + cp -af /usr/share/livecd-rootfs/live-build/make-lxd-metadata.py config/make-lxd-metadata ;; esac diff --git a/live-build/make-lxd-metadata.py b/live-build/make-lxd-metadata.py new file mode 100755 index 00000000..896f811a --- /dev/null +++ b/live-build/make-lxd-metadata.py @@ -0,0 +1,49 @@ +#! /usr/bin/python3 + +"""Make a metadata.yaml file for a LXD image.""" + +import argparse +import json +import sys +import time + + +# Map dpkg architecture names to LXD architecture names. +lxd_arches = { + "amd64": "x86_64", + "arm64": "aarch64", + "armhf": "armv7l", + "i386": "i686", + "powerpc": "ppc", + "ppc64el": "ppc64le", + "s390x": "s390x", + } + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("series", help="Ubuntu series name") + parser.add_argument("architecture", help="Ubuntu architecture name") + args = parser.parse_args() + + metadata = { + "architecture": lxd_arches[args.architecture], + "creation_date": int(time.time()), + "properties": { + "os": "Ubuntu", + "series": args.series, + "architecture": args.architecture, + "description": "Ubuntu buildd %s %s" % ( + args.series, args.architecture), + }, + } + + # Encoding this as JSON is good enough, and saves pulling in a YAML + # library dependency. + json.dump( + metadata, sys.stdout, sort_keys=True, indent=4, separators=(",", ": "), + ensure_ascii=False) + + +if __name__ == "__main__": + main()