Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)

lx ブランドゾーンの構成方法

次の処理を実行するには、zonecfg コマンド (zonecfg(1M) のマニュアルページを参照) を使用します。


ヒント –

CD または DVD を使用してアプリケーションを lx ブランドゾーンにインストールする予定の場合は、ブランドゾーンを最初に構成するときに add fs を使用して、大域ゾーンの CD または DVD メディアに読み取り専用のアクセスを行う権限を追加します。アクセス権を追加したら、CD または DVD を使用して製品をブランドゾーンにインストールできます。


zonecfg ユーティリティーを使用してゾーンを構成する際、revert サブコマンドを使用して、資源の設定を元に戻すことができます。「ゾーン構成を元に戻す方法」を参照してください。

システムに複数のゾーンを構成するスクリプトについては、「複数の lx ブランドゾーンを構成するスクリプト」を参照してください。

非大域ゾーンの構成を表示する方法については、「ブランドゾーンの構成を表示する方法」を参照してください。


ヒント –

ブランドゾーンを構成したあとは、ゾーンの構成のコピーを作成することをお勧めします。このバックアップを使用して、あとでゾーンを復元することができます。スーパーユーザーまたは Primary Administrator として、ゾーン lx-zone の構成をファイルに出力してください。次の例では、lx-zone.config というファイルを使用しています。


global# zonecfg -z lx-zone export > lx-zone.config

詳細は、「非大域ゾーンを個別に復元する方法」を参照してください。


Procedurelx ブランドゾーンを構成、検証、および確定する方法

ラベルが有効になっている Trusted Solaris システムでは、lx ブランドゾーンを使用できないことに注意してください。zoneadm コマンドで構成を検証できません。

この手順を実行するには、大域ゾーン内で大域管理者になる必要があります。

  1. スーパーユーザーまたは Primary Administrator 役割になります。

    役割の作成と作成した役割のユーザーへの割り当てについては、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. 選択したゾーン名を使用して、ゾーン構成を設定します。

    この手順例では、lx-zone という名前を使用します。


    global# zonecfg -z lx-zone
    

    このゾーンの初回構成時には、次のシステムメッセージが表示されます。


    lx-zone: No such zone configured
    Use 'create' to begin configuring a new zone.
  3. SUNWlx テンプレートを使用して、新しい lx ゾーン構成を作成します。


    zonecfg:lx-zone> create -t SUNWlx
    

    または、空のゾーンを作成し、そのブランドを明示的に設定することもできます。


    zonecfg:lx-zone> create -b
    zonecfg:lx-zone> set brand=lx
    
  4. ゾーンのパス (この手順では /export/home/lx-zone) を設定します。


    zonecfg:lx-zone> set zonepath=/export/home/lx-zone
    
  5. autoboot 値を設定します。

    true に設定すると、大域ゾーンの起動時にこのゾーンが自動的に起動します。ゾーンを自動的に起動するには、ゾーンサービス svc:/system/zones:default も有効になっている必要があります。デフォルト値は false です。


    zonecfg:lx-zone> set autoboot=true
    
  6. .ゾーンの持続的なブート引数を設定します。


    zonecfg:lx-zone> set bootargs="-i=altinit"
    
  7. システムで資源プールが有効な場合、プールをゾーンに関連付けます。

    この例では、pool_default という名前のデフォルトプールを使用します。


    zonecfg:lx-zone> set pool=pool_default
    

    資源プールはオプションのスケジューリングクラス割り当てを保持できるため、プール機能を使用して、システムのデフォルトでないデフォルトスケジューラを非大域ゾーン用に設定できます。詳細は、「プールをスケジューリングクラスに対応付ける方法」および 「構成の作成」を参照してください。

  8. 権限のデフォルトセットを修正します。


    zonecfg:lx-zone> set limitpriv="default,proc_priocntl"
    

    proc_priocntl 特権は、リアルタイムクラスのプロセスを実行するために使用されます。

  9. CPU の配分を 5 に設定します。


    zonecfg:lx-zone> set cpu-shares=5
    
  10. メモリー上限を追加します。


    zonecfg:lx-zone> add capped-memory
    
    1. メモリー上限を設定します。


      zonecfg:lx-zone:capped-memory> set physical=50m
      
    2. スワップメモリーの上限を設定します。


      zonecfg:lx-zone:capped-memory> set swap=100m
      
    3. ロックされたメモリーの上限を設定します。


      zonecfg:lx-zone:capped-memory> set locked=30m
      
    4. 指定を終了します。


      zonecfg:lx-zone:capped-memory> end
      
  11. ファイルシステムを追加します。


    zonecfg:lx-zone> add fs
    
    1. ファイルシステムのマウントポイント (この手順では /export/linux/local) を設定します。


      zonecfg:lx-zone:fs> set dir=/export/linux/local
      
    2. 大域ゾーン内の /opt/local を、構成中のゾーン内で /export/linux/local としてマウントすることを指定します。


      zonecfg:lx-zone:fs> set special=/opt/local
      

      非大域ゾーン内では、/export/linux/local ファイルシステムは読み取りおよび書き込みが可能です。

    3. ファイルシステムのタイプ (この手順では lofs) を指定します。


      zonecfg:lx-zone:fs> set type=lofs
      

      このタイプは、カーネルとそのファイルシステムとの相互動作の方法を示します。

    4. ファイルシステムの指定を終了します。


      zonecfg:lx-zone:fs> end
      

    この手順を複数回実行することで、複数のファイルシステムを追加できます。

  12. ネットワーク仮想インタフェースを追加します。


    zonecfg:lx-zone> add net
    
    1. IP アドレスを ip address of zone/netmask の形式で設定します。この手順では 10.6.10.233/24 を使用します。


      zonecfg:lx-zone:net> set address=10.6.10.233/24
      
    2. ネットワークインタフェースの物理デバイスタイプ (この手順では bge デバイス) を指定します。


      zonecfg:lx-zone:net> set physical=bge0
      
    3. 指定を終了します。


      zonecfg:lx-zone:net> end
      

    この手順を複数回実行することで、複数のネットワークインタフェースを追加できます。

  13. attr 資源タイプを使用して、大域ゾーンにあるオーディオデバイスをこのゾーンで使用可能にします。


    zonecfg:lx-zone> add attr
    
    1. 名前を audio に設定します。


      zonecfg:lx-zone:attr> set name=audio
      
    2. タイプを boolean に設定します。


      zonecfg:lx-zone:attr> set type=boolean
      
    3. 値を true に設定します。


      zonecfg:lx-zone:attr> set value=true
      
    4. 資源タイプ attr の指定を終了します。


      zonecfg:lx-zone:attr> end
      
  14. ゾーンの構成を検証します。


    zonecfg:lx-zone> verify
    
  15. ゾーンの構成を確定します。


    zonecfg:lx-zone> commit
    
  16. zonecfg コマンドを終了します。


    zonecfg:lx-zone> exit
    

    プロンプトで commit コマンドを明示的に入力しなくても、exit を入力するか EOF が発生すると、commit の実行が自動的に試みられます。

コマンド行での複数のサブコマンドの使用

ヒント –

zonecfg コマンドは、複数のサブコマンドもサポートします。次に示すように、同じシェル呼び出しで引用符で囲み、セミコロンで区切ります。


global# zonecfg -z lx-zone "create -t SUNWlx; set zonepath=/export/home/lx-zone"

次に進む手順

確定済みのゾーン構成をインストールする方法については、lx ブランドゾーンのインストールと起動」を参照してください。

複数の lx ブランドゾーンを構成するスクリプト

このスクリプトを使用して、システムで複数のゾーンを構成および起動できます。スクリプトには、次のパラメータを指定します。

このスクリプトを実行するには、大域ゾーン内の大域管理者になる必要があります。大域管理者は、大域ゾーン内でスーパーユーザー権限を保持するか、Primary Administrator 役割になります。


#!/bin/ksh
#
# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident	"%Z%%M%   %I%    %E% SMI"
if [[ -z "$1" || -z "$2" || -z "$3" || -z "$4" ]]; then
    echo "usage: $0 <#-of-zones> <zonename-prefix> <basedir> <template zone>"
    exit 2
fi
if [[ ! -d $3 ]]; then
    echo "$3 is not a directory"
    exit 1
fi
state=`zoneadm -z $4 list -p 2>/dev/null | cut -f 3 -d ":"`
if [[ -z "$state" || $state != "installed" ]]; then
    echo "$4 must be an installed, halted zone"
    exit 1
fi

template_zone=$4

nprocs=`psrinfo | wc -l`
nzones=$1
prefix=$2
dir=$3

ip_addrs_per_if=`ndd /dev/ip ip_addrs_per_if`
if [ $ip_addrs_per_if -lt $nzones ]; then
	    echo "ndd parameter ip_addrs_per_if is too low ($ip_addrs_per_if)"
	    echo "set it higher with 'ndd -set /dev/ip ip_addrs_per_if <num>"
	    exit 1
fi

i=1
while [ $i -le $nzones ]; do
	zoneadm -z $prefix$i clone $template_zone > /dev/null 2>&1
	if [ $? != 0 ]; then
		echo configuring $prefix$i
		F=$dir/$prefix$i.config
		rm -f $F
		echo "create -t SUNWlx" > $F
		echo "set zonepath=$dir/$prefix$i" >> $F
		zonecfg -z $prefix$i -f $dir/$prefix$i.config 2>&1 | \
		    sed 's/^/    /g' 
	else
		echo "skipping $prefix$i, already configured"
	fi
	i=`expr $i + 1`
done

i=1
while [ $i -le $nzones ]; do
	j=1
	while [ $j -le $nprocs ]; do
		if [ $i -le $nzones ]; then
			if [ `zoneadm -z $prefix$i list -p | \
			    cut -d':' -f 3` != "configured" ]; then
				echo "skipping $prefix$i, already installed"
			else
				echo installing $prefix$i
				mkdir -pm 0700 $dir/$prefix$i
				chmod 700 $dir/$prefix$i
				zoneadm -z $prefix$i install -s -d /path/to/ISOs > /dev/null 2>&1 &
				sleep 1	# spread things out just a tad
			fi
		fi
		i=`expr $i + 1`
		j=`expr $j + 1`
	done
	wait
done

i=1
para=`expr $nprocs \* 2`
while [ $i -le $nzones ]; do
	date
	j=1
	while [ $j -le $para ]; do
		if [ $i -le $nzones ]; then
			echo booting $prefix$i
			zoneadm -z $prefix$i boot &
		fi
		j=`expr $j + 1`
		i=`expr $i + 1`
	done
	wait
done

Procedureブランドゾーンの構成を表示する方法

この手順を実行するには、大域ゾーン内で大域管理者になる必要があります。

  1. スーパーユーザーまたは Primary Administrator 役割になります。

    役割の作成と作成した役割のユーザーへの割り当てについては、『Solaris のシステム管理 (基本編)』「Solaris 管理ツールを RBAC と組み合わせて使用する (作業マップ)」を参照してください。

  2. ゾーンの構成を表示します。


    global# zonecfg -z zonename info