Turn on completion in zsh

Include the following lines in your .zshrc

autoload bashcompinit bashcompinit export -f _have() { which $@ >/dev/null } source /usr/share/bash-completion/completions/lxc

This turns on ability to use bash completions within zsh.

Then we need to create our own function for the _have bashism that is typically defined in /etc/bash_completion.

Finally just source the already awesome tab-completion for zsh.

launch tmux in a lxc

A slightly more involved version of this.

function lmux() { lxc exec $1 -- sh -ic 'WHO=$(awk -F":" "\$3>999&&\$1!=\"nobody\" {print \$1; exit 1}" /etc/passwd || getent passwd 0 | sed "s_:.*__"); su -c "cd ~; script -qfc \"tmux attach\" /dev/null" $WHO' } function lmux-autocomplete { reply=( $(lxc list -c "n" | grep -v '^+' | tr -d '| ' | tail -n +2) ) } compctl -K lmux-autocomplete lmux

It gets the first user from /etc/passwd or falls back to root, changes to the home directory of that user and runs “tmux attach” via script which creates a tty for us.

Since we obviously want autocomplete, write a small function to do that and enable it.

Use dns names for your lxcs

If you are using NetworkManager on your machine where lxd is running and want dns names for your containers. Simply run the following:

echo server=/lxd/$(lxc network get lxdbr0 ipv4.address | sed 's/\/.*//') | sudo tee /etc/NetworkManager/dnsmasq.d/lxd.conf sudo service network-manager restart

This assumes that you are using managed networking so that there is a line like server=/lxd/10.232.128.1 (the dnsmasq config line to add a dns server authoritative for the “lxd” TLD from that ip — where the lxd daemon has its own dnsmasq for the managed network).

So now if you can reach your lxcs like so:

$ lxc launch ubuntu cooltest $ ping cooltest.lxd PING cooltest.lxd (10.232.128.58) 56(84) bytes of data. 64 bytes from 10.232.128.58 (10.232.128.58): icmp_seq=1 ttl=64 time=0.046 ms 64 bytes from 10.232.128.58 (10.232.128.58): icmp_seq=2 ttl=64 time=0.045 ms 64 bytes from 10.232.128.58 (10.232.128.58): icmp_seq=3 ttl=64 time=0.043 ms

And use that in your browser if you are doing something. Never have to remember ips again!