[lxc-devel] LXC 3.0.0: Packaging Changes To Be Aware Of

Christian Brauner christian.brauner at canonical.com
Sat Apr 7 14:54:07 UTC 2018


Hey everyone,

LX{C,FS,D} upstream here. :)

I'm sorry to ping you all at once in this mail and I seriously hope I only
added actual package maintainers for LXC based projects in their respective
distros to this mail. If not I'm genuinely sorry to have banged on your door
(or rather inbox) on a Saturday!

A few days ago we released LXC [1] and LXD [2] 3.0.0 which are going to be our
next LTS releases receiving support from upstream for 5 years until 2023.

LXC 3.0.0 not just introduces a lot of changes and improvements on all fronts
in general but will also likely require changes in packaging. These changes are
what I'd like to inform you about because we really don't want you all to run
into pointless confusion and problems.

The distros I think should be reached by this mail are:

Alpine
ArchLinux
Debian
Fedora
Gentoo
NixOS
openSUSE
OpenWrt

Please, if anyone of you know other packagers in other distros that are not
derivatives of the above please forward this mail. Don't leave fellow
maintainers hanging. :)

Here is a list of what we consider will most likely affect you as packagers:

1. **Important** the lxc-templates have been moved out of the main LXC tree
   into a separate repository
   https://github.com/lxc/lxc-templates

   This means that without this separate package LXC will now only come with
   the following templates:

   lxc-busybox
   lxc-download
   lxc-local
   lxc-oci

2. **Important** distrobuilder is the new way of creating machine/system
    container images
   The templates have been replaced by a new project called "distrobuilder"
   [5]. 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.

   **Warning: Advertisement** please consider packaging distrobuilder.
   https://github.com/lxc/distrobuilder

   A more lengthy justification can be found at:
   https://brauner.github.io/2018/02/27/lxc-removes-legacy-template-build-system.html

3. The python3 bindings have been moved out of the main LXC tree and are
   maintained in a separate Github repo under the LXC namespace.
   https://github.com/lxc/python3-lxc

   This means that the

   --with-python

   configure flag should be dropped.

   A more lengthy justification can be found at:
   https://brauner.github.io/2018/02/27/lxc-removes-legacy-template-build-system.html

4. The lua bindings have been moved out of the main LXC tree and are
   maintained in a separate Github repo under the LXC namespace.
   https://github.com/lxc/lua-lxc

   This means that the

   --with-lua

   configure flag should be dropped.

   A more lengthy justification can be found at:
   https://brauner.github.io/2018/02/27/lxc-removes-legacy-template-build-system.html

5. **Important** the pam_cgfs.so pam module has moved from the LXCFS tree into
   the LXC tree
   https://github.com/lxc/lxc/blob/master/src/lxc/pam/pam_cgfs.c

   This means that in order to compile the pam module with LXC you should pass:

   --enable-pam

   and

   --with-pamdir=PAM_PATH

   when compiling LXC.
   In case you don't know what the pam module is for it is used to allow
   unprivileged cgroup management for fully unprivileged containers. It
   useful for all container runtimes (e.g. openSUSE is shipping and
   using it). For a slightly deeper look at it I suggest you read [3].

6. Removeal of legacy cgroup drivers
   This includes the cgmanager driver. Which also implies that

   This means that the

   --with-cgmanager

   configure flag should be dropped. The cgmanager package can likely also be
   dropped unless you maintain a package for our 1.0 stable branch!

   A more lengthy justification can be found at:
   https://brauner.github.io/2018/02/20/lxc-removes-legacy-cgroup-drivers.html

7. All legacy configuration keys have been removed.
   With LXC 2.1.0 we started to print warning when legacy configuration keys
   were used in the container config and started yelling at people that we will
   remove legacy configuration keys in LXC 3.0.0. This is now reality.
   We ship an upgrade script since LXC 2.1:

   chb at conventiont|~
   > lxc-update-config
   /usr/bin/lxc-update-config -h|--help [-c|--config]
   config: the container configuration to update

   which will automatically replace legacy configuration keys with their new
   counterparts. If the upgrade fails it will have left a *.backup file in the
   same directory where the config file was and it can simply be restored.

   Please make sure your users know about this update script. Fwiw, [4]
   provides a list of all removed legacy configuration keys and their new
   counterparts.

8. **Warning: Advertisement** for any distro on here that does not already
   package LXCFS which has been around for a long time they should consider it.
   It provides a *runtime agnostic* way of partially virtualizing /proc through
   a minimal multi-threaded fuse filesystem.
   These mocked files can be overmounted over their /proc counterparts in the
   container.
   https://github.com/lxc/lxcfs

For a thorough overview over what has changed please see:
https://discuss.linuxcontainers.org/t/lxc-3-0-0-has-been-released

Thank you all for packaging LXC, LXCFS, and LXD!
The LXC team

[1]: https://discuss.linuxcontainers.org/t/lxc-3-0-0-has-been-released
[2]: https://discuss.linuxcontainers.org/t/lxd-3-0-0-has-been-released
[3]: https://brauner.github.io/2018/02/28/lxc-includes-cgroup-pam-module.html
[4]: Legacy Key                           | New Key                       | Comments
     -------------------------------------|-------------------------------|---------
     lxc.aa_profile                       | lxc.apparmor.profile          |
     lxc.aa_allow_incomplete              | lxc.apparmor.allow_incomplete |
     lxc.console                          | lxc.console.path              |
     lxc.devttydir                        | lxc.tty.dir                   |
     lxc.haltsignal                       | lxc.signal.halt               |
     lxc.id_map                           | lxc.idmap                     |
     lxc.init_cmd                         | lxc.init.cmd                  |
     lxc.init_gid                         | lxc.init.gid                  |
     lxc.init_uid                         | lxc.init.uid                  |
     lxc.kmsg                             | -                             | removed
     lxc.limit                            | lxc.prlimit                   |
     lxc.logfile                          | lxc.log.file                  |
     lxc.loglevel                         | lxc.log.level                 |
     lxc.mount                            | lxc.mount.fstab               |
     lxc.network                          | lxc.net                       |
     lxc.network.                         | lxc.net.[i].                  |
     lxc.network.flags                    | lxc.net.[i].flags             |
     lxc.network.hwaddr                   | lxc.net.[i].hwaddr            |
     lxc.network.ipv4                     | lxc.net.[i].ipv4.address      |
     lxc.network.ipv4.gateway             | lxc.net.[i].ipv4.gateway      |
     lxc.network.ipv6                     | lxc.net.[i].ipv6.address      |
     lxc.network.ipv6.gateway             | lxc.net.[i].ipv6.gateway      |
     lxc.network.link                     | lxc.net.[i].link              |
     lxc.network.macvlan.mode             | lxc.net.[i].macvlan.mode      |
     lxc.network.mtu                      | lxc.net.[i].mtu               |
     lxc.network.name                     | lxc.net.[i].name              |
     lxc.network.script.down              | lxc.net.[i].script.down       |
     lxc.network.script.up                | lxc.net.[i].script.up         |
     lxc.network.type                     | lxc.net.[i].type              |
     lxc.network.veth.pair                | lxc.net.[i].veth.pair         |
     lxc.network.vlan.id                  | lxc.net.[i].vlan.id           |
     lxc.pivotdir                         | -                             | removed
     lxc.pts                              | lxc.pty.max                   |
     lxc.rebootsignal                     | lxc.signal.reboot             |
     lxc.rootfs                           | lxc.rootfs.path               |
     lxc.se_context                       | lxc.selinux.context           |
     lxc.seccomp                          | lxc.seccomp.profile           |
     lxc.stopsignal                       | lxc.signal.stop               |
     lxc.syslog                           | lxc.log.syslog                |
     lxc.tty                              | lxc.tty.max                   |
     lxc.utsname                          | lxc.uts.name                  |

[5]: https://github.com/lxc/distrobuilder
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180407/2d35428b/attachment.sig>


More information about the lxc-devel mailing list