現在位置: ホーム / みらくるブログ / VirtualBoxをLXCにインストールして、実行する

VirtualBoxをLXCにインストールして、実行する

VirtualBoxのLXC環境へのインストール手順を紹介します。ご存知の通り、LXC(コンテナ)を利用すると、簡単に独立したマシン環境を作成することができます。コンテナ上であれば、誤って必要なファイルを上書きしたり、破損しても、コンテナごと破棄すれば、迅速にやり直しできるので、アプリケーションを試用する場合に筆者はよく利用しています。多くのソフトウェアは、特別な手順なくコンテナ上でも動作します。しかしながら、VirtualBoxは、カーネルドライバやそれを利用するためのデバイスファイルが必要であり、そのインストールや実行には、いつくかの追加的な手順が必要になります。

今回の記事で、確認に用いたマシン環境は次のとおりです。

ホストCPU Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz
ホストOS Ubuntu 17.04
ゲストOS Ubuntu 17.04
VirtualBox 5.1 (AMD64)

次節以降で具体的な手順を示しますが、今回の構成上のポイントは、次のようになるかと思います。

  • ホストOSとゲストOSを同じにする
  • 上記は、ゲスト上でビルドしたカーネルドライバをホストでロードできるようにするため
  • LXCコンテナのconfigファイル設定で、ロードしたカーネルドライバをコンテナ上で使用できるようにする

コンテナの作成と起動

ホストマシン上で、次のコマンドを実行します。以下の例では、コンテナのマシン名はmacaroonです。

# lxc-create -t ubuntu -n macaroon

次のコマンドでコンテナを起動します。lxc-attachでコンテナのシェルが利用できます。

# lxc-start -n macaroon
# lxc-attach -n macaroon
root@macaroon:/#

コンテナ上でのVirtualBoxのインストール

公式サイトかドキュメントを参照しならがら、コンテナ上でインストールを進めていきます。

 /etc/apt/sources.listに以下の行を追加します。Ubuntuの異なるバージョンを用いる場合、水色で記載したzestyの部分を対応するコードネームに変更してください。

deb http://download.virtualbox.org/virtualbox/debian zesty contrib

その後、次のコマンドを入力します。

root@macaroon:/# apt install wget
root@macaroon:/# wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
root@macaroon:/# wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
root@macaroon:/# apt-get update
root@macaroon:/# apt-get install virtualbox-5.1

カーネルドライバのビルド

コンテナ上で次のコマンドを入力します。

root@macaroon:/#  make -C /usr/share/virtualbox/src/vboxhost

なお、コンテナ上にインストールされているカーネルヘッダのバージョンとホストOSのバージョンが同一でなければなりません。以下のようにそれぞれのバージョンを確認できます。異なる場合、ホスト・コンテナとも最新のものにアップデートします。

root@macaroon:/# dpkg -l | grep header
ii linux-headers-4.10.0-24 4.10.0-24.28 all Header files related to Linux kernel version 4.10.0
ii linux-headers-4.10.0-24-generic 4.10.0-24.28 amd64 Linux kernel headers for version 4.10.0 on 64 bit x86 SMP
ii linux-headers-generic 4.10.0.24.26 amd64 Generic Linux kernel headers
root@macaroon:/# cat /proc/version
Linux version 4.10.0-24-generic (buildd@lcy01-09) (gcc version 6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2) ) #28-Ubuntu SMP Wed Jun 14 08:14:34 UTC 2017
ホストOSのカーネルがバージョンアップされた場合、コンテナ上で、それに合わせたlinux-headersをダウンロードし、再度、カーネルドライバのビルドを行う必要があります。

ドライバのインストール

ホストOS上で、カーネルドライバのインストールを行います。

# cd /var/lib/lxc/macaroon/rootfs/usr/share/virtualbox/src/vboxhost/
# for i in vboxdrv vboxnetflt vboxnetadp vboxpci; do insmod $i.ko; done;

ドライバがロードされると、次のようにホスト上にデバイスファイルが作成されています。この時、デバイスのメジャー番号とマイナー番号を覚えておきます。

# ls -l /dev/vbox*
crw------- 1 root root 10, 55 6月 26 15:22 /dev/vboxdrv
crw------- 1 root root 10, 54 6月 26 15:22 /dev/vboxdrvu
crw------- 1 root root 10, 53 6月 26 15:26 /dev/vboxnetctl

コンテナでのデバイス利用の許可

一旦、コンテナをシャットダウンします。コンテナ上で次のコマンドを入力します。

# shutdown -h now

/var/lib/lxc/macaroon/configに次の行を追加します。デバイスのメジャー番号とマイナー番号は、さきほど確認したものを入力します。この例では、それぞれを水色で示しています。

lxc.cgroup.devices.allow = c 10:53 rwm
lxc.cgroup.devices.allow = c 10:54 rwm
lxc.cgroup.devices.allow = c 10:55 rwm

再度、コンテナを起動します。

# lxc-start -n macaroon
# lxc-attach macaroon

コンテナが起動したら、次のようにデバイスファイルを作成します。

root@macaroon:/# mknod /dev/vboxnetctl c 10 53
root@macaroon:/# mknod /dev/vboxdrvu c 10 54
root@macaroon:/# mknod /dev/vboxdrv c 10 55

VirtualBoxの起動

VirtualBoxのUIは、GUIです。マシン環境によってはiptablesなどが設定されているので、sshでXフォーワーディングを利用してコンテナにログインし、GUIをデスクトップマシンで表示するのが、比較的やりやすい方法です。そのためには、コンテナのIPを調べます。

root@macaroon:/# ip addr
(省略)
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:b0:ff:b7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.3.242/24 brd 10.0.3.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:feb0:ffb7/64 scope lin

また、xauthをインストールしておきます。

root@macaroon:/# apt install xauth

筆者の環境ではすでにSSHデーモンが起動されていましたが、念のために確認するには次のようにします。sshdが存在すればOKです。

root@macaroon:/# ps ax | grep sshd
246 ? Ss 0:00 /usr/sbin/sshd -D
335 ? S+ 0:00 grep --color=auto sshd

では、リモートからログインしてみます。ユーザーubuntuは、デフォルトのユーザー名で、初期パスワードもubuntuです。

$ ssh -X 10.0.3.24 -lubuntu

ログインして、次のコマンドで起動できます。LANGをenに設定しているのは、日本語のフォントがインストールされていない場合の文字化けを防ぐためです。

ubuntu@macaroon:~$ LANG=en virtualbox

筆者の環境では起動に成功して、次の画面がリモートマシンに表示されました。

virtual-box.png

タグ: