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

第 33 章 lx ブランドゾーンの構成 (手順)

この章では、x64 システムまたは x86 システムに lx ブランドゾーンを構成する方法について説明します。手順は、Solaris ゾーンの構成手順と基本的に同じです。いくつかのプロパティーは、ブランドゾーンの構成には必要ありません。

lx ブランドゾーンの計画と構成 (作業マップ)

ゾーンを使用できるようにシステムを設定する前に、まず、情報を収集してゾーンの構成方法を決定する必要があります。次の作業マップに、lx ゾーンの計画および構成方法の概要を示します。

タスク 

説明 

説明 

ゾーンの全体的な計画を立てます。 

  • ゾーンで実行するアプリケーションを決定します。

  • ゾーン内のファイルを保持するディスク領域の可用性を評価します。

  • 資源管理機能も使用している場合は、資源管理境界に合わせてゾーンを配列する方法を決定します。

  • 資源プールを使用する場合は、必要に応じてプールを構成します。

「システム要件と容量要件」および 「ゾーンで使用される資源プール」を参照してください。

ゾーンの名前とパスを決定します。 

命名規則に基づいてゾーンの名前を決定します。ZFS (Zetabyte File System) 上のパスをお勧めします。複製元の zonepath と複製先の zonepath が両方とも ZFS 上にあり、同じプールに含まれる場合、zoneadm cloneコマンドは自動的に ZFS を使用してゾーンを複製します。

「資源タイプとプロパティータイプ」および『Oracle Solaris ZFS 管理ガイド』を参照してください。

ゾーンの IP アドレスを取得または構成します。 

構成に基づき、ネットワークアクセスを行う非大域ゾーンごとに 1 つ以上の IP アドレスを取得する必要があります。 

「ゾーンホスト名の決定およびネットワークアドレスの取得」および『Solaris のシステム管理 (IP サービス)』を参照してください。

ゾーンにファイルシステムをマウントするかどうかを決定します。 

アプリケーションの要件を確認します。 

詳細は、「ゾーンでマウントされるファイルシステム」を参照してください。

ゾーンで使用可能にするべきネットワークインタフェースを決定します。 

アプリケーションの要件を確認します。 

詳細は、「共有 IP ネットワークインタフェース」を参照してください。

非大域ゾーンのデフォルトの特権セットを変更する必要があるかどうかを決定します。 

特権セットを確認します。 デフォルトの特権、追加および削除が可能な特権、および現時点では使用できない特権があります。 

「資源タイプとプロパティータイプ」および 「非大域ゾーン内の特権」を参照してください。

ゾーンを構成します。 

zonecfg を使用してゾーンの構成を作成します。

lx ブランドゾーンを構成、検証、および確定する方法」を参照してください。

構成したゾーンを検証および確定します。 

指定された資源およびプロパティーが仮想サーバー上で有効かどうかを判定します。 

lx ブランドゾーンを構成、検証、および確定する方法」を参照してください。

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
    

ゾーンの構成を変更する、元に戻す、または削除する

ゾーンの構成を変更する、元に戻す、または削除する手順については、次の各節を参照してください。