Windows Server 2003が稼働する複数のサーバー・コンピュータで,定期的にパッチを適用しています。基本的にセキュリティ更新プログラム(セキュリティ・パッチ)を適用していますが,障害が発生したサーバーでは,個別の修正プログラム(バグ修正用のパッチ)も適用しています。 先日,このサーバー環境に最新のセキュリティ更新プログラムを適用したとき,不可解な現象を見つけました。新しいセキュリティ更新プログラムによって変更されるファイルのバージョンを,すべてのサーバーでチェックしたところ,以前に個別の修正プログラムを適用したサーバーだけに,違うバージョンのファイルがインストールされていたのです。 個別のバグ修正プログラムの適用後に,同じファイルを置き換えるセキュリティ更新プログラムを適用しているため,最終的にこのファイルのバージョンはセキュリティ更新プログラムを適用したタイミングで,どのコンピュータでも同一となるはずです。なぜ個別の修正プログラムを適用したマシンだけ修正ファイルのバージョンが異なるのでしょうか? その原因や強制的にバージョンをそろえる方法を教えてください。
Windows XP Service Pack 2とWindows Server 2003でパッチのインストール・メカニズムが変更されたことが原因です。新しい仕組みでは,システム環境に応じて,異なるバージョンの修正ファイルをインストールすることがあります。
この表の中で「広範に配布」に分類されたソフトウエア更新プログラムの圧縮を展開すると,1つのパッチの中に同じ名前でバージョンが異なる複数の修正ファイルが存在するようになっています。 背景は,マイクロソフトが,「広範にテストを実施するソフトウエア更新プログラム」と,「広範にテストを実施しない特定環境向けの修正プログラム(いわゆるホットフィックス,QFE)」の開発を分離していることです。 例えば,セキュリティ更新プログラムの適用では通常,コンピュータに広範にテストされたバージョンの修正ファイルがインストールされます。これにより,ユーザーはリスクを最小限に抑えられます。一方,特定ユーザー向けの修正プログラムを適用した環境に,セキュリティ更新プログラムを適用すると,修正プログラムとの共存を考慮したバージョンの修正ファイルがインストールされます。
パッチが異なるバージョンを複数含む EXE形式になっているパッチは通常,それを実行すると,問題を修正したファイルをシステムにインストールするようになっています。パッチのEXEファイルを実行すると,その実行ファイルの中に圧縮されて入っている修正ファイルを,既存のものと置き換えるのです。
・RTMGDRまたはSPxGDRフォルダ まずフォルダ名の中にあるRTMやSPxは,製品のリリース・サイクルにおけるソフトウエア更新プログラムの開発の基準点です。基準点を示すフォルダ名の命名規則には以下の2つがあります。
・RTMを含む名前のフォルダ 次に,フォルダ名の中のGDRとQFEはそれぞれパッチの修正レベルを意味します。以下のように定義されています。
・GDRを含む名前のフォルダ 以上のように個々のパッチの圧縮を展開した際に作成されるフォルダは,上記の種類の基準点と修正レベルに応じて存在します。 例えば,Windows Server 2003のSP1環境および同SPなし環境の両方に適用できるパッチの場合,RTMとSP1の2つの基準点とGDRとQFEの2つの修正レベルをサポートするため,図1に示したように4つのフォルダがあります。 EXE形式のパッチの中には,Update.exeというパッチ適用プログラムの本体も入っています。これはパッチ適用対象のコンピュータにおいて,既にインストールされているファイルのバージョンをチェックし,RTMバージョン/SPバージョンのいずれの基準点のシステムかを調べます。さらにGDRバージョンのパッチを適用しているシステムであれば,RTMGDRまたはSPxGDRフォルダから修正ファイルをインストールします。同様にQFEバージョンのシステムの場合はRTMQFEまたはSPxQFEフォルダから修正ファイルをインストールします。
図2で例示したrdpwd.sysという修正ファイルは,バージョン情報のところに「5.2.3790.2465(srv03_sp1_gdr.050614-1528)」と表示されています。ここから,この修正ファイルがSP1かつGDRバージョンであることが分かります。ちなみに,「srv03」はWindows Server 2003用のファイルであることを示します。
SPでGDR/QFEの区別はリセット 以前に個別の修正プログラムがインストールされたシステムは,修正対象のファイルがQFEバージョンとなっています。そのため,そのファイルがセキュリティ更新プログラムによって更新される場合,QFEバージョンの修正ファイル(パッチの中のQFEフォルダ内のファイル)がインストールされることになります。一方,個別の修正プログラムを適用していないシステムにセキュリティ更新プログラムを適用すると,GDRバージョンの修正ファイル(パッチの中のGDRフォルダ内の修正ファイル)がインストールされます。 このメカニズムにはいくつか注意点もあります。 まず,サービス・パックを適用したタイミングで「GDRバージョンのシステム」,「QFEバージョンのシステム」という区別はなくなり,基準点がSPレベルに統一されます。よって,個別の修正プログラムを適用してQFEバージョンのシステムとして判断されたコンピュータであっても,SP適用後は,GDRバージョンの修正ファイルがインストールされます(図3)。
また,パッチの中のGDRバージョンの修正ファイルをインストールする際,インストーラが,コンピュータの「%windir%\$hf_mig$」フォルダに,QFEバージョンの修正ファイルをコピーするようになっています。 その後インストールするパッチは,このフォルダを使って,システムに導入されているバージョンよりも低い(古い)バージョンを含む修正プログラムやサービス・パックをインストールする際に,なるべく最新の修正ファイルを使おうとします。 具体的にこの動作を説明しましょう。仮に「File.dll」という名前のファイルを更新するセキュリティ更新プログラムと個別の修正プログラムがそれぞれあるとします。初期状態のシステムの「File.dll」はRTMバージョンとしましょう。 そして,セキュリティ更新プログラムをインストールすると,「File.dll」はバージョン5.2.3790.1000にアップグレードされるとします。また,個別の修正プログラムには「File.dll」のバージョン5.2.3790.0000が含まれていると仮定しましょう。 このシステムに,(1)セキュリティ更新プログラムを適用,(2)修正プログラムを適用——という順で作業すると以下のように「File.dll」のバージョンが変化します。
(1)セキュリティ更新プログラムをインストール
(2)個別の修正プログラムをインストール 最後になりますが,パッチなどのソフトウエア更新プログラムをインストールする際に,EXEファイルに「/B」オプションを付けて,インストールするバージョンを強制する方法を説明します。
・RTMQFEフォルダの修正ファイルを強制導入するときの実行例 パッチの構造やメカニズムを,より詳しく知りたい方は,マイクロソフトのサポート技術情報「Windows XP Service Pack 2およびWindows Server 2003ソフトウエア更新プログラムパッケージの内容に関する説明」(文書番号824994)を参照してください。 |
サポートデリバリー本部 エンタープライズソリューション本部
ミッションクリティカルサポート三部 コンサルタント