2007年 5月 16日 水曜日
Messages in cipher reflected in the looking glass
(JA) Diskless Solaris (x86編) その3:パッチを当てる
ということで、第3回。色々やることがあるものです。
インストールのみで終わってしまってはあまり意味がありません。
ということで、今回はパッチを当ててみました。ということでその解説です。
「わざわざ項目を作っている理由は?」と小一時間問い詰められるのは勘弁ということで。^-^;
パッチの当て方もマニュアルに記載されているのでその通りやってみました。
ディスクレスクライアントにパッチを当てるためには smosservice を用います。
手順は2段階です。
まず、パッチを smosservice に登録(スプールに追加)します。
smosservice の patch オプションを利用します。 -a で
適用するパッチ(のディレクトリ)を指定します。
ここでは実験台として in.telnetd のパッチを当てることにします。
このパッチは必ず当てましょう。
# /usr/sadm/bin/smosservice patch -- -a /tmp/120069-03
これだけなんですが、エラー(EXM_RMIERROR)を発生して、 管理をしているサービスが落ちることがあります。 そんな時は下記を実行して、再起動できます。
# svcadm restart wbem
パッチのスプールへの追加が成功すると、
/export/diskless/Patches にパッチが保存されます。
# ls /export/diskless/Patches 120069-03 Archive
Archive はディスクレスクライアントのOSイメージに対して
パッチが適用された後のパッチを保存される領域です。
パッチがちゃんとスプールされているかは下記のコマンドで確認します。
(結果は該当部分のみ抽出しています。)
# /usr/sadm/bin/smosservice patch -- -P Patches In Spool Area Os Rel Arch Patch Id Synopsis -------------------------------------------------------------------------------- 10 i386 120069-03 SunOS 5.10_x86: in.telnetd patch 86 i386 120069-03 SunOS 5.10_x86: in.telnetd patch
ちゃんと登録されています。SPARC版のパッチは一行なんですが、
x86版のパッチは2行表示になるようです。
(おそらく OS Rel の部分が2行になってしまっているため)
次にパッチを全体に配布します。
# /usr/sadm/bin/smosservice patch -- -m -U
これでパッチの適用は終了です。
パッチが当たったか確認します。
# /usr/sadm/bin/smosservice patch -- -P Os Rel Arch Patch Id Synopsis -------------------------------------------------------------------------------- 10 i386 120069-03 SunOS 5.10_x86: in.telnetd patch 86 i386 120069-03 SunOS 5.10_x86: in.telnetd patch
はて?
どうもパッチが適用されていない感じです。
調べて見たところ、うまくパッチが当たっていなかったです。
ということで、私が利用した実験環境ではうまくいきませんでした。
とそのまま放っておいてしまったら in.telnetd バグがそのまま残ってしまいます。
こいつに関してはどうしても当てておきたいっ! ということで頑張ってみます。
通常、Solaris でパッチを当てる場合、patchadd コマンドを利用します。
この patchadd コマンドを見てみると pkgadd と同様に -R オプションが存在することがわかります。
ということで、patchadd -R を用いれば、パッチを当てることができそうです。
# patchadd
Patch or "-M patchdir" must be specified.
Usage:
patchadd [-G] [-t] [-d] [-u] [-n] [-B backout_dir]
[-k keystore] [-P passwd] [-x proxy] [target] source
patchadd -p [target]
patchadd -Z
[target] specifies destination system to apply or query patches,
and can be one of:
[-C net_install_image] - apply/query patch on mini root
[-R client_root_path] - apply/query patch on bootable
client root
patchadd の man を調べてみたのですが、pkgadd とは違い独自に作成した admin ファイル(パッケージ情報の管理ファイル)を用いることは出来ないようです。
ディスクレスクライアント環境では /export/Solaris_10 以下に
/usr が作成されていますが、 /export/Solaris_10/var, /export/Solaris_10/usr_i386.all/usr というように
通常とはディレクトリ構造が異なります。
そのため、下記のようにシンボリックリンクを作成し、
ディレクトリ構造を通常と同じようにしておきます。
# cd /export/Solaris_10 # ln -s ./usr_i386.all/usr usr
この状態で、
# patchadd -R /export/Solaris_10 120069-03
のようにパッチを当てます。
# patchadd -R /export/Solaris_10 /root/120069-03 Validating patches... Loading patches installed on the system... Done! Loading patches requested to install. Done! Checking patches that you specified for installation. Done! Approved patches will be installed in this order: 120069-03 Checking installed patches... Verifying sufficient filesystem capacity (dry run method)... Installing patch packages... Patch 120069-03 has been successfully installed. See /export/Solaris_10/var/sadm/patch/120069-03/log for details Patch packages installed: SUNWtnetd
これでパッチが当たりました。
ディスクレスクライアントでは / (root) と /usr でパッチ管理情報が
異なるディレクトリに保存されています。
そのため、ディスクレスクライアント側で
/usr にパッチが当たっているかどうかは確認できません。
サーバで以下のようにすることで確認できます。
# patchadd -p -R /export/Solaris_10 | grep 120069 Patch: 120069-01 Obsoletes: Requires: Incompatibles: Packages: SUNWtnetd Patch: 120069-03 Obsoletes: Requires: Incompatibles: Packages: SUNWtnetd
ここでは、/usr にパッチを当てましたが、
/ (root) にパッチを当てる場合も同様に行います。
ただし、既にディスクレスクライアントが作成済みの場合は、
全てのクライアントに対してパッチを当てる必要があります。
# patchadd -R /export/root/cloneSolaris_10/i86pc/ ( クローン領域(ディスクレス作成の際のベース) ) # patchadd -R /export/root/w1100z ( w1100z用の root領域 )
一応、これでパッチは当てることが出来ましたが、問題となるのが次のケース。
- パッチが他の複数のパッチに依存していて、 それが / (root) に適用するパッチ、/usr に適用するパッチの 両方を含む場合
- パッチに / (root) と /usr の両方が含まれている場合
これに対応するためにはもっと徹底したカスタマイズが必要になります。
と多少中途半端に課題を残してしまいましたが、パッチの当て方は以上で終了。
Posted at 05:18午後 5 16, 2007 by Yasuhiro Fujitsuki in Linux & Solaris |