LXC, LXD und “Error: not found”

Beim Lernen wie LXC und LXD funktionieren ist mir eine Meldung recht häufig aufgetreten. Das war die Fehlermeldung

Error: not found

Wie es sich herausgestellt hat, habe ich ein LXD Kommando ausgeführt und wollte das auf einen Container anwenden, den ich aber mit LXC erstellt hatte. Das führt aber zur Frage: Was ist der Unterschied zwischen LXC und LXD.

LXC ist eine Abkürzung für “Linux Container”. Sie funktioniert wie eine normale VM, jedoch mit weniger Overhead als andere Hypervisor.

LDX ist hingegen eine Erweiterung von LXC. LXD ist ein Systemdaemon und dieser verbindet sich mit libxlc, der Bibliothek, auf der LXC aufgebaut ist. Um mit dem Daemon zu kommunizieren, benutzt man eine REST API. LXD ist hierbei der neue Weg, Container zu erstellen und zu verwalten und ist eine Alternative zu den LXC Werkzeugen. Es wird abgerate, LXC und LXD gleichzeitig laufen zu lassen.

Den Unterschied zwischen LXC und LXD bemerkt man auch an den Kommandos, die man aufruft. Kommandos, die ein Bindestrich enthalten wie z.B. lxc-ls oder lxc-create sind LXC Kommandos. Kommandos ohne ein Bindestrich wie z.B. lxc info kommen von LXD.

Quellen

lxd auf Ubuntu 18.04.2 LTS installieren

In diesem Post will ich mit ein paar Stichpunkten beschreiben, wie man lxd auf Ubuntu 18.04.2 LTS installiert. Da es sich bei mir um die Server Version handelt, musste ich am Ende nicht so viel manuell machen.

Für die, die nicht wissen was lxd ist: lxd ist eine Software um Container zu verwalten. In diesem Fall um Linux Container.

Der erste Schritt besteht also darin, lxd zu installieren:

$ sudo apt install lxd

Anschließend wird ZFS installiert. Dies ist sinnvoll, weil die Container mit ZFS die Copy-on-Write-Funktionalität nutzen und dadurch schneller werden:

$ sudo apt install zfsutils-linux

Nachdem die Pakete lxd und zfsutils-linux installiert worden sind, müsste man in der neu angelegten Gruppe lxd sein. Damit diese Änderung aber aktiv wird, muss man sich neu einloggen. Anschließend muss man nur noch das Kommando

$ sudo lxd init

aufrufen. Nun wird man einige Dinge gefragt. In meinem Fall habe ich die Standardwerte so gelassen wie sie sind, nur bei dem Namen für den Storagepool habe ich einen anderen genommen:

$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]: yes
Name of the new storage pool [default=default]: lxd-pool
Name of the storage backend to use (btrfs, dir, lvm, zfs) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=15GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

Das sollte es eigentlich gewesen sein.