How to build images¶
Plain rootfs¶
$ lxd-imagebuilder build-dir --help
Build plain rootfs
Usage:
lxd-imagebuilder build-dir <filename|-> <target dir> [flags]
Flags:
-h, --help help for build-dir
--keep-sources Keep sources after build (default true)
--sources-dir Sources directory for distribution tarballs (default "/tmp/lxd-imagebuilder")
--with-post-files Run post-files actions
Global Flags:
--cache-dir Cache directory
--cleanup Clean up cache directory (default true)
--debug Enable debug output
--disable-overlay Disable the use of filesystem overlays
-o, --options Override options (list of key=value)
-t, --timeout Timeout in seconds
--version Print version number
To build a plain rootfs, run lxd-imagebuilder build-dir
.
The command takes an image definition file and an output directory as positional arguments.
Running build-dir
is useful if one wants to build both LXC and LXD images.
In that case one can simply run
lxd-imagebuilder build-dir def.yaml /path/to/rootfs
lxd-imagebuilder pack-lxc def.yaml /path/to/rootfs /path/to/output
lxd-imagebuilder pack-lxd def.yaml /path/to/rootfs /path/to/output
LXC image¶
$ lxd-imagebuilder build-lxc --help
Build LXC image from scratch
The compression can be set with the --compression flag. I can take one of the
following values:
- bzip2
- gzip
- lzip
- lzma
- lzo
- lzop
- xz (default)
- zstd
For supported compression methods, a compression level can be specified with
method-N, where N is an integer, e.g. gzip-9.
Usage:
lxd-imagebuilder build-lxc <filename|-> [target dir] [--compression=COMPRESSION] [flags]
Flags:
--compression Type of compression to use (default "xz")
-h, --help help for build-lxc
--keep-sources Keep sources after build (default true)
--sources-dir Sources directory for distribution tarballs (default "/tmp/lxd-imagebuilder")
Global Flags:
--cache-dir Cache directory
--cleanup Clean up cache directory (default true)
--debug Enable debug output
--disable-overlay Disable the use of filesystem overlays
-o, --options Override options (list of key=value)
-t, --timeout Timeout in seconds
--version Print version number
Running the build-lxc
sub-command creates a LXC image.
It outputs two files rootfs.tar.xz
and meta.tar.xz
.
After building the image, the rootfs will be destroyed.
The pack-lxc
sub-command can be used to create an image from an existing rootfs.
The rootfs won’t be deleted afterwards.
LXD image¶
$ lxd-imagebuilder build-lxd --help
Build LXD image from scratch
Depending on the type, it either outputs a unified (single tarball)
or split image (tarball + squashfs or qcow2 image). The --type flag can take one of the
following values:
- split (default)
- unified
The compression can be set with the --compression flag. I can take one of the
following values:
- bzip2
- gzip
- lzip
- lzma
- lzo
- lzop
- xz (default)
- zstd
For supported compression methods, a compression level can be specified with
method-N, where N is an integer, e.g. gzip-9.
Usage:
lxd-imagebuilder build-lxd <filename|-> [target dir] [--type=TYPE] [--compression=COMPRESSION] [--import-into-lxd] [flags]
Flags:
--compression Type of compression to use (default "xz")
-h, --help help for build-lxd
--import-into-lxd[="-"] Import built image into LXD
--keep-sources Keep sources after build (default true)
--sources-dir Sources directory for distribution tarballs (default "/tmp/lxd-imagebuilder")
--type Type of tarball to create (default "split")
--vm Create a qcow2 image for VMs
Global Flags:
--cache-dir Cache directory
--cleanup Clean up cache directory (default true)
--debug Enable debug output
--disable-overlay Disable the use of filesystem overlays
-o, --options Override options (list of key=value)
-t, --timeout Timeout in seconds
--version Print version number
Running the build-lxd
sub-command creates an LXD image.
If --type=split
, it outputs two files.
The metadata tarball will always be named lxd.tar.xz
.
When creating a container image, the second file will be rootfs.squashfs
.
When creating a VM image, the second file will be disk.qcow2
.
If --type=unified
, a unified tarball named <image.name>.tar.xz
is created.
See the image section for more on the image name.
If --compression
is set, the tarballs will use the provided compression instead of xz
.
Setting --vm
will create a qcow2
image which is used for virtual machines.
If --import-into-lxd
is set, the resulting image is imported into LXD.
It basically runs lxc image import <image>
.
Per default, it doesn’t create an alias.
This can be changed by calling it as --import-into-lxd=<alias>
.
After building the image, the rootfs will be destroyed.
The pack-lxd
sub-command can be used to create an image from an existing rootfs.
The rootfs won’t be deleted afterwards.