彷徨えるフジワラ

年がら年中さまよってます

ゾーンに手を出してみる

設定とかで実験的なことを試してみる場合、新たに起こしたゾーン(っていうか、最近は「コンテナ」という名称で統一しているのかな?)で作業したほうが影響範囲を絞り込めて便利そうなので、そろそろゾーンに手を出してみることに。

ゾーン作成の手順に関しては、びぎなーず 2009.09 における大野さんの資料に沿って進めればスイスイと進む筈。

とは言いつつも、コマンドの対話実行が嫌いな自分としては、zonecfg コマンドの "-f" オプションを利用する方向で。

ゾーンを立てるまで

以下、新規ゾーン名は "experimental" で、zonecfg には常に "-z experimental" を指定することを仮定。また、/zones 配下への "zfs create" の事前実施も忘れずに。

新規ゾーンの作成は、以下の内容のファイルを zonecfg コマンドに処理させれば OK。

create
set zonepath=/zones/experimental
verify
commit

"zoneadm install" 実施前の zone は、"-c" 無しの "zoneadm list" では表示されないので、新規作成結果の確認には注意が必要。ゾーン一覧に何も表示されないので create が失敗したのかと思い zonecfg を対話的に実行してみたら:

zonecfg:experimental> create
Zone experimental already exists; create anyway (y/[n])? 

という感じで「もう出来てるよ」と怒られた。

また、この時点では ZFS 上の領域確保も未実施のため、当然 "zfs list" も変化無しなので、こちらも要注意。

後は "zoneadm install" ⇒ "zlogin -C" で console 接続確保 ⇒ "zoneadm boot" ⇒ console 側で初期設定、という流れ。詳細は、先述した「大野文書」参照のこと。

ところで、teraterm + ssh@cygwin + screen 経由で "zlogin -C" を実行したら、console detach を行なう "~."(チルダ+ピリオド)で何故か ssh 接続が disconnect されてしまう羽目に…………。screen とも ssh とも関係ない感じで、"zlogin -C" が何らかの制御コードを発行している模様。

ついでに、zlogin コマンドは man に掲載されていないエスケープコマンドが幾つか提供している模様。これは login コマンド由来なのかな?でも、login(1) の man にも掲載されていないし…………。この辺は 20 世紀時分からの来歴に詳しい人とかならわかるんだろうけど、個人的にはあまり縁の無かった領分なんだよなぁ。

ゾーンを立てた後で

作成されたゾーンは実験用なので、とりあえず「共有 IP ゾーン」として設定することに。global ゾーン側が DHCP 設定なので、できれば新規ゾーン側も DHCP でアレしたいのだけど、どうやら明示的なアドレス設定が必要らしい。

物理インタフェース=MACアドレスを共有しているのだから、止む無しと言えば止む無しなのだけど、/etc/resolv.conf とかも手動で書かないといけないので、環境変更の際にはうっかり忘れないようにしないとなぁ。 /etc/nsswitch.conf は dns を引くように設定追加するだけだから、移行時に問題になることはないでしょ、多分。

実験用ゾーンを一旦停止("zoneadm halt")しておいて、global ゾーン側で zonecfg に以下の内容のファイルを食わせ:

add net
set physical=e1000g0
set address=192.168.162.126/24
end
verify
commit

再度実験用ゾーンを起動("zoneadm boot")した後に、/etc/resolv.conf と /etc/nsswitch.conf を編集すれば設定は完了。

適当なコマンドで外部ホストに接続できることを確認。これで仮想ホストの一丁あがり、という按配。おぉぉぉ、なんて簡単なんだ。