LXCの非特権コンテナの移行
ゴール
前提
- これの続き
- OS: Ubuntu 14.04 Server (新旧両方とも)
- ユーザ名: container(新旧両方ともに存在している)
- 移行コンテナ
参考リンク
旧サーバでやること
コンテナの停止
$ lxc-stop -n mysql $ lxc-stop -n redmine
コンテナをtarで固める
$ cd /home/container/.local/share/lxc $ sudo tar zcvf $HOME/mysql.tar.gz mysql $ sudo tar zcvf $HOME/redmine.tar.gz redmine
↑sudoつけておく。使用するソフトウェアによっては自動的に独自のユーザを作ることもあり、所有者がバラバラでも正常に固めるため。
tarの転送
$ scp mysql.tar.gz redmine.tar.gz container@{移行先ホストのIP}:
コンテナ用DHCPファイルも移行
$ scp /etc/lxc/dnsmasq.conf container@{移行先ホストのIP}:
新サーバでやること
tarの展開
$ mkdir -p /home/container/.local/share/lxc $ sudo tar --numeric-owner -xpzf /home/container/mysql.tar.gz -C /home/container/.local/share/lxc $ sudo tar --numeric-owner -xpzf /home/container/redmine.tar.gz -C /home/container/.local/share/lxc
↑sudoつけること!忘れると所有者情報が更新されてしまう。
パーミッションの設定
$ sudo chown :container /home/container/.local/share/lxc/{mysql,mysql/config} $ sudo chown :container /home/container/.local/share/lxc/{redmine,redmine/config}
↑.local/share/lxc/{mysql,redmine}
になるように配置できていればOK。いなければ適宜配置。
lxcインストール
非特権で動かせるように。DHCPの設定をしてる場合はそれもする。
コンテナで使用しているsub uid/gidを確認
# cat /home/container/.local/share/lxc/mysql/config | grep lxc.id_map lxc.id_map = u 0 165536 65536 lxc.id_map = g 0 165536 65536
sub uid/gidの追加
# sudo usermod -v 165536-231071 -w 165536-231071 container ↑確認したsub uid/gidから65535足した数値の範囲
おわり
移行完了。念のため一度再起動しておく。 確認として、移行先で
$ lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART -------------------------------------------------- mysql STOPPED - - NO redmine STOPPED - - NO
$ ls -l /home/container/.local/share/lxc/mysql total 16 drwxrwx--- 3 165536 container 4096 May 13 01:18 ./ drwxr-xr-x 9 container container 4096 May 18 21:51 ../ -rw-rw-r-- 1 container container 701 May 13 01:18 config drwxr-xr-x 21 165536 165536 4096 May 18 19:56 rootfs/
となっていればOK。ほかのユーザとsub uid/gidが被ることがあるが大丈夫なのかなあ…