Ubuntu 16.04のVMをUbuntu 18.04上のLXCにlxd-p2cした手順と遭遇したエラー

# 概要
* VirtualBoxで動かしていたUbuntu 16.04のVMをUbuntu 18.04上のLXCとして移行する
* goがaptで入るバージョンだとうまく動作しなかったが，snapで導入すればうまくできた
* LXDのバージョンが微妙に違ったけど移行できた
* 元々snapで動かしていたもの（例えばnextcloud）は**動かない**．snapではなく入れていたもの（Apache環境のRedmineとかソースコードから入れていたowncloud）は動く

## 前書きメモ
* 移行元にLXDをインストールしたけど，不要かもしれない
* 参考：https://discuss.linuxcontainers.org/t/howto-use-lxd-p2c/3574
* 元々snapで動かしていたもの（例えばnextcloud）は**動かない**

# 前提＆環境

## 移行元（VirtualBox上のVM）
```bash
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.6 LTS
Release:	16.04
Codename:	xenial
$ uname -a
Linux hostnameA 4.4.0-154-generic #181-Ubuntu SMP Tue Jun 25 05:29:03 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
```

## 移行先
既にLXD環境として利用中であることを想定しています．

```bash
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
$ uname -a
Linux hostnameB 4.15.0-51-generic #55-Ubuntu SMP Wed May 15 14:27:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ lxc --version
3.0.3
$ lxd --version
3.0.3
```

# 移行したいVM上での作業
## snap版のLXDとgoのインストール
### apt版の削除
```bash
$ lxd --version
2.0.11
$ lxc --version
2.0.11
$ sudo apt purge lxd lxd-client
$ go version
go version go1.6.2 linux/amd64
$ sudo apt purge golang-go
```

### snap版のインストールとgoの環境設定
```bash
$ sudo snap install lxd
$ lxd --version
3.14
$ sudo snap install go --classic
$ export PATH=/snap/bin:$PATH
$ go version
go version go1.12.6 linux/amd64
$ mkdir ~/go
$ export GOPATH=~/go
```

なお，上記でexport PATHしているように，```/snap/bin```にPATHを通さないとlxcとgoコマンドが使えない．

## lxd-p2cのbuild
```bash
$ go get github.com/lxc/lxd/lxd-p2c
$ cd ~/go
$ go build github.com/lxc/lxd/lxd-p2c/
$ ./lxd-p2c --version
3.14
```

#　移行先のLXC環境設定
転送開始時に聞かれるパスワードを設定する．

```bash
$ sudo lxc config set core.trust_password exsample-password
```

# 移行とIP設定
移行したいVM上で以下のコマンドを実行する．IP（```192.168.10.5```）とコンテナ名（```containerA```）は適宜読み替えてください．

```bash
$ sudo ./lxd-p2c https://192.168.10.5:8443 containerA /
```

HDDの1Gbps回線環境で，大体5MB/sぐらいで転送が進んだ．

## 起動とIP設定
元々，Brdige接続で固定IPを振っていたので，デバイス名を修正して再起動することで，元のIPを引き継ぐ（本作業の前にVirtualBoxのVMはシャットダウンしておく

```bash
$ lxc start containerA
$ lxc exec containerA bash
# vim /etc/network/interfaces
# reboot
```

デバイス名が```enp0s3```になっているので```eth0```に修正し，reboot．

# 遭遇したエラー
## aptで入るgoだとbuildができない（解決済み）
```bash
$ sudo apt install golang-go
$ go version
go version go1.6.2 linux/amd64
$ mkdir ~/go
$ export GOPATH=~/go
$ go get github.com/lxc/lxd/lxd-p2c
$ cd ~/go
$ go build github.com/lxc/lxd/lxd-p2c/
src/github.com/gorilla/websocket/client.go:9:2: cannot find package "context" in any of:
        /usr/lib/go-1.6/src/context (from $GOROOT)
        /home/userA/go/src/context (from $GOPATH)
src/github.com/gorilla/websocket/client.go:16:2: cannot find package "net/http/httptrace" in any of:
        /usr/lib/go-1.6/src/net/http/httptrace (from $GOROOT)
        /home/userA/go/src/net/http/httptrace (from $GOPATH)
```

## snapが動かない
```bash
# snap list
Name       Version  Rev    Tracking  Publisher   Notes
core                7270   stable    canonical✓  broken
go                  3947   stable    mwhudson    broken
lxd                 11098  stable    canonical✓  broken
nextcloud           13968  stable    nextcloud✓  broken
```

全滅．どうもマウントできていないようだが…原因調査中