Oracle Solaris 11における Oracle Solaris Zones 作成の手引き

2011 年 11 月

Duncan Hardie 著

Oracle Solaris Zones を作成し、そのゾーンにアプリケーションをインストールしてゾーンの複製を作成する方法について解説します。ゾーンの複製を作成することで、複数の重複したリソース制御環境をすばやく簡単にロールアウトすることができるようになります。


はじめに

この記事は、Oracle Solaris Zonesの構成とOracle Solaris 11 の管理に関連した基本的な操作に精通するための情報を提供します。

このような技術記事の配信を希望する場合は、システムコミュニティニュースレターの購読で登録してください—システム管理者、開発者向けの技術的な内容のみが送信されます。

Oracle Solaris 10 では、特定のアプリケーションに適した独立した環境を作成するために、すべてを Oracle Solaris の同じインスタンス上に作成することができる機能をOracle Solaris Zonesテクノロジーによって提供します。複数のシステム上の複数のアプリケーションをホストするために、複数の OS を実行して管理するのではなく、1 つの OS のみを実行、管理し、各アプリケーションをゾーン内に配置します。したがって、複数の OS の管理に時間と資源を費やすことなく、複数のゾーンの管理を実行するだけで済みます。さらに簡単です。

Oracle Solaris 11 は Oracle Solaris Zonesテクノロジーを核とし、Oracle Solaris 11 の主機能とともに Oracle Solaris Zonesを統合しています。たとえば、新しいソフトウェア管理アーキテクチャとの緊密な統合によって、Oracle Solaris 11 と Oracle Solaris Zonesの配備を容易にしています。

Oracle Solaris Zonesは、同じ OS 上で 1 つのアプリケーションをほかのアプリケーションから分離させる機能があるため、ユーザーがログインして Oracle Solaris Zones内で自由に作業することができ、そのゾーンの外には何も影響しない分離した環境を作成することができます。さらに、Oracle Solaris Zonesは外部からの攻撃や内部の悪意あるプログラムに対してセキュリティ強化されています。各 Oracle Solaris Zonesには、CPU、メモリ、ネットワーク、ストレージといった資源を割り当てることのできる、完全なリソース制御環境が含まれています。

システム管理者の場合、すべての Oracle Solaris Zonesを自分で厳重に管理するか、特定の Oracle Solaris Zonesの管理をほかの管理者に任せるか選ぶことができます。コンピュータ環境全体を特定のアプリケーションのニーズに合わせて調整できるこうした柔軟な対応が、すべて同じ OS 内で可能になります。

実装する環境の概要

この手引きでは、3 つの Oracle Solaris Zonesをセットアップします。1 つは開発者向けのテスト環境のホスト (testzone)、そのほかの 2 つは Web 向け (webzone-1 と webzone-2) のアプリケーション用で、すべて並列に単一のシステム上に設定します。
各ゾーンで、ゾーンを使い始めるための簡単な機能について紹介します:

  • testzone では、コマンド行を使用してゾーンを作成する方法について説明します。
  • webzone-1 では、ゾーンにアプリケーションを追加する方法について説明します。
  • webzone-2 では、ゾーンを複製する方法について説明します。

テストゾーンは、Oracle Solaris Zonesテクノロジーの分離機能を使用します。ゾーンをすばやく作成して開発グループに提供することができます。システムのほかの場所から分離された環境で、その開発グループの管理者は独立でシステムを管理することができ、テストエンジニアは必要なパッケージを自由にインストールすることが可能です。また、すべてのシステム資源を仮想化テクノロジーのためでなくアプリケーションに使用できるように、Oracle Solaris 11 の IPS (Image Package System) がいかに Oracle Solaris Zonesを動作させるかについても見ていきます。

最初の Web ゾーン webzone-1 は、オンラインの POS (Point of Sales) Web サーバーを実行する Web 環境をインストールするために使用されます。ここでは、サービスのレベルを保証するために適切な資源を割り当てながら、トランザクションが完了することを確実にできます。Oracle Solaris Zonesテクノロジーは CPU やメモリだけでなく、ネットワーク帯域幅やストレージへのアクセスといった制御も可能にしてくれます。これは、ネットワーク仮想化や ZFS ベースのストレージなど、Oracle Solaris 11 のそのほかのコア機能が緊密に統合されていることによって可能になります。
2 つめの Web ゾーン webzone-2 は、POS 環境内の要求に応答する形で作成されます。追加の Web サーバーは、増加するトラフィックを処理するために、できるだけ早く用意する必要があります。これを実現するために Oracle Solaris Zonesで利用可能な複製機能を使います。複製は、ゴールデンマスター (あるいはテンプレート) が作成され、オリジナルをもとに新しい環境にロールアウトする際にこの分野ではよく使われるテクニックです。Oracle Solaris Zonesテクノロジーを使用すると驚くべき速さでこの機能が実行され、また、これによりディスク領域も大幅に節約できます。複製のプロセスによって、複数の複写環境を、オンデマンドですばやく簡単にロールアウトできるため、クラウド環境で大いに役立ちます。
この記事で説明する手順に沿って進めていくと、図 1 に示すような 3 つのゾーン環境が構成されます。各ゾーンは  /zones ZFS データセット上に配置されたファイルシステムを持ち、物理データリンク (ネットワークポート e1000g0) を介して排他的なネットワークに接続されます。Web ゾーンには Apache Web サーバーアプリケーションも含まれます。

Figure 1

図 1.ファイルシステムを /zones 上に持つネットワークポートにアクセスする 3 つのゾーン

:「グローバルゾーン (global zone)」 はシステムのデフォルトゾーンを表わします。システム全体の管理制御のためにも使用されます。
ゾーン作成に関する作業を理解したところで、実際に目標を達成するための手順を説明します。

図 2 に、使用する設定を一覧します。

Figure 2

図 2.3 つのゾーンとそれぞれの詳細な構成

最初のゾーンを作成する: testzone

この記事は、Oracle Solaris Zonesのインスタンスをすばやく動作させ、実行させるために必要となるタスクに注目しています。Oracle Solaris Zonesを作成するためのすべての手順に関する詳細な説明、属性の構成方法などは、「Oracle Solaris Administration: Oracle Solaris Zones, Oracle Solaris 10 Zones, and Resource Management」を参照してください。

手順を実行する前に

ZFS ファイルシステムとネットワークの状態を確認します:

root@global:~# zfs list | grep zones
root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --

ここでは、ゾーンに関連付けられた ZFS データセットも仮想 NIC デバイスも存在しないことに注意してください。

手順 1: Oracle Solaris Zonesを構成する

リスト 1 に示すように、コマンド行を使ってシンプルなテストゾーンを作成するところから始めます。

リスト 1: ゾーンを作成する
root@global:~# zonecfg -z testzone
testzone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:testzone> create
create: Using system default template 'SYSdefault'
zonecfg:testzone> set zonepath=/zones/testzone
zonecfg:testzone> set autoboot=true
zonecfg:testzone> set bootargs="-m verbose"
zonecfg:testzone> verify
zonecfg:testzone> commit
zonecfg:testzone> exit

この段階で構成エラーが出るようであれば、「Oracle Solaris Administration: Oracle Solaris Zones, Oracle Solaris 10 Zones, and Resource Management」を参照してください。
ヒント: zonepathにゾーン名が含まれている場合、ゾーンファイルの追跡は非常に簡単です。
この例の場合、ゾーンに testzone と名前を付け、場所はゾーンがインストールされる /zones/testzone を選びました。また、ブート後ゾーンは冗長モードで自動的に起動します。このように設定することで、システムの再起動後に手動でゾーンを開始する必要がなくなり、すべてのサービスが開始されます。
デフォルトですべての Oracle Solaris Zonesは、ネットワークデバイスを自動的に提供する anet と呼ばれる自動VNIC を持つように構成されています (このネットワークデバイス構成の詳細については後述します)。ゾーンがブートされた時に自動的に作成され、シャットダウン時に自動的に破棄されるため、ネットワークデバイスはまだ認識されていません。これは、dladm コマンドで確認することができます:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --

zoneadm コマンドを使用してゾーンが構成された状態であることを確認できます:

root@global:~# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   - testzone         configured /zones/testzone                solaris  excl  

手順 2: ゾーンのインストール

ゾーンが構成されたため、リスト 2 に示すようにインストールを実行します。

Oracle Solaris 11 の Oracle Solaris Zonesは IPS 機能を使って作成されると理解していることは重要です。IPS リポジトリにアクセスが可能なことを確認してください。この例では、 IPS リポジトリへのネットワークアクセスが可能です。IPS に関する詳細については、「Introducing the Basics of Image Packaging System (IPS) on Oracle Solaris 11」を参照してください。

リスト 2: ゾーンをインストールする
root@global:~# zoneadm -z testzone install
 A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111016T114436Z.testzone.install
       Image: Preparing at /zones/testzone/root.

 Install Log: /system/volatile/install.6677/install_log
 AI Manifest: /tmp/manifest.xml.zVaybn
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: testzone
Installation: Starting ...

              Creating IPS image
              Installing packages from:
                  solaris
                      origin:  http://pkg.oracle.com/solaris/release/
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              167/167 32062/32062  175.8/175.8

PHASE                                        ACTIONS
Install Phase                            44311/44311 

PHASE                                          ITEMS
Package State Update Phase                   167/167 
Image State Update Phase                         2/2 
Installation: Succeeded


        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 110.519 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /zones/testzone/root/var/log/zones/zoneadm.20111016T114436Z.testzone.install

ゾーンは 110 秒でインストールされました。ほかの仮想化技術と比較してもこれは非常に速く、Oracle Solaris Zonesが軽量であるという本質を表しています。

zoneadm コマンドを使用してゾーンの状態を確認することができます:

root@global:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   - testzone         installed  /zones/testzone                solaris  excl  

The zonepath must live on a ZFS data set, and it is created automatically when the zone is installed. You can check that by using the zfs command, as shown in Listing 3.

リスト 3: zonepathを確認する
root@global:~# zfs list | grep zones
rpool/zones                                   368M   844G    32K  /zones
rpool/zones/testzone                          368M   844G    32K  /zones/testzone
rpool/zones/testzone/rpool                    368M   844G    31K  /rpool
rpool/zones/testzone/rpool/ROOT               368M   844G    31K  legacy
rpool/zones/testzone/rpool/ROOT/solaris       367M   844G   310M  /zones/testzone/root
rpool/zones/testzone/rpool/ROOT/solaris/var  57.3M   844G  56.4M  /zones/testzone/root/var
rpool/zones/testzone/rpool/export              62K   844G    31K  /export
rpool/zones/testzone/rpool/export/home         31K   844G    31K  /export/home

/zones と /zones/testzone データセットが自動的に作成されたことがわかります。ZFS データセット上にOracle Solaris Zonesを持つことで、複製やスナップショットといった機能が有効になり、Oracle Solaris Zonesは ZFS のすべての機能が使えるようになります。
: testzone のサイズはわずか 368 MB です。Oracle Solaris Zonesは最小限の設置面積を持ち、仮想化技術として Oracle Solaris Zonesがいかに軽量であるかを表しています。

手順 3:システム構成のブートと完了

最後の手順は testzone を起動させ実行させるために、ブートしてシステム構成を設定します。

  1. 次のコマンドを実行してゾーンをブートし、コンソールにアクセスします:

    root@global:~# zoneadm -z testzone boot; zlogin -C testzone
    

    : zlogin に -C オプションを使用すると、ゾーンコンソールにアクセスできるようになります。コンソールからゾーンに入り、ゾーン内で作業することが可能です。
    システム構成ファイルがないため、図 3 に示すようにシステム構成ツールが起動します。

    Figure 3

    図 3.システム構成ツール

  2. F2 を押して続行します。
  3. コンピュータ名として testzone と入力します。図 4 に示すように、ネットワーク名を手動で構成するために「Manually (手動)をハイライトします。F2 を押して続行します。

    : この例では「Automatically (自動)」を選択しませんでしたが、自動を選択するとネットワーク情報を入力する必要はなく、すべて自動的に構成されます。

    Figure 4

    図 4.手動構成を選択する

  4. 図 5 のように、ご使用のネットワークに適したネットワーク設定を入力し、F2 を押して続行します。

    Figure 5

    図 5.ネットワーク設定を入力する

  5. ここでは DNS の構成は行いませんので (図 6 参照)、F2 を押します。

    Figure 6

    図 6.「Do not configure DNS (DNS の構成をしない)」を選択する

  6. ここではネームサービスの設定も行いませんので、F2 を押します。

    Figure 7

    図 7.「None (ネームサービスの設定をしない)」を選択する

  7. 図 8 に示すように、該当するタイムゾーンの地域を選択し、F2 を押します。

    Figure 8

    図 8.タイムゾーンの地域を選択する

  8. 図 9 のように、該当する国名を選択して F2 を押します。

    Figure 9

    図 9.国名を選択する

  9. 図 10 のように、該当するタイムゾーンを選択して F2 を押します。

    Figure 10

    図 10.タイムゾーンを選択する

  10. 図 11 のように、ルートパスワード、氏名、ユーザー名、ユーザーパスワードを入力して構成を完了します。完了したら F2 を押します。

    Figure 11

    図 11.構成を完了する

  11. 選択した構成が正しいことを確認できたら、F2 を押して設定を適用します。

    Figure 12

    図 12.構成を確認する

ゾーンはブートし、間もなくリスト 4 に示すようなコンソールログインが表示されます。

リスト 4: ゾーンブートプロセスからの出力
[ system/system-log:default starting (system log) ]
[ system/auditd:default starting (Solaris audit daemon) ]
[ network/smtp:sendmail starting (sendmail SMTP mail transfer agent) ]
[ network/sendmail-client:default starting (sendmail SMTP client queue runner) ]
Oct 16 13:13:15 testzone sendmail[8911]: My unqualified host name (testzone) unknown; sleeping for retry
Oct 16 13:13:15 testzone sendmail[8913]: My unqualified host name (testzone) unknown; sleeping for retry
[ system/console-login:default starting (Console login) ]

testzone console login: 

これでゾーンにログインする準備が整いました。この例では、エスケープシーケンス「~.」を使用してコンソールを終了します。
ゾーンがブートして稼働中かどうかは、zoneadm コマンドで確認することができます:

root@global:~# zoneadm list -v
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 testzone         running    /zones/testzone                solaris  excl  

前述のとおり、ゾーンがブートした際に VNIC が自動的に作成されました。dladm コマンドを使用して確認することができます:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1        phys      1500   unknown  --
testzone/net0       vnic      1500   up   e1000g0

VNIC は testzone/net0 として表示されていることがわかります。

手順 4: 作成したゾーンにログインする

最後の手順は、作成したゾーンにログインして内容を確認することです。リスト 5 に示すように、zlogin コマンドをグローバルゾーンから実行します。

リスト 5: 作成したゾーンにログインする
root@global:~# zlogin testzone
[Connected to zone 'testzone' pts/3]
Oracle Corporation	SunOS 5.11	11.0 November 2011
root@testzone:~# uname -a
SunOS testzone 5.11 11.0 i86pc i386 i86pc
root@testzone:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok  127.0.0.1/8
net0/v4           static   ok           10.134.79.241/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fe6f:9645/10
root@testzone:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                vnic      1500   up       ?
root@testzone:~# zfs list
NAME                     USED  AVAIL  REFER  MOUNTPOINT
rpool                    400M   843G    31K  /rpool
rpool/ROOT               400M   843G    31K  legacy
rpool/ROOT/solaris       400M   843G   341M  /
rpool/ROOT/solaris/var  58.1M   843G  57.1M  /var
rpool/export            96.5K   843G    32K  /export
rpool/export/home       64.5K   843G    32K  /export/home
rpool/export/home/fred  32.5K   843G  32.5K  /export/home/fred
root@testzone:~# exit
logout

[Connection to zone 'testzone' pts/3 closed]

: zlogin コマンドに -C オプションを付けませんでした。これは、ゾーンへのアクセスにコンソールを使用しないことを意味しています。こうすることで、ゾーンから出る際に単にシェルを終了すれば良いだけになります。
実行結果を確認しておきましょう:

  • uname コマンドは Oracle Solaris 11 上で実行中であることを表示しています。
  • ipadm コマンドは testzone の IP アドレスを表示しています。4 つのエントリがあり、2 つはループバックデバイス (IPv4 と IPv6) で、使用中の IPv4 net0 デバイスは IP アドレスが 10.134.79.241、最後に IPv6 net0 デバイスが表示されています。
  • dladm コマンドは自動的に作成された net0 VNIC を表示しています。
  •  zfs list コマンドは ZFS データセットを表示しています。

: testzone からグローバルゾーンの情報を見ることはできません。自分のいるゾーンの属性だけを見ることができます。
testzone が稼働中であることが確認できました。これで、ユーザーログインとパスワードを開発チームの管理者に渡すことができます。開発チームの管理者は、あたかも単一のシステム上で作業しているかのように、チーム用にゾーンの設定を完了することができます。

Oracle Solaris Zonesとネットワーク

新しい Oracle Solaris 11 では、Oracle Solaris Zonesはデフォルトで排他的な IP ネットワークリソースとともに自動的に作成されるようになりました。これは、Oracle Solaris Zonesが完全なネットワークスタックにアクセス可能であることを意味し、ゾーン管理者は IP アドレスやルーティング情報などを独自に設定することが許されます。
zonecfg を使用してデフォルトテンプレートで testzone を作成すると (手順 1: Oracle Solaris Zonesの構成の内容)、anet と呼ばれるネットワークリソースが以下のプロパティとともに自動的にゾーン構成に含まれました:

  • linkname is net0
  • lower-link is auto
  • mac-address is random
  • link-protection is mac-nospoof

リスト 6 に示すように、zonecfg コマンドを使用するとこの情報を確認することができます。

リスト 6: ネットワークリソースのプロパティを表示する
root@global:~# zonecfg -z testzone info
zonename: testzone
zonepath: /zones/testzone
brand: solaris
autoboot: true
bootargs: -m verbose
file-mac-profile: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: exclusive
hostid: 
fs-allowed: 
anet:
	linkname: net0
	lower-link: auto
	allowed-address not specified
	configure-allowed-address: true
	defrouter not specified
	allowed-dhcp-cids not specified
	link-protection: mac-nospoof
	mac-address: random
	mac-prefix not specified
	mac-slot not specified
	vlan-id not specified
	priority not specified
	rxrings not specified
	txrings not specified
	mtu not specified
	maxbw not specified
	rxfanout not specified

anet ネットワークデバイスは自動的に構成されたことがわかります。すでに述べたとおり、このリソースはゾーンがブートしたときに作成され、シャットダウンしたときに自動的に破棄されます。以下のとおり確認することができます。
最初にグローバルゾーンの IP アドレスを確認します:

root@global:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
e1000g0/_a        static   ok           10.134.79.168/24
lo0/v6            static   ok           ::1/128

dladm を使用してデータリンクの状態を参照します:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --
testzone/net0       vnic      1500   up       e1000g0

VNIC が e1000g0 (testzone/net0) に接続され、自動的に testzone に作成されたことに注意してください。 
testzone にログインしてリンクの状態と IP アドレスを確認し、リスト 7 に示すようにグローバルゾーンに ping を実行します。

リスト 7:リンクの状態と IP アドレスを確認する
root@testzone:~# zlogin testzone
root@testzone:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                vnic      1500   up       ?
root@testzone:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           10.134.79.241/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fec4:32bb/10
root@testzone:~# ping 10.134.79.168
10.134.79.168 is alive
root@testzone:~# exit
logout

[Connection to zone 'testzone' pts/3 closed]

webzone-1 の作成とアプリケーションの追加

Web 向けのアプリケーション用に 2 つ目のゾーン webzone-1 を作成してアプリケーションを追加します。

手順 1: 最小限の情報で  webzone-1 を作成する

再度 zonecfg を使って webzone-1 の作成を開始します。ただし今回は、ゾーンのセットアップがいかに簡単にすばやくできるかを示すために、必要最小限の情報としてzonepathを入力します:

root@global:~# zonecfg -z webzone-1 "create ; set zonepath=/zones/webzone-1"

リスト 8 に示すように、zonecfg コマンドを使用してゾーン構成を確認することができます。

リスト 8: 新しいゾーンの構成を確認する
root@global:~# zonecfg -z webzone-1 info
zonename: webzone-1
zonepath: /zones/webzone-1
brand: solaris
autoboot: false
bootargs: 
file-mac-profile: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: exclusive
hostid: 
fs-allowed: 
anet:
	linkname: net0
	lower-link: auto
	allowed-address not specified
	configure-allowed-address: true
	defrouter not specified
	allowed-dhcp-cids not specified
	link-protection: mac-nospoof
	mac-address: random
	mac-prefix not specified
	mac-slot not specified
	vlan-id not specified
	priority not specified
	rxrings not specified
	txrings not specified
	mtu not specified
	maxbw not specified
	rxfanout not specified

これで終了です。少なくとも構成に関しては完了しました。

手順 2: webzone-1 のインストール

次に、ゾーンをインストールします。リスト9 に示します。

リスト 9: ゾーンをインストールする
root@global:~# zoneadm -z webzone-1 install
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111016T143052Z.webzone-1.install
       Image: Preparing at /zones/webzone-1/root.

 Install Log: /system/volatile/install.10393/install_log
 AI Manifest: /tmp/manifest.xml.Iza4ru
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: webzone-1
Installation: Starting ...

              Creating IPS image
              Installing packages from:
                  solaris
                      origin:  http://pkg.oracle.com/solaris/release/
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              167/167 32062/32062  175.8/175.8

PHASE                                        ACTIONS
Install Phase                            44311/44311 

PHASE                                          ITEMS
Package State Update Phase                   167/167 
Image State Update Phase                         2/2 
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 108.257 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /zones/webzone-1/root/var/log/zones/zoneadm.20111016T143052Z.webzone-1.install

手順 3: webzone-1 のブートと構成

webzone-1 をブートしてコンソールにログインし、IP アドレスは除いて、testzone で設定した内容と同じ情報を入力します。 IP アドレスは 10.134.79.242 に設定します。

root@global:~# zoneadm -z webzone-1 boot; zlogin -C webzone-1

手順を確認したい場合は、前述の手順 3: システム構成のブートと完了に戻ってください。最後に「~.」エスケープシーケンスを入力してコンソールを終了することを忘れないでください。

 webzone-1にアプリケーションを追加する

これでネットワークに接続された実行可能なゾーンの準備が整いましたので、アプリケーションを追加できます。このゾーンは Web コンテンツサーバーとしての役割があるため、Apache Web サーバーを追加します。
グローバルゾーンから、webzone-1 にログインし、Apache Web サーバーパッケージの状態を確認します:

root@global:~# zlogin webzone-1
[Connected to zone 'webzone-1' pts/3]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-1:~# pkg info /web/server/apache-22
pkg: info: no packages matching the following patterns you specified are
installed on the system.  Try specifying -r to query remotely:

        /web/server/apache-22

パッケージはインストールされていません。リスト 10 に示すように、IPS リポジトリに対して -r オプションを使用してリモートでクエリーを実行し、再度確認します。

リスト 10: Apache Web サーバーパッケージを確認する
root@webzone-1:~# pkg info -r /web/server/apache-22
          Name: web/server/apache-22
       Summary: Apache Web Server V2.2
   Description: The Apache HTTP Server Version 2.2
      Category: Web Services/Application and Web Servers
         State: Not installed
     Publisher: solaris
       Version: 2.2.20
 Build Release: 5.11
        Branch: 0.175.0.0.0.1.530
Packaging Date: Wed Oct 12 14:13:31 2011
          Size: 9.24 MB
          FMRI: pkg://solaris/web/server/apache-22@2.2.20,5.11-0.175.0.0.0.1.530:20111012T141331Z

状態は Not installed であることが確認できましたので、Apache Web サーバーをゾーンにインストールします。リスト 11 に示します。

リスト 11: Apache Web サーバーパッケージをインストールする
root@webzone-1:~# pkg install /web/server/apache-22
           Packages to install:  3
       Create boot environment: No
Create backup boot environment: No
            Services to change:  1

DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  3/3     636/636      4.2/4.2

PHASE                                        ACTIONS
Install Phase                                800/800 

PHASE                                          ITEMS
Package State Update Phase                       3/3 
Image State Update Phase                         2/2 

IPS が必要となるすべての関連ファイルをダウンロードしていることがわかります。依存関係について考える必要はありません。この例では 3 つのパッケージがインストールされています。Apache Web サーバーの状態は pkg info コマンドを使って再度確認することができます。リスト 12 に示します。

リスト 12: Apache Web サーバーの状態を再度確認する
root@webzone-1:~# pkg info /web/server/apache-22
          Name: web/server/apache-22
       Summary: Apache Web Server V2.2
   Description: The Apache HTTP Server Version 2.2
      Category: Web Services/Application and Web Servers
         State: Installed
     Publisher: solaris
       Version: 2.2.20
 Build Release: 5.11
        Branch: 0.175.0.0.0.1.530
Packaging Date: Wed Oct 12 14:13:31 2011
          Size: 9.24 MB
          FMRI: pkg://solaris/web/server/apache-22@2.2.20,5.11-0.175.0.0.0.1.530:20111012T141331Z

今回は状態が  Installed として表示されています。おめでとうございます。ゾーンに最初のパッケージが追加されました。

複製を使用して webzone-2 を作成する

最後のゾーン webzone-2 を作成します。これまでにゾーンを作成した際の手順をそのまま繰り返すことも可能ですが、今回は単純に webzone-1 のようなWeb サーバー環境をもう 1 つ作成しようとしています。再度同じ構成プロセスを実行するのではなく、webzone-1 の複製を作成してみましょう。ゾーン作成のグローバルマスターとして webzone-1 を活用します。

手順 1: ゾーンのシステム構成テンプレートの作成

複製したゾーンのシステムプロパティを手動で構成をしなくても済むように、webzone-2 用のシステム ID テンプレートを作成します。webzone-1 内で sysconfig ツールを実行することで作成することができます:

root@global:~# zlogin webzone-1
root@webzone-1:~# sysconfig create-profile -o /root/webzone-2-template.xml

: sysconfig ツールを使用してプロファイルを作成する場合、出力するファイル名には必ず.xml 拡張子を付けるようにしてください。
画面の指示にしたがって  webzone-2 用の正確な情報を入力します (この場合 IP アドレスには 10.134.79.243 を入力することを忘れないでください)。 手順3: システム構成のブートと完了の項で説明したように、構成が完了すると構成ファイルが作成されます。最後にログアウトしてグローバルゾーンに戻ります。

システム構成ツールを終了します。ログは次の場所にあります:

Exiting System Configuration Tool. Log is available at:
/var/tmp/install/sysconfig.log
root@webzone-1:~# ls
webzone-2-template.xml
root@webzone-1:~# exit
logout

[Connection to zone 'webzone-1' pts/2 closed]

: sysconfig ツールを使用する場合は、ユーザーアカウントの項目に既存のユーザー名を使用することはできません。この例では、fred というユーザー名が使用できなかったため jack を代わりに使用しました。
このファイルは、以降の手順でより使いやすい場所へ移動します。

手順 2: ゾーンプロファイルファイルの作成

システム上のグローバルゾーンから、 まず複製を作成するゾーンである webzone-1 を停止する必要があります。 稼働中のゾーンの複製はしないでください。リスト 13 に示すように zoneadm list を実行してゾーンがシャットダウンしていることを確認します。

リスト 13: ゾーンがシャットダウンしていることを確認する
root@global:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 testzone         running    /zones/testzone                solaris  excl  
   3 webzone-1        running    /zones/webzone-1               solaris  excl  
root@global:~# zoneadm -z webzone-1 shutdown
root@global:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 testzone         running    /zones/testzone                solaris  excl  
   - webzone-1        installed  /zones/webzone-1               solaris  excl  

ここで、ゾーンの構成を取得して、ほかのゾーン (この場合 webzone-2) を作成するためのマスタープロファイルテンプレートとして使用します:

root@global:~# zonecfg -z webzone-1 export -f /zones/webzone-2-profile

使い慣れたエディタを使用して、リスト 14 に示す内容のファイルを作成します。(zonepathは常に更新する必要がありますが、autoboot による更新も選択しています。)

リスト 14: テンプレートの編集
root@global:~# cat /zones/webzone-2-profile
create -b
set zonepath=/zones/webzone-2
set brand=solaris
set autoboot=true
set ip-type=exclusive
add anet
set linkname=net0
set lower-link=auto
set configure-allowed-address=false
set link-protection=mac-nospoof
set mac-address=random
set auto-mac-address=2:8:20:f1:e4:b7
end

ここで、すでに作成したシステム構成ファイル (webzone-2-template.xml) をより使いやすい場所に配置します。幸いゾーンのファイルシステムはシャットダウン中にもアクセス可能です:

root@global:~# pwd
/root
root@global:~# cp /zones/webzone-1/root/root/webzone-2-template.xml /zones
root@global:~# ls /zones/webzone-2-template.xml 
/zones/webzone-2-template.xml

手順 3: webzone-1 を複製することで webzone-2 を作成する

次に、修正された構成を使用してwebzone-2 を作成し (zonecfg を使用します)、さらに webzone-1 の複製を実行します (zoneadm を使用します)。システム構成テンプレートには絶対パスを指定することを忘れないでください。このように複製はすばやく完了します。time コマンドを zonecfg clone コマンドの前に付けることで時間を確認することが可能です。

root@global:~# zonecfg -z webzone-2 -f /zones/webzone-2-profile
root@global:/zones# time zoneadm -z webzone-2 clone -c /zones/webzone-2-template.xml webzone-1
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111029T193536Z.webzone-2.clone
Log saved in non-global zone as /zones/webzone-2/root/var/log/zones/zoneadm.20111029T193536Z.webzone-2.clone

real	0m13.269s
user	0m1.740s
sys	0m2.716s

webzone-1 の複製には 13 秒しかかかっていないことがわかります。さらに、clone コマンドを使用しているため、ZFS スナップショットの利点も生かされます。 webzone-1 と webzone-2 で使用されるディスク容量をリスト15 で確認してみましょう。

リスト 15: ディスク容量を確認する
root@global:/zones# zfs list | grep webzone
rpool/zones/webzone-1                            470M   843G    33K  /zones/webzone-1
rpool/zones/webzone-1/rpool                      470M   843G    31K  /rpool
rpool/zones/webzone-1/rpool/ROOT                 470M   843G    31K  legacy
rpool/zones/webzone-1/rpool/ROOT/solaris         470M   843G   366M  /zones/webzone-1/root
rpool/zones/webzone-1/rpool/ROOT/solaris/var    97.8M   843G  57.9M  /zones/webzone-1/root/var
rpool/zones/webzone-1/rpool/export              96.5K   843G    32K  /export
rpool/zones/webzone-1/rpool/export/home         64.5K   843G    32K  /export/home
rpool/zones/webzone-1/rpool/export/home/fred    32.5K   843G  32.5K  /export/home/fred
rpool/zones/webzone-2                            350K   843G    34K  /zones/webzone-2
rpool/zones/webzone-2/rpool                      316K   843G    31K  /rpool
rpool/zones/webzone-2/rpool/ROOT                 295K   843G    31K  legacy
rpool/zones/webzone-2/rpool/ROOT/solaris-0       294K   843G   366M  /zones/webzone-2/root
rpool/zones/webzone-2/rpool/ROOT/solaris-0/var    39K   843G  57.9M  /zones/webzone-2/root/var
rpool/zones/webzone-2/rpool/export                 3K   843G    32K  /export
rpool/zones/webzone-2/rpool/export/home            2K   843G    32K  /export/home
rpool/zones/webzone-2/rpool/export/home/fred       1K   843G  32.5K  /export/home/fred

Apache Web サーバーを追加した後でも webzone-1 は 470 MBです。さらに、 webzone-1 のコピーである webzone-2 はわずか 350 KB です。このようにディスク容量を大幅に節約することができます。
最後に、webzone-2 をブートし、コンソールを確認します。時折、システム構成が適用されていることがあります。以下のように、ホスト名がテンプレートを使って設定されていることを確認できます。

root@global:~# zoneadm -z webzone-2 boot; zlogin -C webzone-2
 [Connected to zone 'webzone-2' console]

Hostname: unknown
Unconfiguration failed for svc:/system/config-user:default
Hostname: webzone-2

webzone-2 console login: ~.
[Connection to zone 'webzone-2' console closed]

コンソールを終了する際は忘れずに「~.」エスケープシーケンスを使用してください。
 webzone-2 用の .xml テンプレートができました。このテンプレートは簡単にコピーして編集することができるため、ほかの Web ゾーン全体を同じようにすばやく配備することができます。
webzone-2 にログインして、Apache Web サーバーを見てみましょう。リスト 16 に示します。

リスト 16: Apache Web サーバーパッケージを見る
root@global:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/3]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@webzone-2:~# pkg info /web/server/apache-22
          Name: web/server/apache-22
       Summary: Apache Web Server V2.2
   Description: The Apache HTTP Server Version 2.2
      Category: Web Services/Application and Web Servers
         State: Installed
     Publisher: solaris
       Version: 2.2.20
 Build Release: 5.11
        Branch: 0.175.0.0.0.1.530
Packaging Date: Wed Oct 12 14:13:31 2011
          Size: 9.24 MB
          FMRI: pkg://solaris/web/server/apache-22@2.2.20,5.11-0.175.0.0.0.1.530:20111012T141331Z
ゾーンを最初から作成した時とは異なり、webzone-1 に追加した Apache Web サーバーパッケージがすでに配備されています。この複製の手法は、すべての追加パッケージと構成が正しく設定された状態で「マスター」ゾーンが作成されている場合によく使われる方法です。正しく設定されたマスターゾーンは、必要に応じて新しく、類似した環境として複製することができます。
IP アドレスが正しく適用されていることも確認できます:
root@webzone-2:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   duplicate    10.134.79.243/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fe7a:7b0f/10

: システムのインストールサービスの一部として、Oracle Solaris 自動インストーラでも既製のゾーンを作成する手法を提供しています。

結論

この記事では、Oracle Solaris Zonesの作成、インストール、ブート、構成について見てきました。いかに ZFS データセットが自動的に作成され、ネットワークが自動的に設定されるかについても紹介しました。最後に、IPS を使用して Oracle Solaris Zonesにアプリケーションを追加し、ゾーンを複製する方法について解説しました。

詳細情報

そのほかの情報については以下を参照してください:

Revision 1.0, 11/03/2011