The first release of the Incus project has been announced, in which the Linux Containers community is developing a fork of the LXD container management system, created by the original team of developers who once created LXD. The Incus code is written in Go and is distributed under the Apache 2.0 license.
Recall that the Linux Containers community oversaw the development of LXD until Canonical decided to develop LXD separately as a corporate project. The goal of the fork is to provide a managed alternative to the LXD project, controlled by Canonical, by an independent community. The Incus project also aims to address some conceptual errors made in LXD's development, which could previously not be corrected without breaking backward compatibility.
Incus provides tools for centralized management of containers and virtual machines deployed on both a single host and a cluster of multiple hosts. serversThe project is implemented as a background process that accepts network requests through a REST API and supports various storage backends (directory trees, ZFS, Btrfs, LVM), stateful snapshots, live migration of running containers from one machine to another, and tools for storing container images. LXC is used as the runtime for launching containers, including the liblxc library, a set of utilities (lxc-create, lxc-start, lxc-stop, lxc-ls, etc.), templates for building containers, and a set of bindings for various programming languages. Isolation is achieved using standard Linux kernel mechanisms (namespaces, cgroups, AppArmor, SELinux, Seccomp).
Functionally, the first release of Incus corresponds to the recently released LXD 5.18 update and is primarily focused on renaming and reorganizing the codebase, as well as removing outdated features. This new version also highlights specific changes in the command-line interface and API that could not be included in LXD due to backward compatibility requirements. In the future, the developers plan to transfer useful enhancements and fixes from the LXD codebase, while also adding their original innovations, which Canonical could opt to port to LXD.
The most notable changes:
- The transition to the embedded SQL engine Cowsql has been made ā a fork of Dqlite, created by the original author of Dqlite for the same reasons as Incus (to reduce influence from Canonical). Cowsql is compatible with SQLite, supports data replication, automatic recovery from failures, and ensures fault tolerance by distributing handlers across several nodes.
- A command āincus snapshotā has been added to the command-line interface for managing snapshots (replacing the separate lxc snapshot and restore commands). Through āincus snapshotā, you can perform operations to create, delete, list, rename, and restore a snapshot.
- The logic for processing the āincus config trust addā and āincus cluster addā commands has been changed; they now accept a single argument with a name and return a valid token. Operations related to the certificate via the āincus config trust addā command have been moved to a separate command āincus config trust add-certificateā.
- The command āincus adminā has been added, freeing administrators from the need to directly use lxc and lxd commands. The following subcommands are available:
- incus admin cluster
- incus admin init
- incus admin recover
- incus admin shutdown
- incus admin waitready
- The deprecated API endpoints /1.0/containers and /1.0/virtual-machines have been removed, replaced by /1.0/instances.
- The device /dev/lxd has been replaced with /dev/incus, and references to lxd in the code have been changed to incus.
- Type server configuration Replaced "map[string]any" with "map[string]string". The outdated core.trust_password authentication method has been deprecated in favor of token-based authentication, which interfered with the use of the "map[string]string" type.
- Outdated functions *Container have been removed from the API, which have been replaced by *Instance functions after the implementation of virtual machine management (for example, instead of CreateContainer, use CreateInstance).
- The lxd-to-incus utility has been added for migrating from LXD to Incus (automatic conversion of configuration files is supported, starting from LXD version 4.0 to 5.18). Cluster migration is not yet supported.
- Go language version 1.20 has been declared as the minimum supported version.
- Support for certain features tied to Ubuntu or dependent on outdated or unsupported software has been discontinued:
- Support for Ubuntu Fan wrappers (bridge.mode, fan.overlay_subnet, fan.underlay_subnet, fan.type), which relied on patches to the kernel and were only used in Ubuntu, has been removed.
- Support for shiftfs has been removed, which was tied to kernel packages for Ubuntuās virtual filesystem for mapping mount points to user namespace identifiers.
- Support for the Candid authentication system, specific to Canonical products, has been removed.
- Support for Canonical's proprietary implementation of the RBAC (Role Based Access Control) authentication mechanism, based on Macaroons and Candid, has been removed.
- Components for integration with MAAS (Metal-as-a-Service), a tool for quickly deploying Ubuntu configurations, have been removed.
- The concept of server access via a trusted password (core.trust_password) has been removed.
Source: opennet.ru
