From 71ec79e55d173cf4572336cecc4df466dd0b6405 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 | 1 + live-build/auto/build | 12 ++++++++ live-build/auto/config | 2 ++ live-build/make-lxd-metadata.py | 49 +++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100755 live-build/make-lxd-metadata.py diff --git a/debian/changelog b/debian/changelog index a1b04a85..eb9e7821 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ livecd-rootfs (2.525.17) UNRELEASED; urgency=medium * Add a buildd subproject. + * Add a LXD image to builds for the buildd subproject. -- Colin Watson Tue, 05 Feb 2019 14:20:04 +0000 diff --git a/live-build/auto/build b/live-build/auto/build index 5fe9861e..9b7af4b5 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -495,6 +495,18 @@ elif [ "$SUBPROJECT" = buildd ]; then tar --transform='s,^binary,chroot-autobuild,' \ --sort=name --numeric-owner --xattrs \ -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 06494b93..5516d900 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -768,6 +768,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()