Solaris 資料一覧

Zoneを作成する

2008/9/28更新

対応バージョン: 10

既存のGlobal Zone上にNon-Global Zoneを作成する手順を示す。

初期状態確認

まず初期状態のZone設定について確認する。

何も設定していない状態ではGlobal Zoneが一つ稼働しているのみである。

# zoneadm list -vc
  ID NAME     STATUS     PATH                 BRAND    IP    
   0 global   running    /                    native   shared

Non-Global Zone作成

次にこのGlobal Zone上にNon-Global Zone(以下、Zone)を作成する。

ここでは以下のZoneを作成する。Zone情報の定義にはzonecfgコマンドを使用する。

Zone名

zone1

# zonecfg -z zone1
zone1: そのような構成済みゾーンはありません
'create' を使用して、新しいゾーンの構成を開始してください。

zonecfg:zone1> create
Zoneのrootファイルシステムの場所

/export/zones/zone1

zonecfg:zone1> set zonepath=/export/zones/zone1
共有ファイルシステム(read only)

/export/common

(*) /lib, /platform, /sbin, /usrはデフォルトで定義済

zonecfg:zone1> add inherit-pkg-dir
zonecfg:zone1:inherit-pkg-dir> set dir=/export/common
zonecfg:zone1:inherit-pkg-dir> end
共有ファイルシステム(read-write)

/usr/local (Global Zoneの/usr/localにマウント)

ファイルシステムはlofs(loopback file system)としてマウントされる。

zonecfg:zone1> add fs
zonecfg:zone1:fs> set dir=/usr/local
zonecfg:zone1:fs> set special=/usr/local
zonecfg:zone1:fs> set type=lofs
zonecfg:zone1:fs> end
Global Zone起動時の自動起動

有効

zonecfg:zone1> set autoboot=true
IPアドレス

192.168.0.100 (デバイスはe1000g0)

zonecfg:zone1> add net
zonecfg:zone1:net> set address=192.168.0.100
zonecfg:zone1:net> set physical=e1000g0
zonecfg:zone1:net> end

他にもいろいろな設定があるがここでは割愛する。

設定検証

エラーの場合はメッセージが出力される。

zonecfg:zone1> verify
設定書き込み

設定をstable storageに書き込む。

zonecfg:zone1> commit
設定終了
zonecfg:zone1> exit

設定の内容は以下の方法で確認できる。

# zonecfg -z zone1 info
zonename: zone1
zonepath: /export/zones/zone1
brand: native
autoboot: true
bootargs: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: shared
inherit-pkg-dir:
	dir: /lib
inherit-pkg-dir:
	dir: /platform
inherit-pkg-dir:
	dir: /sbin
inherit-pkg-dir:
	dir: /usr
inherit-pkg-dir:
	dir: /export/common
fs:
	dir: /usr/local
	special: /usr/local
	raw が指定されていません
	type: lofs
	options: []
net:
	address: 192.168.0.100
	physical: e1000g0

この設定は/etc/zones/.xmlに格納される。中身を確認すると設定内容とともに「このファイルを直接編集せず、zonecfgを使用するように」と書いてあるのでその通りにする。

# cat /etc/zones/zone1.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
    DO NOT EDIT THIS FILE.  Use zonecfg(1M) instead.
-->
<zone name="zone1" zonepath="/export/zones/zone1" autoboot="true">
  <inherited-pkg-dir directory="/lib"/>
  <inherited-pkg-dir directory="/platform"/>
  <inherited-pkg-dir directory="/sbin"/>
  <inherited-pkg-dir directory="/usr"/>
  <inherited-pkg-dir directory="/export/common"/>
  <filesystem special="/usr/local" directory="/usr/local" type="lofs"/>
  <network address="192.168.0.100" physical="e1000g0"/>
</zone>

ここまでで新たなZoneの定義が終わったのでZoneの一覧を見てみる。

# zoneadm list -vc
  ID NAME     STATUS     PATH                 BRAND    IP    
   0 global   running    /                    native   shared
   - zone1    configured /export/zones/zone1  native   shared

ステータスが「configured」になっている。

ここでZoneのステータスについて説明する。

定義が終わった状態ではまだZoneは使用できず、installを行ってZoneに必要なファイルをインストールした後にbootを行ってZoneを起動する。以下にステータスの遷移図を記す。

    ----------
    Configured ... Zone定義済
    ----------
       | ^
install| |uninstall
       v |
    ---------
    Installed  ... Zone固有のrootファイルシステム作成済
    ---------
     | ^ | ^
     | | | |
     | | | +---------+
     | | +---------+ |
     | |      ready| |halt
     | |           v |
     | |          -----
 boot| |halt      Ready ... Zone有効化(ユーザプロセスは起動しない)
     | |          -----
     | |           ^ |
     | |      ready| |boot
     | | +---------+ |
     | | | +---------+
     | | | |
     v | | v
    --------- 
     Running  ... Zone起動
    ---------

Zoneインストール

Zoneの定義まで終わったのでインストールを行う。Zoneの制御にはzoneadmコマンドを使用する。

この処理はマシンの性能にもよるが数十分〜数時間かかる。

# zoneadm -z zone1 install
Preparing to install zone <zone1>.
Creating list of files to copy from the global zone.
:
Copying <7441> files to the zone.
:
Initializing zone product registry.
Determining zone package initialization order.
:
Preparing to initialize <1189> packages on the zone.
:
Initialized <1189> packages on zone.                                 
Zone <zone1> is initialized.
The file </export/zones/zone1/root/var/sadm/system/logs/install_log> contains a log of the zone installation.

インストールが終わるとZoneのステータスは「installed」に変わる。

# zoneadm list -vc
  ID NAME     STATUS     PATH                 BRAND    IP    
   0 global   running    /                    native   shared
   - zone1    installed  /export/zones/zone1  native   shared

Zone起動

インストール終、Zoneを起動する。

# zoneadm -z zone1 boot

# zoneadm list -vc
  ID NAME     STATUS     PATH                 BRAND    IP    
   0 global   running    /                    native   shared
   1 zone1    running    /export/zones/zone1  native   shared

ステータスが「running」に変わり、IDが割り当てられる。

IPアドレスも有効になり、以下のようにIPエイリアスが設定される。

# ifconfig -a
:
e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 192.168.0.12 netmask ffffff00 broadcast 192.168.0.255
        ether 0:c:29:3b:bf:b5 
e1000g0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        zone zone1
        inet 192.168.0.100 netmask ffffff00 broadcast 192.168.0.255

この状態からhaltにより「installed」状態に、readyにより「ready」状態に変えることができる。またrebootによりZoneが再起動し、新たなIDが割り当てられる。

Zoneをアンインストールするには「installed」状態にしてからuninstallを実行する。

Zoneログイン

Zoneが起動するとログイン可能になる。

Zoneにログインするにはzloginコマンドを使用する。

# zlogin -C zone1
[ゾーン 'zone1' コンソールに接続しました]

最初のログインでは通常のSolarisインストールと同じように各種設定メニューが表示されるので必要な設定を行う。

Select a Language

  0. English
  1. Japanese

:

設定が終わるとZoneがリブートする。

:
System identification is completed.

rebooting system due to change(s) in /etc/default/init
:
(リブート)
:
SunOS Release 5.10 Version Generic_127128-11 64-bit
Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: <Zoneのホスト名>

XXXXX console login:

尚、zloginには上記の-Cオプションによるコンソールモードの他に対話型/非対話型の2つのモードがあるが、ここでは説明を割愛する。

Zoneから抜ける場合はloginプロンプトから「~^D」('~' + Ctrl-D)を入力する。

関連資料・記事