!!!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 . 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 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]