彷徨えるフジワラ

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

環境更新

ZFS での実験は一通り済んだので、環境更新系の実験に手を出してみる。つまりは aptitude とか yum みたいなことを。

夢の21世紀ともなれば、ソフトウェア業界の鉄則「動いているものには変更を加えるな」も過去の話になるかと思ったのだけれど、人類は未だに複数コンポネント間でのバージョン依存問題を解決するには至っていない模様。おかしい。エアカーも走ってないし、今は本当に21世紀か?

そんなわけで、稼動中のシステムのパッケージ類を更新する、なんてのは年寄りには刺激が強過ぎる。自宅マシンの Linux 環境とかで随分慣れたけどね。そういえば、configure + make せずにバイナリパッケージをインストールする、ってのも最初は凄く違和感があったっけ。

で、Solaris はこれに対して「起動環境の複製」という解決方法を提示している。要するに、ZFS における clone 機能を使うことで、ディスク消費を抑制しつつ、異なる内容の起動環境を複製保持してしまおう、と。
beadm を使用することで、ZFS に対する複製操作とか、(x86 系なら) GRUB の起動メニュー設定もまとめて面倒を見てくれるいう楽チン具合。Copy-on-Write な ZFS では clone しても所謂全コピーが走らないので、「複製」そのものも即終了というお手軽さ。

但し起動環境を複製した際に新規追加される GRUB メニュー項目は、現在起動中(= "/" にマウントされている)の ZFS インスタンス名と bootfs 設定が一致する最初のメニュー要素を複製するらしく、私の環境ではメニューの設定が:

  1. graphical モードで起動
  2. text モードで起動(default)

という順序になっていたお陰で、エイヤで再起動してみたら、折角デフォルト起動を text モードにしておいた設定も虚しく、最初のエントリを元にした複製=graphical モードで起動。しかも gdm サービスを殺してあるから、何時まで経ってもプログレスバーがスプラッシュ表示されるばかり…。ま、どうせターミナルソフト経由でしかログインしないからいいけどね。

「パッケージの一括更新には "pkg image-update" が良いらしい」と聞いていたので、"beadm create" で複製した方の起動環境で起動してから早速 "pkg image-update" を実施。あれ?「起動環境を複製した」とか言っているぞ?"beadm list" の出力でも確かに複製が出来てる。

$ beadm list
BE            Active Mountpoint Space Policy Created
--            ------ ---------- ----- ------ -------
BE20091023-01 N      /          8.35M static 2009-10-23 23:26 ★ 起動時 BE
BE20091023-2  R      -          5.86G static 2009-10-23 23:58 ★ 複製された BE
opensolaris   -      -          8.60M static 2009-10-20 01:34
$

なんだ、マニュアルにも:

pkg image-update コマンドを実行すると、自動的にブート環境のクローンが作成され、そのクローンがアップグレードされます。

って書いてある。"beadm create" する必要は無かったのね。しっかりマニュアル読めよ > 時分

とりあえず、"pkg image-update" した起動環境でも無事再起動完了。うわ、簡単だ!

"pkg image-update" だと所謂「全更新」になってしまうので:

  • "pkg image-update" ⇒ 起動環境複製+全更新
  • "beadm create"(起動環境複製) + "pkg install"(個別更新)

を適宜使い分けるのが良さそう。

後者の方法でも、複製した起動環境を "beadm mount" で一時マウントしておいて、マウント先を pkg コマンドの -R オプションで指定してやれば、複製後に再起動せずとも、複製した起動環境側に対するパッケージ更新が可能。-R 指定を忘れると意味が無いから、オペレーションには気を使いそうだけどね。