仮想環境(3)

Date: 2021/01/28 (initial publish), 2021/07/13 (last update)

Source: jp/note-00029.md

Previous Post Top Next Post

TOC

引き続きchrootの強化版のようなLXCを使っての仮想環境作成を特権ユーザーが 作成する簡単なケースを深堀りします。

LXC仮想環境の停止

仮想環境のカスタマイズした起動をするためには、作成し起動した仮想環境のSTATESTOPPED(停止)に確実にします。

$ sudo lxc-stop -n sid
$ sudo lxc-ls -f
NAME   STATE   AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
buster STOPPED 0         -      -    -    false
sid    STOPPED 0         -      -    -    false

LXC仮想環境とのデーター共有起動

仮想環境のカスタマイズした起動時に、設定変数を指定することで、ホスト側の /home/fish/srcを仮想環境内の/home/fishとしてアクセスできるように共有化 された仮想環境として起動できます。この仮想環境環境にユーザーアカウントに ログインするまでの手順は以下です。

$ sudo lxc-start -n sid \
  -s "lxc.mount.entry=/home/fish/src home/fish none bind 0 0"
$ sudo lxc-attach -n sid
root@sid:/# login
sid login: fish
Password:
 ...
fish@sid:~$

ここで仮想環境内のホームディレクトリーで見えるのは/home/fish/srcと同一デバイス上の ファイルだけです。(再帰的マウントはされません。)

このLXC仮想環境内でパッケージビルドなどをすれば綺麗な環境ででき、さらにその結果に ホスト側から直接アクセスできます。

ここでは、lxc-attach+loginでユーザーアカウントに入っていますが、lxc-consoleを 使っても良いです.

LXC仮想環境とのデーター共有設定

立ち上げ毎に長い-sオプションを使ってのbindマウント指定をなくするには、lxc-create コマンドが作った基本の仮想環境の設定ファイルconfigを編集し、設定します。

# cd /var/lib/lxc/sid
# cp config config.orig
# vim config
 ...
# diff -u config.orig config
--- config.orig	2021-01-29 09:34:50.520450872 +0900
+++ config	2021-01-29 00:30:53.868368439 +0900
@@ -13,6 +13,7 @@
 lxc.apparmor.profile = generated
 lxc.apparmor.allow_nesting = 1
 lxc.rootfs.path = dir:/var/lib/lxc/sid/rootfs
+lxc.mount.entry=/home/fish/src/public home/fish/mnt none bind 0 0

 # Common configuration
 lxc.include = /usr/share/lxc/config/debian.common.conf

これでホスト側の/home/fish/srcを仮想環境内の/home/fishとしてアクセス できるように共有化した仮想環境として立ち上げが、単純な以下の操作でできる ようになります。

$ sudo lxc-start -n sid

使い捨てのLXC仮想環境

pbuilderでコアのシステム環境のコピーをベースにした使い捨ての仮想環境をchrootで準備し パッケージを作成するように、LXCででもコアのシステム環境のコピーをベースにした使い捨ての 仮想環境を準備してみましょう。

これには、lxc-startに代えlxc-copy-eフラグとともに使います。(聞きなれない “ephemeral"という表現は「儚い」「束の間であっけない」と言うことです。)

lxc-copyにはlxc-start-sオプションのような機能がないので、仮想環境とのデーター 共有を実現するには、コピー元の仮想環境の設定ファイルconfigを上記のように編集し lxc.mount.entryを追加設定しておく必要があります。

$ sudo lxc-stop -n sid
$ sudo lxc-info -n sid
Name:           sid
State:          STOPPED
$ sudo lxc-copy -n sid -N sid-dev01 -e
Created sid-dev01 as clone of sid
$ sudo lxc-ls -f
NAME      STATE   AUTOSTART GROUPS IPV4       IPV6 UNPRIVILEGED
buster    STOPPED 0         -      -          -    false
sid       STOPPED 0         -      -          -    false
sid-dev01 RUNNING 0         -      10.0.3.220 -    false

lxc-copyで使い捨てのLXC仮想環境を起動をするには、実行前にコピー元の仮想環境のSTATESTOPPED(停止)に確実にする必要があります。

こうして作った使い捨てのLXC仮想環境は、lxc-attachlxc-consoleで入り利用できます。

さらに、利用後の使い捨てのLXC仮想環境は、lxc-stopとするだけでlxc-destroyすること無く 消滅するので、開発ホストシステム中のゴミファイルの蓄積を防げます。

$ sudo lxc-stop sid-dev01
$ sudo lxc-ls -f
NAME   STATE   AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
buster STOPPED 0         -      -    -    false
sid    STOPPED 0         -      -    -    false
Previous Post Top Next Post