SmartOSは仮想化テクノロジとして以下の機能を持っています。
- SmartOSによるOS仮想化(コンテナ):
- SmartOSのZone
- LinuxのZone(LX Branded Zone)
- SmartOS組み込みのハイパーバイザベースの仮想化
- KVM
ここでは、SmarOS上のLinuxコンテナであるLX Branded Zoneを動かしてみます。
SmartOSをVMware Playerで気軽に試してみるには、SmartOSをVMware Playerで動かすを、SmartOSのKVM上でCentOSを動かしみるには、SmartOSのKVMゲストとしてCentOS7.1を動かしてみるをみてみてください。
image source を設定する
SmartOSでは、仮想マシンイメージを imgadm import
コマンドでイメージソースから取得します。デフォルトのイメージソースは、images.joyent.comです。LX Branded Zoneのイメージは updates.joyent.comというイメージソースからも入手することができます。そこで、最初にこのイメージソースを追加します。
現在のイメージソースの確認はimgadm sources
で、追加はimgadm sources -a <URL>
です。
# imgadm sources
https://images.joyent.com
# imgadm sources -a https://updates.joyent.com
Added "imgapi" image source "https://updates.joyent.com"
# imgadm sources
https://images.joyent.com
https://updates.joyent.com
imgadm avail
コマンドで、イメージソースにあるLX Branded Zoneのイメージを確認します。
# imgadm avail | grep lx-
f7c19252-c998-11e4-be95-3315493f3741 lx-centos-6 20150313 other 2015-03-13T15:52:35Z
818cc79e-ceb3-11e4-99ee-7bc8c674e754 lx-ubuntu-14.04 20150320 other 2015-03-20T03:45:09Z
116deb8c-cf03-11e4-9b2d-7b1066800a6a lx-debian-7 20150320 other 2015-03-20T13:14:41Z
eb4128ec-cf12-11e4-960d-8780cec6463f lx-centos-6 20150320 other 2015-03-20T15:08:09Z
ちなみに grep しないでリストすると膨大なリストが得られますがdockerが多数含まれていることがわかります。
LX Branded Zoneのimageをimportする
今回は、Ubuntu 14.04 の LX Branded Zoneを作ることにします。
イメージをimportするコマンドは、imgadm import
です。
# imgadm import 818cc79e-ceb3-11e4-99ee-7bc8c674e754
Importing 818cc79e-ceb3-11e4-99ee-7bc8c674e754 (lx-ubuntu-14.04@20150320) from "https://images.joyent.com"
Gather image 818cc79e-ceb3-11e4-99ee-7bc8c674e754 ancestry
Must download and install 1 image (154.3 MiB)
Download 1 image [================================================================>] 100% 154.32MB 534.23KB/s 4m55s
Downloaded image 818cc79e-ceb3-11e4-99ee-7bc8c674e754 (154.3 MiB)
...9e-ceb3-11e4-99ee-7bc8c674e754 [================================================================>] 100% 154.32MB 1.62MB/s 1m35s
Imported image 818cc79e-ceb3-11e4-99ee-7bc8c674e754 (lx-ubuntu-14.04@20150320)
import されている image は、imgadm listで確認できます。
# imgadm list
UUID NAME VERSION OS PUBLISHED
818cc79e-ceb3-11e4-99ee-7bc8c674e754 lx-ubuntu-14.04 20150320 other 2015-03-20T03:45:09Z
c41bf236-dc75-11e4-88e5-038814c07c11 centos-7 20150406 linux 2015-04-06T15:58:28Z
Ubuntu 14.04のLX Branded Zoneを作成する
ZoneやKVM VMを作成するコマンドは、vmadm create
です。LX Branded Zoneも、このコマンドで作成します。このコマンドは、zoneの属性を記述した json形式のデータを入力としますが、-fパラメータによりファイルで与えることができます。ここでは、ファイルを用意することとします。
{
"alias": "lxubuntu 14.04",
"brand": "lx",
"kernel_version": "3.13.0",
"max_physical_memory": 2048,
"image_uuid": "b7493690-f019-4612-958b-bab5f844283e",
"nics": [
{
"nic_tag": "admin",
"ip": "dhcp",
"primary": true
}
],
"qemu_extra_opts": "-k ja -usbdevice tablet"
}
nic_tag、ip等は、SmartOSのKVMゲストとしてCentOS7.1を動かしてみると同じです。"kernel_version"は、Ubuntu 14.04のカーネルバージョンです。
jsonファイルの用意ができたところで、いよいよ LX Branded Zoneをprovisionします。
# vmadm create -f /var/tmp/lx-ubuntu-14-04.json
Successfully created VM 16b4155b-e996-41e1-bb87-25eb0f0934ff
vmadm create
は瞬時に完了します。
vmadm list
で、確認します。
# vmadm list
UUID TYPE RAM STATE ALIAS
a90640f4-0596-451e-8d6c-ad001d71f834 KVM 512 stopped CentOS 7.1(1503) KVM
16b4155b-e996-41e1-bb87-25eb0f0934ff LX 1024 running lxubuntu 14.04
LX Branded Zoneが作成されて、動作していることがわかります。
新しいLX Branded Zone(Ubuntu)用の zfs ファイルシステムが作成されていることを確認します。
# df -h | grep -i zones
zones 19G 599K 5.6G 1% /zones
zones/archive 19G 19K 5.6G 1% /zones/archive
zones/cores 10G 19K 5.6G 1% /zones/global/cores
zones/var 19G 5.8M 5.6G 1% /var
zones/config 19G 43K 5.6G 1% /etc/zones
zones/opt 19G 22K 5.6G 1% /opt
zones/usbkey 19G 115K 5.6G 1% /usbkey
zones/a90640f4-0596-451e-8d6c-ad001d71f834 10G 40K 5.6G 1% /zones/a90640f4-0596-451e-8d6c-ad001d71f834
zones/cores/a90640f4-0596-451e-8d6c-ad001d71f834 10G 19K 5.6G 1% /zones/a90640f4-0596-451e-8d6c-ad001d71f834/cores
zones/818cc79e-ceb3-11e4-99ee-7bc8c674e754 19G 450M 5.6G 8% /zones/818cc79e-ceb3-11e4-99ee-7bc8c674e754
zones/16b4155b-e996-41e1-bb87-25eb0f0934ff 10G 450M 5.6G 8% /zones/16b4155b-e996-41e1-bb87-25eb0f0934ff
zones/cores/16b4155b-e996-41e1-bb87-25eb0f0934ff 10G 19K 5.6G 1% /zones/16b4155b-e996-41e1-bb87-25eb0f0934ff/cores
ファイルシステムの名前"zones/16b4155b-e996-41e1-bb87-25eb0f0934ff"にLX Branded Zone のUUIDが入っていることから、今作成した Ubuntu のLX Branded Zoneであることがわかります。
Ubuntu LX Branded Zoneにコンソール接続する(CLIコンソール編)
コンソールには、zlogin -C
コマンドで接続しますが、zone作成時点では、rootパスワードが未設定のためログインできません。そこで、zlogin
でログインしてパスワードを設定します。引数として、接続先zoneのUUIDが必要です。
UUIDを確認します。
# vmadm list
UUID TYPE RAM STATE ALIAS
a90640f4-0596-451e-8d6c-ad001d71f834 KVM 512 stopped CentOS 7.1(1503) KVM
16b4155b-e996-41e1-bb87-25eb0f0934ff LX 1024 running lxubuntu 14.04
もしくは、
# zoneadm list
global
16b4155b-e996-41e1-bb87-25eb0f0934ff
zloginでコンソールへ接続します。
# zlogin 16b4155b-e996-41e1-bb87-25eb0f0934ff
[Connected to zone '16b4155b-e996-41e1-bb87-25eb0f0934ff' pts/3]
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0 x86_64)
* Documentation: https://help.ubuntu.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
__ . .
_| |_ | .-. . . .-. :--. |-
|_ _| ;| || |(.-' | | |
|__| `--' `-' `;-| `-' ' ' `-'
/ ; Instance (Ubuntu 14.04 LX Brand 20150320)
`-' https://docs.joyent.com/images
root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~#
本当に Ubuntuか確認します。
~# cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
本当に64ビットなのか、bashのバイナリを見てみます。
~# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0aa3fddc66598b161d5b4407c9b61e021388fda0, stripped
Linuxコンテナか確認します。
~# uname -a
Linux 16b4155b-e996-41e1-bb87-25eb0f0934ff 3.13.0 BrandZ virtual linux x86_64 x86_64 x86_64 GNU/Linux
~# ls -l /boot
total 0
確かに、Linuxカーネルがありません。
rootパスワードを設定します。
~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
コンソールへ接続します。
# zlogin -C 16b4155b-e996-41e1-bb87-25eb0f0934ff
[Connected to zone '16b4155b-e996-41e1-bb87-25eb0f0934ff' console]
Ubuntu 14.04 LTS 16b4155b-e996-41e1-bb87-25eb0f0934ff console
16b4155b-e996-41e1-bb87-25eb0f0934ff login: root
Password:
Last login: Sun Apr 12 22:47:54 UTC 2015 from zone:global on pts/3
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0 x86_64)
* Documentation: https://help.ubuntu.com/
__ . .
_| |_ | .-. . . .-. :--. |-
|_ _| ;| || |(.-' | | |
|__| `--' `-' `;-| `-' ' ' `-'
/ ; Instance (Ubuntu 14.04 LX Brand 20150320)
`-' https://docs.joyent.com/images
root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~#
コンソール接続は、zoneをrebootしても継続します。
コンソールを抜けるのは~^D ('~'チルダに続けて [Ctrl] と [D] を同時に押します)を入力します。
なお、rebootしてみると、さずがコンテナです一瞬といっても良いくらいの時間で reboot されます(カーネルをrebootするわけではないので、当たり前ですね)。