====== LXC - Install LXC ======
sudo snap install lxd
or
sudo apt install lxc
**NOTE:** The snap version will most likely be more up to date.
----
===== Install LXC Utils =====
sudo apt install lxc-utils lxc-templates
----
===== Get Info =====
lxc info
returns:
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first instance, try: lxc launch ubuntu:18.04
----
===== Configure LXD =====
Before you can create an instance, you need to configure LXD.
lxd init
**NOTE:** This will prompt for how to configure it. Just take the defaults for now.
* Would you like to use LXD clustering? (yes/no) [default=no]:
* Do you want to configure a new storage pool? (yes/no) [default=yes]:
* Name of the new storage pool [default=default]:
* Name of the storage backend to use (dir, lvm, ceph, btrfs) [default=btrfs]:
* Create a new BTRFS pool? (yes/no) [default=yes]:
* Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
* Size in GB of the new loop device (1GB minimum) [default=30GB]:
* 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]:
----
===== Create ~/.config/lxc =====
mkdir ~/.config/lxc
----
===== Create ~/.config/lxc/default.conf =====
lxc.include = /etc/lxc/default.conf
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536
----
===== Test =====
lxc-create -t download -n test
**NOTE:** The **download** option is used to display a list of all available images, allowing one to be selected.
**NOTE:** An error may be seen:
Setting up the GPG keyring
ERROR: Unable to fetch GPG key from keyserver
lxc-create: test: lxccontainer.c: create_run_template: 1626 Failed to create container from template
lxc-create: test: tools/lxc_create.c: main: 319 Failed to create container test
Try using the following:
lxc-create -t download -n test -- --keyserver hkp://p80.pool.sks-keyservers.net:80
or
lxc-create -n test -t download -- --no-validate
returns:
Setting up the GPG keyring
Downloading the image index
---
DIST RELEASE ARCH VARIANT BUILD
---
alpine 3.10 amd64 default 20210103_13:00
alpine 3.10 arm64 default 20210103_13:00
alpine 3.10 armhf default 20210103_13:00
alpine 3.10 i386 default 20210103_13:00
...
centos 8 amd64 default 20210103_07:41
centos 8 arm64 default 20210103_07:08
centos 8 ppc64el default 20210103_07:08
debian bullseye amd64 default 20210103_05:24
debian bullseye arm64 default 20210103_05:24
...
ubuntu trusty arm64 default 20210103_07:42
ubuntu trusty armhf default 20210103_07:42
ubuntu trusty i386 default 20210103_07:42
ubuntu trusty ppc64el default 20210103_07:42
ubuntu xenial amd64 default 20210103_07:42
ubuntu xenial arm64 default 20210103_07:43
ubuntu xenial armhf default 20210103_07:43
...
----
==== Select which image to use ====
In this example the following is chosen:
* Distribution: **ubuntu**.
* Release: **xenial**.
* Architecture: **amd64**.
Distribution:
ubuntu
Release:
xenial
Architecture:
amd64
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs
---
You just created an Ubuntu xenial amd64 (20210103_07:42) container.
To enable SSH, run: apt install openssh-server
No default root or user password are set by LXC.
----
==== Check the container status ====
lxc-info -n test
returns:
Name: test
State: STOPPED
----
==== Start the Container ====
lxc-start -n test
**NOTE:** The following error may be seen:
lxc-start: test: lxccontainer.c: wait_on_daemonized_start: 851 Received container state "ABORTING" instead of "RUNNING"
lxc-start: test: tools/lxc_start.c: main: 308 The container failed to start
lxc-start: test: tools/lxc_start.c: main: 311 To get more details, run the container in foreground mode
lxc-start: test: tools/lxc_start.c: main: 313 Additional information can be obtained by setting the --logfile and --logpriority options
By default, unprivileged users are not allowed to create any network device on the host. To fix:
peter veth lxcbr0 10
**NOTE:** This means that peter is allowed to create up to 10 veth devices connected to the lxcbr0 bridge.
----
==== Check the container status again ====
lxc-info -n test
returns:
Name: test
State: RUNNING
PID: 793414
IP: 10.0.3.101
Link: veth1000_qkOr
TX bytes: 1.96 KiB
RX bytes: 11.54 KiB
Total bytes: 13.49 KiB
**NOTE:** This shows it is running.
----
==== Get a Shell inside the Container ====
lxc-attach -n test
**NOTE:** Enter **exit** to exit the Container Shell, back to the host.
----
==== Stop the Test Container ====
lxc-stop -n test
----
==== Remove the Test Container ====
lxc-destroy -n test
----
===== References =====
https://linuxcontainers.org/lxd/docs/master/
https://linuxcontainers.org/lxd/getting-started-cli/