zoneがある場合の image-update について

非グローバルゾーンは、今のところBE系のコマンドが使えないと思われます。
また、当然グローバルゾーンと同じカーネルで動くものなので、カーネルのアップデートはこのあたりを踏まえてimage-updateする必要があります。

今回試したのは、OpenSolaris(snv_134b)からSolaris11 Express(snv_151a)へのimage-updateです。zoneは
グローバルゾーン以外に3つほどある状態です。

手順は以下で成功しました。

  1. グローバルゾーンで image-update
  2. グローバルゾーンから、pkg -R コマンドで非グローバルゾーンの image-update
  3. リブート
  4. 全てのゾーンが Solaris11(snv_151a)で立ち上がる

(素のsnv_134からだと、1. snv_134bへのimage-update、2. snv_151aへのimage-updateと上記を2回繰り返す必要があると思います。)

グローバルゾーンのimage-update


# pkg publisher
発行元 タイプ 状態 URI
solaris (優先) 起点 online http://pkg.oracle.com/solaris/release/
# pkg image-update -v --accept
snv_134bへのimage-updateのリポジトリ先は以下でよいです。

# pkg publisher
発行元 タイプ 状態 URI
opensolaris.org (優先) 起点 online http://pkg.opensolaris.org/release/


非グローバルゾーンのimage-update


# zfs list
...
rpool/ROOT/opensolaris 13.1M 432G 3.92G /
rpool/ROOT/opensolaris-snv_134b 16.4M 432G 4.70G /
rpool/ROOT/opensolaris-snv_134b-1 8.42G 432G 4.90G / # これが Solaris11のBE
...
rpool/zone/db/ROOT/zbe 916K 432G 482M legacy
rpool/zone/db/ROOT/zbe-1 293K 432G 504M legacy
rpool/zone/db/ROOT/zbe-2 736M 432G 504M legacy # グローバルゾーンのimage-updateで自動生成
...
rpool/zone/mail/ROOT/zbe 1002K 432G 482M legacy
rpool/zone/mail/ROOT/zbe-1 334K 432G 504M legacy
rpool/zone/mail/ROOT/zbe-2 736M 432G 504M legacy # グローバルゾーンのimage-updateで自動生成
...
rpool/zone/web/ROOT/zbe 1.54M 432G 486M legacy
rpool/zone/web/ROOT/zbe-1 301K 432G 509M legacy
rpool/zone/web/ROOT/zbe-2 740M 432G 509M legacy # グローバルゾーンのimage-updateで自動生成
...
グローバルゾーンのimage-updateで作成される新しいBEが opensolaris-snv_134b-1 ですがそれと同時に
非グローバルゾーンでも新しいzfsスナップショットが自動で作成されます。

rpool/zone/db/ROOT/zbe-2 736M 432G 504M legacy
rpool/zone/mail/ROOT/zbe-2 736M 432G 504M legacy
rpool/zone/web/ROOT/zbe-2 740M 432G 509M legacy
私の場合は、今まで動いていたzoneのROOTとして、*****/ROOT/zbe-1 がマウントされていました。(dfコマンドで確認できます)
なので、この新しいzfs領域に対してimage-updateします。

# mount -F zfs rpool/zone/db/ROOT/zbe-2 /mnt
# pkg -R /mnt set-publisher -P -g http://pkg.oracle.com/solaris/release/ solaris
# pkg -R /mnt unset-publisher opensolaris.org
# pkg -R /mnt image-update -v --accept
...
# umount /mnt
これを、各zoneの単位で実行します。 /mnt 以外にマウントして複数zoneを同時にimage-updateしても基本的のよいと思います。

後はリブートして完了。


公式の方法がどのドキュメントに書いてあるかイマイチ探せなかったので、実際はもっと手軽にできるかもしれませんが、とりあえず上記方法でもうまくいくと思います。