ゾーンに手を出してみる
設定とかで実験的なことを試してみる場合、新たに起こしたゾーン(っていうか、最近は「コンテナ」という名称で統一しているのかな?)で作業したほうが影響範囲を絞り込めて便利そうなので、そろそろゾーンに手を出してみることに。
ゾーン作成の手順に関しては、びぎなーず 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 を編集すれば設定は完了。
適当なコマンドで外部ホストに接続できることを確認。これで仮想ホストの一丁あがり、という按配。おぉぉぉ、なんて簡単なんだ。