Solaris コンテナ構築おぼえがき。

継ぎ足し継ぎ足し構築された秘伝の環境のSolaris10マスィーンにガタが来た。ログもなにも残さずにお眠り遊ばされるので強制電源断するしかなく非常に怖い。一番怖いのは秘伝の環境。再構築する自信は皆無である。

EOSでメーカー対応も不可。業者に委託することも可能だがスポット対応だと如何せんお高い。そんな折にスゴクタカイサーバが転がり込んできたので仮想化する事にした。

 

やる事は簡単。今の環境のイメージファイル作って仮想環境に載せるだけ。と、構築した経験のある方は言ってたが果たして。

と、構築した経験のある方は言ってたが果たして。

 

まずはフラッシュアーカイブを作成する。

flarcreateコマンドを使って仮想化対象のフラッシュアーカイブを作成します。

 

 

# flarcreate -n name options path/filename

 

フラッシュアーカイブを作成する際はできる限り静的であることが望ましいので
シングルユーザーモード、rootユーザーで実施します。
#CDブートでも出来るようですが試してません。


マシン名がhogehogeとしましょう。-cオプションで圧縮も可能ですがディスク容量あるので圧縮せずに作成しました。

 

# cd /
# flarcreate -n hogehoge /home/hogehoge.flar


また、指定のパスを除外することも可能です。
OS外のドライブ等、明示的に外したい場合は-xオプションを利用します。


例えば/workを除外する場合、

# flarcreate -n hogehoge -x /work /home/hogehoge.flar

となります。

 

Solaris フラッシュアーカイブの作成 - Oracle Solaris 10 8/11 インストールガイド (Solaris フラッシュアーカイブの作成とインストール)

 

Solaris コンテナ構築

移行先のサーバーでSolaris コンテナ(Zone)を構築します。
尚、サーバー側にはZoneに関連するパッケージがインストールされている前提とします。


既存の状態確認をします。

 

# zoneadm list -vc

ID NAME STATUS PATH
0 global running /

 

global-zoneが動いてますね。Solarisの仮想化は仮想環境を動かすglobal-zone上に仮想環境non-global-zoneを作成します。


zoneの作成

元環境で作成したアーカイブのインストール先を作成します。

まずはインストール先をmkdirしておきます。

 

# cd /export/home
# mkdir zones
# cd zones
# mkdir hogehoge
# pwd
# /export/home/zones/hogehoge

 

上記例では/export/home/zones/hogehogeにインストールします。
作成先は任意。後々複数環境を構築することもあるので/export/home/zonesとベースディレクトリを作成しています。


zone登録とコンフィグレーション(まだ下準備)。

仮想環境hogehogeの環境設定をします。

 

その前にifconfig -aでネットワークの設定状態見ておいてください。
仮想環境のipアドレス割り当て先を指定する際に必要となります。

# zonecfg -z hogehoge

hogehoge: No such zone configured

'create' を使用して、新しいゾーンの構成を開始します。


いきなり No such zone configuredとでてビビりますが、「まだ環境設定できてないので作れや」とのことです。

# zonecfg:hogehoge>

zonecfgに入るとコマンドプロンプトがこのようになります。尚、抜ける際はexitで抜けます。


さて、zone hogehogeを作ります。


# zonecfg:hogehoge>create

 

次にzone pathを設定。

# zonecfg:hogehoge>set zonepath=/export/home/zones/hogehoge

 

これでhogehogeさんの入れ先が確定できました。

 

論理ネットワークアドレスを割り当てます。


# zonecfg:hogehoge>add net
# zonecfg:hogehoge:net>

 

コマンドプロンプトが変わりましたね?これでネットワーク設定ができます。
設定するアドレスを例として172.16.12.11とすると

 

# zonecfg:hogehoge:net>set address=172.16.12.11

 

設定した IP アドレスに対応するネットワークインタフェースをセットします。
ifconfig -aで確認した物理ネットワークインタフェースに割り当てます。(仮想も可能)

 

# zonecfg:hogehoge:net>set physical=hme0

 

上記例では物理ネットー枠インタフェースhme0に割り当てました。

 

# zonecfg:hogehoge:net>end

 

endで設定を終了します。

 

# zonecfg:hogehoge>

 

コマンドプロンプトが変化し、ネットワーク設定を抜けました。

尚、設定を間違った場合、cancelコマンドでaddコマンドを中断できます。


ファイルシステムの設定

仮想ファイルシステムを作成し、サーバ側の任意のパスをmount可能です。
例として仮想環境に/workを作成し、サーバ側の/export/home/workをマウントします。


# zonecfg:hogehoge>add fs
# zonecfg:hogehoge:fs>

 

fs(ファイルシステム)設定にコマンドプロンプトが変わります。

仮想環境側のパスを作成します。
# zonecfg:hogehoge:fs>set dir=/work

サーバ側のパスを設定します。
# zonecfg:hogehoge:fs>set special=/export/home/work

共有タイプを指定します。
# zonecfg:hogehoge:fs>set type=lofs

lofsはloopback file systemです。

# zonecfg:hogehoge:fs>end

 

endでファイルシステム設定を終了します。

複数のディレクトリを共有したい場合、add fs~endまでディレクトリ数分繰り返します。


自動ブートの設定。
サーバが起動した際に自動的に仮想環境もブートするか指定できます。
自動的にブートしたくない場合はデフォルトfalseの為、設定は不要です。


# zonecfg:hogehoge> set autoboot=true

 

これで自動ブートします。


検証とコミット
# zonecfg:hogehoge> verify
# zonecfg:hogehoge> commit

verifyで整合性を検証し、commitでメモリから書き込みます。

 

# zonecfg:hogehoge> exit

これで設定終了です

 

元環境から作成したアーカイブをコピーし仮想環境にインストールします。
-aはインストールアーカイブ保存先の指定、-pは元のシステムIDを保持します。

# zoneadm -z hogehoge install -a /export/home/s10-system.flar -p


尚、元環境のパッケージ等が新しい場合、インストール時に失敗します。
その際はログを確認し、対象のパッケージをダウンロードしpkgaddしましょう。


インストールが完了したら晴れて仮想環境の出来上がりです。

確認

# zoneadm list -cv
ID NAME STATUS PATH
0 global running /
1 hogehoge installed /export/home/zones/hogehoge

これでインストールされていることが確認できます。


仮想環境の起動

# zoneadmin -z hogehoge boot

# zoneadm list -cv
ID NAME STATUS PATH
0 global running /
1 hogehoge running /export/home/zones/hogehoge


仮想環境へのログイン

仮想環境へのログインはzloginを使用します。

# zlogin -C hogehoge

初回は起動シーケンスが動いてる(かも)。
コンソールモードでログインをすることにより、telnetftp等のイニシャライズが完了します。

コンソールモードを抜ける際には

~. チルド ピリオド

で抜けます。

 

コンソールログインの為、仮想環境でXアプリケーションを動かす場合はsetenv DISPLAYが必要となりますのでお忘れなく。


仮想環境の停止

# zlogin hogehoge shutdown -y -g0 -i 0
これで停止できます。

 

#zoneadm -z hogehoge halt
でも停止できますが、シャットダウンスクリプトが走らないので注意が必要です。


停止状態であるか確認する癖をつけましょう。

# zoneadm list -cv

ID NAME STATUS PATH
0 global running /
1 hogehoge installed /export/home/zones/hogehoge