トップ 差分 一覧 ソース 検索 ヘルプ 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

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

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

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

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)

リンク

最終更新時間:2007年07月22日 10時59分38秒