Fedora 29: Install LXD for container

This article will describe installing LXD and running containers.

1 Install LXD

Install snap.

#!/bin/sh -e

# Install snapd.
sudo dnf install -y snapd
sudo systemctl start snapd.seeded.service
while [ "$(systemctl is-active snapd.seeded.service)" != "active" ]; do
  sleep 1;
done
sudo reboot

Install LXD.

#!/bin/sh -e

# Install lxd.
# Disable SELinux temporary because it prevent lxd installation.
sudo setenforce 0
sudo snap install lxd
sudo gpasswd -a hiroom2 lxd
sudo reboot

2 Initialize LXD

The following script will initialize LXD.

#!/bin/sh


# Would you like to use LXD clustering? (yes/no) [default=no]: no
# Do you want to configure a new storage pool? (yes/no) [default=yes]: yes
# Name of the new storage pool [default=default]: default
# Name of the storage backend to use (dir, lvm, zfs) [default=zfs]: dir
# Would you like to connect to a MAAS server? (yes/no) [default=no]: no
# Would you like to create a new network bridge? (yes/no) [default=yes]: yes
# What should the new bridge be called? [default=lxdbr0]: lxdbr0
# What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”)
# [default=auto]: auto
# What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”)
# [default=auto]: none
# Would you like LXD to be available over the network? (yes/no)
# [default=no]: no
# Would you like stale cached images to be updated automatically? (yes/no)
# [default=yes] yes
# Would you like a YAML "lxd init" preseed to be printed? (yes/no)
# [default=no]: no

# Initialize LXD with NAT network.
lxd waitready
cat <<EOF | lxd init
no
yes
default
dir
no
yes
lxdbr0
auto
none
no
yes
no
EOF

3 Run container

This can download debian/stretch image and run it. IP address is assigned to container.

$ lxc launch images:debian/stretch debian
<snip>
$ lxc exec debian ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
state UP group default qlen 1000
    link/ether 00:16:3e:29:1e:7d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::216:3eff:fe29:1e7d/64 scope link tentative
       valid_lft forever preferred_lft forever