On The Way To LXC 3.0: Splitting Out Templates And Language Bindings
Hey everyone,
This is another update about the development of LXC 3.0
.
We are currently in the process of moving various parts of LXC
out of the
main LXC repository and into separate
repositories.
Splitting Out The Language Bindings For Lua
And Python 3
The lua language bindings will be moved into the new lua-lxc repository and the Python 3 bindings to the new python3-lxc repository. This is in line with other language bindings like Python 2 (see python2-lxc) that were always kept out of tree.
Splitting Out The Legacy Template Build System
A big portion of the LXC
templates will be moved to the new
lxc-templates repository.
LXC
used to maintain simple shell scripts to build container images from for
a lot of distributions including CentOS
, Fedora
, ArchLinux
, Ubuntu
,
Debian
and a lot of others. While the shell scripts worked well for a long
time they suffered from the problem that they were often different in terms of
coding style, the arguments that they expected to be passed, and the features
they supported. A lot of things these shells scripts did when creating an image
is not needed any more. For example, most distros nowadays provide a custom
cloud image suitable for containers and virtual machines or at least provide
their own tooling to build clean new images from scratch. Another problem we
saw was that security and maintenance for the scripts was not sufficient. This
is why we decided to come up with a simple yet elegant replacement for the
template system that would still allow users to build custom LXC
and LXD
container images for the distro of their choice. So the templates will be
replaced by distrobuilder as the
preferred way to build LXC
and LXD
images locally.
distrobuilder is a project my colleague
Thomas is currently working on. It aims
to be a very simple Go project focussed on letting you easily build full system
container images by either using the official cloud image if one is
provided by the distro or by using the respective distro’s recommended
tooling (e.g. debootstrap
for Debian
or pacman
for ArchLinux
). It
aims to be declarative, using the same set of options for all distributions
while having extensive validation code to ensure everything that’s downloaded
is properly validated.
After this cleanup only four POSIX
shell compliant templates will remain in
the main LXC
repository:
busybox
This is a very minimal template which can be used to setup a busybox
container. As long as the busybox
binary is found you can always built
yourself a very minimal privileged or unprivileged system or application
container image; no networking or any other dependencies required. All you need
to do is:
lxc-create c3 -t busybox
download
This template lets you download pre-built images from our image servers. This is likely what currently most users are using to create unprivileged containers.
local
This is a new template which consumes standard LXC
and LXD
system
container images. A container can be created with:
lxc-create c1 -t local -- --metadata /path/to/meta.tar.xz --fstree /path/to/rootfs.tar.xz
where the --metadata
flag needs to point to a file containing the metadata
for the container. This is simply the standard meta.tar.xz
file that comes
with any pre-built LXC
container image. The --fstree
flag needs to point to
a filesystem tree. Creating a container is then just:
oci
This is the template which can be used to download and run OCI containers. Using it is as simple as:
lxc-create c2 -t oci -- --url docker://alpine
Here’s another asciicast: