diff --git a/debian/changelog b/debian/changelog
index 54aa08b1..ed224dcb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
 livecd-rootfs (2.408.43) UNRELEASED; urgency=medium
 
   * Add a buildd subproject.
+  * Add a LXD image to builds for the buildd subproject.
 
  -- Colin Watson <cjwatson@ubuntu.com>  Mon, 14 Jan 2019 17:45:38 +0000
 
diff --git a/live-build/auto/build b/live-build/auto/build
index 80ca5901..c891b09e 100755
--- a/live-build/auto/build
+++ b/live-build/auto/build
@@ -415,6 +415,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 749e72d3..686963f1 100755
--- a/live-build/auto/config
+++ b/live-build/auto/config
@@ -663,6 +663,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()