瀧@ジャストプレイヤーです。

OpenSolarisのZoneは、Solaris11には「かなりの確率」で、attachに失敗しま
す。
僕の手持ちのもので半分以上がfailします。

もともと名前も違うOSなので、仕方がないと言えば仕方がないのですが・・・。
また、Zoneのアップデートはとても大変なのですが、実運用に置いて、Zoneの
アップデートに関する話を真面目に書いてる例は、日本語、英語含めてほとんど
無いので、ちょっとおちゃらけてかいてますが、人によっては相当の資料になる
かも知れません:)


自称Solaris Container Master(嘘)のプライドで何とかZoneをattach -uする
ためのTipsをポストします。





*ちなみに、下記の作業は、zoneの環境を壊滅的に破損させる行為でもあるの
で、
やるまえに、かならず利用しているzbeに対してsnapshotをとってください。
zbeはbeadmの数だけ、複数あるので、現在利用している物(一番てっとり速くみ
るには、mountしてるもの)を間違えないようにしてください。

○ zoneのアップデート方法

アップデートしたzoneは基本、そのままではbootできません。
マイナーアップデートぐらいなら起動はできるのですが。

アップデートは、

zoneadm -z ゾーン名 detach && zoneadm -z ゾーン名 attach -u

で、行います。

アップデート中は、ログファイル名がでてきます。こんなのです。
/var/tmp/ZONE名.attach_log.1faGlD

pfexec tail -f 〜

で見ることをお勧めします。

これで、わずかなZoneがUpdateに成功します。


○ 変なpublisherの物を削除する。

Primary以外のpublisher以外の物を削除します。

Solaris11exからは、attach -uするときのpublisherは、globalzoneのものをみ
ます。
仕様変更ですが、どういう深い考察があったのかはしりません。

ちなみに、OpenSolarisでは、publisherはそれぞれのcontainerのpublisherを利
用します。attach時のpublisherアクセスは、実はglobalzoneから行うため、

・non-globalzoneとglobalzoneで所属するネットワークが違う時

などは、updateができません。


なお、当然、non-global-zone上のlocalhostに立てたIPSサーバからのattach
は、卵が先か鶏が先かで、アクセス出来ません。


多分「バグ」っぽい仕様なんですが、--disableされたpublisherも見るので、
globalzoneのpublisherはこのとき「最大限にシンプル」にしておくことをお勧
めします。


そこで、GloalZoneのpublisherを最大限シンプルにすることをお勧めします。

これで、わずかなZoneがattach可能になります。

○zone rootを直接触り、non-globalzone上のpublisherを確認する

実はupdate時は、

pkg -R zoneのrootディレクトリ install entire

が、走っています。このとき、entireに対するアップデートが新しいレポジトリ
に対してしっぱいする場合、zoneはattachできずにfailしています。

そこで、これから先はrootディレクトリにたいして直接の作業をします。


pkg -R zoneのrootディレクトリ publisher

で、publisherを見ます。変なpublisherが登録されていたら、先に削除しておき
ます。
なお、attach -uするときには、「親のprimary」とおなじ物になるため、
primaryはいい加減でOKです。

トラブルシューティングとして、

pkg -R zoneのrootディレクトリ install -v entire

で、エラーメッセージを見ることができます。多分consolidation系のpkgで相当
量のエラーが出てると思いますが、実はこのエラーメッセージは実は真面目に見
ても、ほとんどのことがわかりません(多分、依存の関係で、最後に
consolidation系が出てくるんじゃないかとおもいます)。


zone内のpublisherを弄ることで、わずかのzoneのupdateは成功します


○インクリメンタルアップデートする。

111→151などのアップデートは基本「無理」です。

そこで、バージョンアップを試みた方が良いです。

そのためにはpublisherを一度、opensolarisのレポジトリに設定します

まずこれで、最終版のOpenSolarisのレポジトリを(134b)をひくことになりま
す。

pkg -R zoneのrootディレクトリ set-publisher -O
http://pkg.opensolaris.org/release opensolaris.org

そして、バージョン番号を指定してinstallします。
pkg -R zoneのrootディレクトリ install -v ent...@バージョン番号

111から112・・・とやっていると、正直しんどいので、

134bあたりに、一気にアップデートができるか確認してみます。

最後にzoneadm -z 〜 attach -uで、attachすると151になります。

これで、わずかなzoneがattachに成功します。

○image-updateを利用する

次の方法で、zone内をimage-updateすることができます。
image-updateは、beadm+install entireだと思っていたのですが、微妙に違う
のです。


pkg -R zoneのrootディレクトリ image-update -v

実は、私はこれで救えたことはありません。


○おかしな依存をもつ系、あるいはobsoluteな物が含まれている物は、事前に削
除する

僕の経験則上、次の物たちは、事前にuninstallしておくと、上手くいきます

・Apache系
・PHP系
・PostgreSQL系(無くなりました)
・Sun Studio系

やり方は、

pkg -R zoneのrootディレクトリ uninstall -v 色々なパッケージ名


ちなみに、uninstall -vrとすると、依存関係を更に手繰っていき、がんがんア
ンインストールしてしまいます。一件便利なのですが、Solarisはかなりのもの
がcore solaris系に依存してるものがあるため、油断するとroot以下がすっぽり
いなくなるので注意です。


これで、そこそこの数のコンテナが救われます!


○pkg: No solution was found to satisfy constraints


失敗すると、このエラーがでてくるわけですが。


実運用のさなかにこれが起きると

「どうしてこうなった!」

と思うことがしばしばなのですが、なぜかをマジレスすると、

「ZONEのアップデートはipsのentireに依存している」

からです。

ZONEとは、chrootの親戚のようなものでもあり、その下にあるファイルはipsに
よって管理されています。これらをパッケージャ以外を使ってどうやってアップ
デートするの?ということなんですが、IPSがRuled Outして想定外の事象に落ち
ると、現在の仕様では「速効、諦める!」からです。

諦められなかったら、どうなるか?という方法がありません。


実は僕は誰もMLで質問しないのが不思議なんですが、IPSっていうのは、--force
みたいなオプションがなく、なにはともあれ、インストールする的な構造があり
ません。
つまり、これに失敗すると、OSのアップデートも難しくなるし、zoneのアップ
デートも難しくなるのです。


そして、かくして、上のTIPSを全部試してみてだめだと、ほとんど策はなく、そ
のZONEは見事、役立たずのディレクトリと変わるのですが、最後の手段がありま
す。


image-createです。

ただし、image-createをする場合、OSのイメージが「初期化」されます。

つまり、image-createするということは、
「初期化されようが、ZONEが起動されないのは困る! ただのディレクトリよ
り、OS情報が初期化され、ファイルが残ってたら、後で復旧できるじゃない
か!」
と、いうところまで「追いこまれた」人が使う最後の手段です。

でも、これがあるとないのでは、「かなり」違います。


まず、次のようにしてzoneの中を初期化します(--fullをつけるときもある)
pkg image-create -f -z -p solaris=http://pkg.oracle.com/solaris/release/
zoneのルートディレクトリ
これだけだと、起動ができないので、system/libraryを、GlobalZoneのものとあ
わせます。

pkg -R /zones/kasumiso-web/root install -v --accept system/library  


かくして、こうやってできたZONEは全くプレーンな子になってしまいます
が・・・・。


あとは、publisher等を調整したりして、zoneをattachしてください。


この方法で、「すべてのzoneが救済」されますが、全てが新しい世界になってい
ることを忘れること無きよう。

また、pkgのインデックス情報は全て初期化されておりますが、ファイルは残っ
ています。
ですから、あとで謎の不具合はでるかもしれません。

この状態まで来たら、ZONEの中で、/.zfs/snapshot/以下の中から、過去のetcの
中を見て、設定などを復元し治すと良いでしょう。

(なお、最後の方法は、 /usr/lib/brand/pkgcreatezone で新しいzoneを作ると
きの方法を真似ているので、以下略・・・)

zoneadm -z 〜 attach に、--overrideみたいなオプションがあるといいかもし
れませんねぇ。これを作るのは簡単ではありますが。


以上です。

-- 
-------------------
OpenSolarisのVPSレンタルサーバ:Phase2Server
http://www.justplayer.ne.jp/
デザイン自由なCMSサービス:WikiPlus http://www.wikiplus.jp/
-------------------
ジャストプレイヤー株式会社
代表取締役社長 瀧 康史
〒422-8077 静岡県静岡市駿河区大和2丁目3-29 ラヴィアンヌ21 201
 TEL 054-203-5535  FAX 054-203-5539
mailto:[email protected] http://www.justplayer.co.jp/
ブログ: http://kohju.justplayer.com/
Twitter: http://twitter.com/kohju

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
ug-jposug mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/ug-jposug

メールによる返信