LXD no macOS

Eu uso o LXD no macOS, pode ser útil para alguém se eu compartilhar minha configuração, que eu continuo documentando e atualizando em um Gist. Assim, acompanhe a postagem a seguir e saiba como usar o LXD no MacOS.

Configuração da VM

Baixe um ISO do Ubuntu Server (https://www.ubuntu.com/download/server).

Crie uma nova máquina virtual VMWare, selecione boot a partir do ISO com 2 NICs configuradas como “Share with My Mac” e “Private to my Mac”, respectivamente. Durante a criação do Ubuntu VM, haverá uma página para selecionar o software instalado. Selecione “servidor OpenSSH”.

Configuração de Rede

Então, entre na VM recém-criada e instale os bridge-utils:

apt install bridge-utils

Edite /etc/network/interfaces com uma ponte para cada uma das duas placas de rede, ambas DHCP (ip link show lhe dará os nomes corretos para essas interfaces).

## A interface de rede principal
#auto ens33
#iface ens33 inet dhcp

auto br0
iface br0 inet dhcp
         bridge_ports ens33
         bridge_fd 0
         bridge_maxwait 0
         dns-search home

auto br1
iface br1 inet dhcp
         bridge_ports ens38
         bridge_fd 0
         bridge_maxwait 0
         dns-search local

Então, reinicie com sudo reboot. Agora você deve conseguir fazer ping fora da VM.

$ ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56 (84) bytes of data.
64 bytes de 8.8.8.8: icmp_req = 1 ttl = 63 time = 340 ms
…

Instale open-vm-tools:

apt install open-vm-tools

Configurando AVAHI

Em seguida, configure o Avahi para transmitir host-names para que não precisemos lembrar de endereços de IP atribuídos por DHCP. No host do Ubuntu, instale o avahi-daemon:

apt install avahi-daemon

No arquivo de configuração /etc/avahi/avahi-daemon.conf, altere estas linhas para esclarecer que nossos nomes de host precisam funcionar apenas no segundo adaptador de rede:

allow-interfaces=br1,ens38
deny-interfaces=br0,ens33,lxdbr0

Então, reinicie o Avahi:

sudo service avahi-daemon restart

Agora, você deve conseguir fazer ping e ssh para o $hostname na máquina virtual e na linha de comando do seu Mac.

Servidor LXD (Ubuntu VM)

sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
sudo apt update
sudo apt upgrade

Ver: https://linuxcontainers.org/lxd/getting-started-cli/

$ sudo apt install zfsutils-linux
$ sudo lxd init

Gere um novo perfil LXD apartir do script:

https://gist.github.com/earnubs/7dffc5bb5fe613d02ef9fc924cc583ee

Teste o lxc:

$ lxc launch ubuntu:16.10 --ephemeral -p $USER
$ lxc list
+--------------+---------+--------------------------------+------+-----------+-----------+
| NAME         |  STATE  |              IPV4              | IPV6 |    TYPE   | SNAPSHOTS |
+--------------+---------+--------------------------------+------+-----------+-----------+
| enabling-ape | RUNNING | 192.168.234.179 (eth0)         |      | EPHEMERAL | 0         |
|              |         | 172.16.183.150 (eth1)          |      |           |           |
+--------------+---------+--------------------------------+------+-----------+-----------+

Pode levar alguns minutos para o cloud-init configurar e reiniciar a eth1.

Permitir operações remotas no servidor LXD (do macOS)

lxc config set core.https_address "[::]"
lxc config set core.trust_password alguma senha

Cliente LXD (macOS)

Assim, com o ambiente Go configurado:

$ go get github.com/lxc/lxd
$ cd $GOPATH/src/github.com/lxc/lxd
$ go install -v ./lxc
$ lxc remote add <name> UBUNTU_VM_HOST.local

Finalmente no macOS

$ ssh enabling-ape.local -A