概要
- 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)
$ 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環境として利用中であることを想定しています.
$ 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版の削除
$ 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の環境設定
$ 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
$ go get github.com/lxc/lxd/lxd-p2c
$ cd ~/go
$ go build github.com/lxc/lxd/lxd-p2c/
$ ./lxd-p2c --version
3.14
# 移行先のLXC環境設定
転送開始時に聞かれるパスワードを設定する.
$ sudo lxc config set core.trust_password exsample-password
移行とIP設定
移行したいVM上で以下のコマンドを実行する.IP(192.168.10.5
)とコンテナ名(containerA
)は適宜読み替えてください.
$ sudo ./lxd-p2c https://192.168.10.5:8443 containerA /
HDDの1Gbps回線環境で,大体5MB/sぐらいで転送が進んだ.
起動とIP設定
元々,Brdige接続で固定IPを振っていたので,デバイス名を修正して再起動することで,元のIPを引き継ぐ(本作業の前にVirtualBoxのVMはシャットダウンしておく
$ lxc start containerA
$ lxc exec containerA bash
# vim /etc/network/interfaces
# reboot
デバイス名がenp0s3
になっているのでeth0
に修正し,reboot.
遭遇したエラー
aptで入るgoだとbuildができない(解決済み)
$ 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が動かない
# 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
全滅.どうもマウントできていないようだが…原因調査中