トップ 一覧 検索 ヘルプ RSS ログイン

Solarisゾーンを使ってみるの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Solarisゾーンを使ってみる

!!!概要
SolarisゾーンはSolaris 10で新しく追加された機能で、Solarisの中に仮想環境を作成することができます。SolarisゾーンはVMwareなどのようにハードウェアをエミュレートするものではなく、1つのSolarisカーネル上で複数のSolarisを動作させるイメージです。似た機能としてはFreeBSDのjailなどがあります。

!!!ゾーンの種類について
!!大域(グローバル)ゾーン
システム上に1つだけ存在するデフォルトのゾーンです。OSのインストール直後はグローバルゾーンだけが存在します。

!!非大域(ノングローバル, ローカル)ゾーン
グローバルゾーンの中に作成される仮想的な環境です。ノングローバルゾーンからはグローバルゾーンや他のノングローバルゾーンのプロセスやファイルシステムは見えません。

ノングローバルゾーンには疎ルートゾーンと完全ルートゾーンの2種類があります。これらは本質的には同じものですので敢えて区別することはないと思います。

!疎ルートゾーン
グローバルゾーンとファイルシステムの一部を共有するゾーンです。デフォルトでは/lib, /platform, /sbin, /usrが共有されます。これらのディレクトリは読み込み専用でループバックマウントされます。読み込み専用ですので書き込むことはできません。疎ルートゾーンでは消費するディスクの容量が少なくてすむ(100MB〜)という利点があります。

ゾーンを使うことを考えると/usr/localにアプリケーションをインストールしていくのはやめた方がよさそうです。なるべく/optを使うほうがよさそうです。

!完全ルートゾーン
グローバルゾーンとファイルシステムを共有しないゾーンです。インストール時にグローバルゾーンのファイルがコピーされますので疎ルートゾーンより多くのディスク容量が必要です。

!!!ゾーンの設計
以下のような設計でゾーンを構成してみます。
,設定項目,設定内容
,ゾーン名,www
,ゾーンパス,/export/zones/www
,ゾーン種別,疎ルートゾーン(/lib /platform /sbin /usrを共有)
,追加ファイルシステム,/opt/sfwを読み込み専用でループバックマウントする
,ネットワーク,NIC:rh0、IPアドレス:192.168.0.4

!!!ゾーンの構成
!!ディレクトリ作成
ゾーンで使うディレクトリを作成します。ふつうのディレクトリでもいいですが、管理がやりやすくなるので1つのゾーンに1つのパーティションを割り当てることが推奨されているようです。ZFSと組み合わせるのもよさそうです。
 # mkdir -p /export/zones/www

パーミッションを700に変更します。パーミッションが700でないとゾーンを作成できません。
 # chmod 700 /export/zones/www

!!ゾーンの設定
zonecfgコマンドでゾーンの設定を行います。初回はまだゾーンがないので以下のようなメッセージが表示されます。
 # zonecfg -z www
 www: そのような構成済みゾーンはありません
 'create' を使用して、新しいゾーンの構成を開始してください。

ゾーンを作成します。
createコマンドでゾーンを作成します。
 zonecfg:www> create

ゾーンパスを設定します。
 zonecfg:www> set zonepath=/export/zones/www

グローバルゾーンの起動時に自動的にゾーンが起動するようにします。
 zonecfg:www> set autoboot=true

追加でマウントするファイルシステムを設定します。読み取り専用なのでinherit-pkg-dirでもいいのですが、inherit-pkg-dirだと後で設定を削除したり変更したりはできないのでfsを使います。
add fsコマンドで、追加でマウントするファイルシステムを設定します。読み取り専用なのでinherit-pkg-dirでもいいのですが、inherit-pkg-dirだと後で設定を削除したり変更したりはできないのでfsを使います。
 zonecfg:www> add fs
 zonecfg:www:fs> dir=/opt/sfw
 zonecfg:www:fs> set special=/opt/sfw
 zonecfg:www:fs> set type=lofs
 zonecfg:www:fs> set options=ro,nodevices
 zonecfg:www:fs> end

ネットワークインタフェースとIPアドレスを設定します。
add netコマンドでネットワークインタフェースとIPアドレスを設定します。
 zonecfg:www> add net
 zonecfg:www:net> set address=192.168.0.4
 zonecfg:www:net> set physical=rh0
 zonecfg:www:net> end

設定を表示します。デフォルトでは疎ルートゾーンとして構成されるので、上記の設定に加えて/lib, /platform, /sbin, /usrが共有されていることがわかります。完全ルートゾーンとして構成するにはremoveコマンドでこれらの設定を削除する必要があります。
infoコマンドで設定を表示します。デフォルトでは疎ルートゾーンとして構成されるので、上記の設定に加えてinherit-pkg-dirで/lib, /platform, /sbin, /usrが共有されていることがわかります。完全ルートゾーンとして構成するにはremoveコマンドでこれらの設定を削除する必要があります。
 zonecfg:www> info
 zonename: www
 zonepath: /export/zones/www
 autoboot: true
 pool:
 limitpriv:
 inherit-pkg-dir:
         dir: /lib
 inherit-pkg-dir:
         dir: /platform
 inherit-pkg-dir:
         dir: /sbin
 inherit-pkg-dir:
         dir: /usr
 fs:
         dir: /opt/sfw
         special: /opt/sfw
         raw not specified
         type: lofs
         options: [ro,nodevices]
 net:
         address: 192.168.0.4
         physical: rh0

設定を確認します。特にメッセージが表示されなければ正常です。
verifyコマンドで設定を確認します。特にメッセージが表示されなければ正常です。
 zonecfg:www> verify

設定を反映します。
commitコマンドで設定を反映します。
 zonecfg:www> commit

zonecfgコマンドを抜けます。
exitコマンドでzonecfgコマンドを抜けます。
 zonecfg:www> exit

zoneadmコマンドでゾーンのステータスを確認します。wwwゾーンのステータスがconfiguredになっているのがわかります。
 # zoneadm list -cv
   ID NAME             STATUS         PATH
    0 global           running        /
    - www              configured     /export/zones/www

!!ゾーンのインストール
ゾーンをインストールします。時間がかかるので気長に待ってください。
 # zoneadm -z www install
 Preparing to install zone <www>.
 Creating list of files to copy from the global zone.
 Copying <6659> files to the zone.
 Initializing zone product registry.
 Determining zone package initialization order.
 Preparing to initialize <1248> packages on the zone.
 Initialized <1248> packages on zone.
 Zone <www> is initialized.

wwwゾーンのステータスがinstalledになっているのを確認します。
 # zoneadm list -cv
   ID NAME             STATUS         PATH
    0 global           running        /
    - www              installed      /export/zones/www

!!ゾーンの起動
ゾーンを起動します。
 # zoneadm -z www boot

wwwゾーンのステータスがrunnningになっているのを確認します。
 # zoneadm list -cv
  ID NAME             STATUS         PATH
   0 global           running        /
   3 www              running        /export/zones/www

zloginコマンドに-Cオプションを付けて、wwwゾーンにコンソール接続します。接続するとOSのインストール時と同じようにホスト名やrootのパスワードの設定を尋ねられます。
 # zlogin -C www
 [ゾーン 'www' コンソールに接続しました]

 Select a Language
 
   0. English
   1. Japanese
 
 Please make a choice (0 - 1), or press h or ? for help: 1
 ...

設定が終了すると自動的にゾーンがリブートします。
コンソール接続中に「~.」というシーケンスを入力すると接続を終了できます。
 ~.
 [ゾーン 'www' コンソールへの接続が閉じられました]

-Cオプションを付けずにzloginコマンドを実行するとrootのシェルに接続できます。
 # zlogin www
 [ゾーン 'www' pts/6 に接続されました]

!!!補足
!!グローバルゾーンでのプロセスの見え方
ノングローバルゾーンからはそのゾーンのプロセスしか見えませんが、グローバルゾーンからはすべてのノングローバルゾーンのプロセスが見えます。グローバルゾーンからはpkillコマンドなどでノングローバルゾーンのプロセスを終了させることもできるので注意が必要です。

!!ゾーンでSolaris以外のOSを動かす
Solaris 10 11/06ではゾーンでSolaris以外のOSを動かすことはできませんが、OpenSolarisではBrandZという機能によりゾーンでLinuxを動かすことができるようです。要注目です。

[Sun & Users - Linuxを動かそう(いよいよ登場BrandZ)|http://jp.sun.com/communities/users/0705/feature01.html]

!!!リンク
*[docs.sun.com: Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)|http://docs.sun.com/app/docs/doc/819-0385?l=ja]
*[docs.sun.com: SunOS リファレンスマニュアル: zones(5)|http://docs.sun.com/app/docs/doc/819-1217/6n3jdq7j8?a=view]
*[docs.sun.com: SunOS リファレンスマニュアル: zoneadm(1M)|http://docs.sun.com/app/docs/doc/819-1211/6n3j834b5?a=view]
*[docs.sun.com: SunOS リファレンスマニュアル: zonecfg(1M)|http://docs.sun.com/app/docs/doc/819-1211/6n3j834b6?a=view]
*[docs.sun.com: SunOS リファレンスマニュアル: zlogin(1)|http://docs.sun.com/app/docs/doc/819-1210/6n3j74jvm?a=view]