仕事で運用している Solaris マシンの保守には色々と気を使うことが多い。 特に、パッチの適用についてはそうである。 新しく見つかったセキュリティホールに対応するためのパッチは 適用せざるを得ないとしても、そのほかのパッチは どのように当てれば良いのか。そのような場合の指針となるツールが patchdiag である。
patchdiag を使えば、現在マシンにインストールされているパッチと、 Sun からリリースされているパッチのリビジョンを比べて、 適用するかどうか検討することができる。ただし、patchdiag 自体も、 そこから得られる一部のパッチも、 SunSolve Online のアカウントを持っていないとダウンロードすることができないのが難点である。
patchdiag ツールとクロスリファレンスファイルのダウンロード先については 次章で説明する。
GNU wget は HTTP、FTP を扱うことのできるダウンロードツールである。 HTTP 認証にも対応しているので、patchdiag を使う場合にはあると便利である。
GNU wget 1.8 の tarball を get し、以下の手順でインストールする。
# tar xzf wget-1.8.tar.gz
# cd wget-1.8
# env CFLAGS=-O3 ./configure --with-catgets --with-ssl=/usr/local
# make
# make install
--with-catgets はメッセージを国際化してくれるはずだが、 Solaris ではうまく働いてくれないようだ。 --with-ssl は OpenSSL をインストールしている場合に使う。
まずは SunSolve Online にアクセスし、左上の "Login" ボタンを押して ユーザ名とパスワードを入力してログインしてみる。するとトップページが 変わって、"SunSolve Online Contents" の中の "Patches" の中に "PatchDiag Tool" が現れる。ここをクリックすると PatchDiag の情報ページ (日本語) である。この中で tarball へのリンク を GET しておく。
wget で GET する場合は、
# wget --http-user=hogehoge --http-passwd=fugafuga http://sunsolve.sun.co.jp/diag/patchdiag/patchdiag_1.0.4.tar.Z
とする。
次に、tarball を展開して、
# gzip -cd patchdiag_1.0.4.tar.Z | tar xvf - # cd patchdiag-1.0.4
出来たディレクトリの中に移動し、ここに現在のパッチ情報が載っている クロスリファレンスファイルを get する。 wget で
# wget --http-user=hogehoge --http-passwd=fugafuga http://sunsolve.sun.co.jp/private-cgi/patches/patchdiag.xref
とすると楽である。
最後に、セットアップスクリプト (patchdiag_setup) を実行して インストール終了である。
# ./patchdiag_setup
PatchDiag Tool Setup script
Please enter the directory location of the cross reference file (patchdiag.xref):
Ex: if the patchdiag.xref file is in the directory /patchdiag/etc, then
type "/patchdiag/etc".
/opt/patchdiag-1.0.4 ← patchdiag.xref ファイルのある場所
(この場合は現在のディレクトリ) を指定する
Creating the patchdiag script now...
Done
インストールが終ったら、さっそく patchdiag を実行してみる。
# ./patchdiag > patchdiag.log
実行結果は標準出力に流れるので、後で解析するためにファイルへ リダイレクトしておく。
結果のファイルを見てみると、以下のようになっている。
====================================================================================== System Name: mew SunOS Vers: 5.8 Arch: i386 Cross Reference File Date: Dec/06/01 PatchDiag Version: 1.0.4 ====================================================================================== Report Note: Recommended patches are considered the most important and highly recommended patches that avoid the most critical system, user, or security related bugs which have been reported and fixed to date. A patch not listed on the recommended list does not imply that it should not be used if needed. Some patches listed in this report may have certain platform specific or application specific dependencies and thus may not be applicable to your system. It is important to carefully review the README file of each patch to fully determine the applicability of any patch with your system. ====================================================================================== INSTALLED PATCHES Patch Installed Latest Synopsis ID Revision Revision ------ --------- -------- ------------------------------------------------------------ 108529 11 12 SunOS 5.8_x86: kernel update patch 108624 02 CURRENT SunOS 5.8_x86: Thai Wordbreak Iterator module 108653 34 CURRENT X11 6.4.1_x86: Xsun patch 108715 05 CURRENT CDE 1.4_x86: libDtWidget patch 108724 01 CURRENT SunOS 5.8_x86: /kernel/fs/lofs patch 108726 06 CURRENT SunOS 5.8_x86: st driver patch (略) 111990 01 CURRENT SunOS 5.8_x86: usr/bin/egrep patch 112040 01 CURRENT SunOS 5.8_x86: usr/bin/ckitem patch ====================================================================================== UNINSTALLED RECOMMENDED PATCHES Patch Ins Lat Age Require Incomp Synopsis ID Rev Rev ID ID ------ --- --- --- --------- --------- ----------------------------------------- 109222 N/A 06 316 108994-01 Obsoleted by: 109319-13 SunOS 5.8_x86: Patch for sysidnet 112139 N/A 01 33 SunOS 5.8_x86:: usr/bin/domainname patch 112219 N/A 01 25 SunOS 5.8_x86:: pam_ldap.so.1 patch ====================================================================================== UNINSTALLED SECURITY PATCHES NOTE: This list includes the Security patches that are also Recommended Patch Ins Lat Age Require Incomp Synopsis ID Rev Rev ID ID ------ --- --- --- --------- --------- ----------------------------------------- 112219 N/A 01 25 SunOS 5.8_x86:: pam_ldap.so.1 patch ====================================================================================== UNINSTALLED Y2K PATCHES NOTE: This list includes the Y2K patches that are also Recommended Patch Ins Lat Age Require Incomp Synopsis ID Rev Rev ID ID ------ --- --- --- --------- --------- ----------------------------------------- All Y2K patches installed! ======================================================================================
Latest Revision の列に CURRENT とマークされた行は、 インストールされているパッチと現在リリースされている最新リビジョンが 同じであることを示している。この列にリビジョンナンバーが書かれている行は より新しいパッチがリリースされていることを表す。
CURRENT の行は無視して構わないので、以下のようにして省略して 表示させると良い。
# grep -v CURRENT patchdiag.log | less
次に、より新しいリビジョンがリリースされている行の Synopsis (説明) を読んで、適用すべきパッチかどうか考える。そのパッチについての 詳しい説明を読むには、PatchFinder でパッチ ID をキーに検索すると良い。
検討の結果、パッチを適用することに決定したら、その ID、リビジョンの パッチを取得する。
# wget --http-user=hogehoge --http-passwd=fugafuga http://sunsolve.sun.co.jp/private-cgi/patches/108529-12.zip
取得できたら、アーカイブを展開して適用する。
# unzip 108529-12.zip # patchadd 108529-12
必要であれば、この後システムをリブートする。 リブートが必要かどうかの判断が難しいが、カーネルパッチ、ドライバパッチ の類であれば確実にリブートが必要である。
# shutdown -g0 -i6 -y