Q

Windows Server 2003が稼働する複数のサーバー・コンピュータで,定期的にパッチを適用しています。基本的にセキュリティ更新プログラム(セキュリティ・パッチ)を適用していますが,障害が発生したサーバーでは,個別の修正プログラム(バグ修正用のパッチ)も適用しています。

 先日,このサーバー環境に最新のセキュリティ更新プログラムを適用したとき,不可解な現象を見つけました。新しいセキュリティ更新プログラムによって変更されるファイルのバージョンを,すべてのサーバーでチェックしたところ,以前に個別の修正プログラムを適用したサーバーだけに,違うバージョンのファイルがインストールされていたのです。

 個別のバグ修正プログラムの適用後に,同じファイルを置き換えるセキュリティ更新プログラムを適用しているため,最終的にこのファイルのバージョンはセキュリティ更新プログラムを適用したタイミングで,どのコンピュータでも同一となるはずです。なぜ個別の修正プログラムを適用したマシンだけ修正ファイルのバージョンが異なるのでしょうか? その原因や強制的にバージョンをそろえる方法を教えてください。

A

Windows XP Service Pack 2とWindows Server 2003でパッチのインストール・メカニズムが変更されたことが原因です。新しい仕組みでは,システム環境に応じて,異なるバージョンの修正ファイルをインストールすることがあります。


△ 図をクリックすると拡大されます
表1●パッチなどソフトウエア更新に用いられるプログラムの名称の例
 マイクロソフトは,パッチなどソフトウエア更新プログラムと総称するものを表1のように定義しています。

 この表の中で「広範に配布」に分類されたソフトウエア更新プログラムの圧縮を展開すると,1つのパッチの中に同じ名前でバージョンが異なる複数の修正ファイルが存在するようになっています。

 背景は,マイクロソフトが,「広範にテストを実施するソフトウエア更新プログラム」と,「広範にテストを実施しない特定環境向けの修正プログラム(いわゆるホットフィックス,QFE)」の開発を分離していることです。

 例えば,セキュリティ更新プログラムの適用では通常,コンピュータに広範にテストされたバージョンの修正ファイルがインストールされます。これにより,ユーザーはリスクを最小限に抑えられます。一方,特定ユーザー向けの修正プログラムを適用した環境に,セキュリティ更新プログラムを適用すると,修正プログラムとの共存を考慮したバージョンの修正ファイルがインストールされます。

パッチが異なるバージョンを複数含む
 Windows Server 2003のパッチを例にさらに詳しく解説しましょう。

 EXE形式になっているパッチは通常,それを実行すると,問題を修正したファイルをシステムにインストールするようになっています。パッチのEXEファイルを実行すると,その実行ファイルの中に圧縮されて入っている修正ファイルを,既存のものと置き換えるのです。


△ 図をクリックすると拡大されます
図1●Windows Server 2003のパッチを展開すると現れるフォルダ
 インストールする修正ファイルは,パッチのEXEファイルを「/x」オプション付きで実行すると見ることができます。  そうしてWindows Server 2003のパッチを展開すると一般に以下のような名前のフォルダが現れます(図1)。各フォルダには同じ名前でバージョンが異なる修正ファイルが入っています。

・RTMGDRまたはSPxGDRフォルダ
 GDR版の修正ファイルが格納されており,広範囲にテストが実施されています。GDRはGeneral Distribution Release(一般に配布するリリース)の略です。
・RTMQFEまたはSPxQFEフォルダ
 QFE版の修正ファイルが格納されており,広範囲にテストは実施されていません。QFEは,Quick Fix Engineering(緊急修正技術)の略です。
 これらのフォルダ名は次に示すルールで付けられています。

 まずフォルダ名の中にあるRTMやSPxは,製品のリリース・サイクルにおけるソフトウエア更新プログラムの開発の基準点です。基準点を示すフォルダ名の命名規則には以下の2つがあります。

・RTMを含む名前のフォルダ
 製品の初期リリースを対象にした修正ファイルが入っていることを示します。RTMはRelease to Manufacturing(製造工程向けリリース)の略です。
・SPxを含む名前のフォルダ
 サービス・パック(SP)適用済みシステムを対象にした修正ファイルが入っていることを示します。SP1などのようにxには数字が入ります。

 次に,フォルダ名の中のGDRとQFEはそれぞれパッチの修正レベルを意味します。以下のように定義されています。

・GDRを含む名前のフォルダ
 GDRに分類される広範囲にテストされた修正ファイルのみを含んでいます。
・QFEを含む名前のフォルダ
 GDRに分類される修正ファイルとQFEレベルの累積的な修正ファイルの両方を含んでいます。

 以上のように個々のパッチの圧縮を展開した際に作成されるフォルダは,上記の種類の基準点と修正レベルに応じて存在します。

 例えば,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●修正ファイルのバージョン定義
 修正ファイルのバージョン情報は図2のルールで定義されています。ファイルのプロパティを表示させて[バージョン情報]タブの[詳細]欄において[ファイルバージョン]という項目を選択するなどでこれを確認できます。

 図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)。


△ 図をクリックすると拡大されます
図3●サービス・パック(SP)を適用したタイミングでGDR/QFE各バージョンの区別はなくなる

 また,パッチの中の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)セキュリティ更新プログラムをインストール
 File.dll(GDRバージョン 5.2.3790.1000)がシステムにインストールされ,同時にFile.dll(QFEバージョン 5.2.3790.1000)が「%windir%\$hf_mig$」にコピーされます。

(2)個別の修正プログラムをインストール
 File.dll(QFEバージョン 5.2.3790.0000)はシステムにインストールされず,「%windir%\$hf_mig$」からFile.dll(QFEバージョン 5.2.3790.1000)がシステムにコピーされます。

 最後になりますが,パッチなどのソフトウエア更新プログラムをインストールする際に,EXEファイルに「/B」オプションを付けて,インストールするバージョンを強制する方法を説明します。

・RTMQFEフォルダの修正ファイルを強制導入するときの実行例
 WindowsServer2003-KBxxxxxx-x86-jpn.exe /B:RTMQFE
・SPxQFEフォルダの修正ファイルを強制導入するときの実行例
 WindowsServer2003-KBxxxxxx-x86-jpn.exe /B:SPxQFE

 パッチの構造やメカニズムを,より詳しく知りたい方は,マイクロソフトのサポート技術情報「Windows XP Service Pack 2およびWindows Server 2003ソフトウエア更新プログラムパッケージの内容に関する説明」(文書番号824994)を参照してください。


日本ヒューレット・パッカード テクノロジーサービス統括本部
サポートデリバリー本部 エンタープライズソリューション本部
ミッションクリティカルサポート三部 コンサルタント