- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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]