[SCCM 2007] パッケージのダウンロードが出来ない場合のチェックリスト

こんにちは、System Center サポート部の石井です。

今回は、SCCM 2007 にて、ソフトウェアの配布やソフトウェアの更新を行っている場合に、クライアント側でパッケージのダウンロードが行えない場合のトラブルシュート方法をご紹介します。

パターン A. パッケージのダウンロード自体がまったく開始されない場合
================================================================

特定のクライアントにおいて、パッケージのダウンロードが全くできない状態にあるようでしたら、以下のような点をチェックしてください。

A-1. 該当のクライアントの、SCCM における基本的な機能の確認を行う。
--------------------------------------------------------------------------

パッケージのダウンロードを行うにあたっては、SCCM のクライアントとして、正常に動作している必要があります。
例えば、以下のような点をご確認ください。

- [SCCM 管理コンソール] の [コレクション] より、該当のマシンの [リソース エクスプローラ] を見て、インベントリがちゃんとあがっているか確認する。(ハードウェアの履歴)
- 問題のクライアントにおいて、[コントロール パネル] - [プログラム ウィザード] に配布対象のプログラムが表示されるか確認する。
- 問題のクライアントにおいて、[コントロール パネル] - [Configuration Manager] を開き、[動作] タブに表示される項目数を確認し、正常クライアントの同じ画面との差異を確認する。(数が少ない場合、SCCM クライアントとして正常稼働していません。)

上記の動作に問題が見られるようでしたら、まずは下記の SCCM クライアントの再インストールによる復旧をお試しください。

[SCCM 2007] クライアントが正常動作しない場合の対処方法
https://blogs.technet.com/b/systemcenterjp/archive/2012/07/20/3509911.aspx

A-2. サイト境界の設定がされているか。他サイトとのサイト境界の重複が無いか確認する。
--------------------------------------------------------------------------

SCCM  におけるサイト境界は、"クライアント自身の所属サイトの発見" や、"クライアントがアクセス可能な配布ポイントの発見" において必要となります。前者のサイト自体は、SCCM クライアントのインストール時のサイト コードの設定で指定することが出来、インベントリ機能も行えるのですが、サイト境界設定を行っていない場合には、パッケージのダウンロードが可能な配布ポイントが見つからない、という問題が生じます。

クライアントが配布ポイントを見つけるにあたっては、サイト境界に属している必要があります。(サイト境界外でも、提供情報ごとにダウンロードを可能とする、という例外的な設定はありますが。)
まずは、SCCM 管理者コンソールの、[サイト設定] - [境界] より、クライアントの IP アドレスに該当するサイト境界を作成し、ダウンロードが出来るようになるかお試し下さい。

また、サイト境界の重複は、非常にお問い合わせの件数が多く、ヒューマン エラーも発生しやすい箇所でもありますので、ご注意下さい。

同じドメインやフォレスト、あるいはネットワーク環境内に他の SCCM サイト、あるいは旧 SMS 2003 のサイトがあるようでしたら、他の SCCM サイトと、サイト境界が重複設定されないようご注意ください。
配布を行いたいサイトにおける、サイト境界に設定されている IP アドレスが、他の SCCM サイトでも重複して登録されていると、うまく配布が機能しません。重複設定されている他サイトの境界設定を削除して下さい。
このように、他サイトとのサイト境界の重複は、SCCM において予期動作を招く、サポートされない構成となりますので、ご注意ください。

注意事項 1: かつて、SCCM サイトや SMS 2003 の旧サイトが存在していた、といった場合で、旧サイトの削除を行う前にサイト境界を削除しなかったような場合、AD上にサイト境界情報のごみが残存する可能性があります。AD 上から、サイト境界情報のごみを取り除く必要がある場合がありますが、DC 上での作業が必要です。かつて旧サイトを使用していた場合に、心当たりがあるようでしたら、サポート窓口までご連絡ください。

注意事項 2: SCCM のサイト境界は、IP サブネットや、AD サイトを使用することが可能です。ただし、ご注意いただきたいのが、SCCM ではあくまでサブネットのみが登録でき、スーパーネットの使用は出来ない点です。

例えば、10.10.X.* (255.255.255.0) と 10.10.Y.* (255.255.255.0) というサブネット 2 つがある環境で、SCCM のサイト境界に登録すべきなのは、"10.10.X.0" と "10.10.Y.0" の 2 つのサブネットです。
このような、X や Y  がたくさんありすぎるから、といって、"10.0.0.0" や "10.10.0.0" というものを作成しても、これはスーパーネットと呼ばれる設定であり機能しません。
理由は、SCCM における "10.10.0.0" というサブネットは、サブネット マスク 255.255.0.0 を示すからです。
実際のクライアントは、10.10.X.0 (255.255.255.0) ですので、IP サブネットに属さない = サイト境界外とみなされてしまい、ダウンロードが許されません。
(※ 実際に、"10.0.0.0"(255.0.0.0) というサブネットが存在する環境であれば問題ありません。)

SCCM のサイト境界として、AD サイトを登録することはできますが、AD サイト側でスーパーネットのみ登録しているようでしたら、これも SCCM としては使えません。
ご面倒ですが、SCCM 側では AD サイトの境界を使用せずに、各サブネットを全て個別に登録して下さい。
(Windows における、Active Directory のサイトとしては、スーパーネットの使用はサポートされますが、それを SCCM のサイト境界としては使えない、という事です。)

尚、上記のような IP サブネットや AD サイトのサイト境界における、スーパーネットの落とし穴については、"IP アドレスの範囲" という SCCM サイト境界を使えば問題とならないようです。メンテナンスのしやすさ、という意味でも "IP アドレスの範囲" の使用をお勧めします。

参考情報: スーパーネットに絡んだ設定については、英語のみですが、下記技術情報に詳細が記載されています。
Known Issue: Supernets in Active Directory Sites Used as Site Boundaries
https://blogs.technet.com/b/configmgrteam/archive/2009/12/21/known-issue-supernets-in-active-directory-sites-used-as-site-boundaries.aspx
A-3. パッケージの更新を行ってみる
--------------------------------------------------------------------------

ソース フォルダーのパッケージのデータと、配布ポイントのパッケージのデータに、バージョンの不一致があると、クライアントからはダウンロード対象とみなされない場合があります。
[SCCM 管理コンソール] より、該当のパッケージ名配下の配布ポイントを選択し、配布ポイントを右クリックし、[配布ポイントを最新の情報に更新] とすることで、ソースフォルダと配布ポイントのフォルダの情報を同期できますので、こちらをお試しください。

ソフトウェアの更新プログラム配布の場合も同様です。展開パッケージ配下の配布ポイントで同様の作業を行います。
また、ソフトウェアの更新プログラムに関しては、展開パッケージを新しく作成し、うまくダウンロードされない更新プログラムを再ダウンロードしてみるという事も有効です。

ソフトウェアの更新プログラムの展開パッケージは、1 つのものを、複数の更新プログラムで流用でき、場合によっては何年分の更新も流用する、という運用が可能です。
しかしながら、その過程で内部情報の破損や不一致が出た場合、無数の更新プログラムのインストーラーのうち、どれが問題であるか?となった場合のトラブルシュートが難しいものとなります。
(SCCM クライアントから見ているのは、展開パッケージの大枠であり、そのパッケージの中の、どのインストーラーに問題がおきたのか、というのはわからないからです。)
また、展開パッケージが何らかの理由で完全に破損した時の再構築にあたって、数年分の更新プログラムのインストーラーを再ダウンロードし、配布ポイントに全てコピーするとなると数日程度を要する場合もあります。

ベスト プラクティスとしては、3 ヶ月おき、半年おき、程度に展開パッケージを分けて作成いただくことが良いものと考えられます。
問題があったときも、少数の更新プログラムに関してのみ、展開パッケージを再作成すればよいので、迅速に対応可能です。

 

A-4. (ソフトウェアの更新に限定して) 日本語版だけでなく、英語版のダウンロードも行う
--------------------------------------------------------------------------

非常に稀なケースではありますが、MSXML 関連の更新プログラムにおいては、クライアントが英語版のセキュリティ更新プログラムを必要とする場合が報告されています。
日本語版のみのセキュリティ更新プログラムのダウンロード・展開を行っている環境で、特定の MSXML 関連の更新プログラムの展開に失敗するようでしたら、この問題の可能性があります。
特定の更新プログラムのダウンロードに失敗する問題の場合には、ソフトウェアの更新プログラムのダウンロードの際に、日本語だけでなく英語版もダウンロードし、配布ポイントにコピーしてください。

 

パターン B. ダウンロードは始まるが、数 % で停止してしまう、という事象となった場合
================================================================

パッケージのダウンロード自体は開始しているが、数 % の進捗度で停止してしまう場合、多く見られるのが、下記 2 パターンです。

B-1. パッケージ内に、IIS からアクセス排除されるフォルダ名が存在する
--------------------------------------------------------------------------

SCCM の配布に用いられる、ウェブサーバー (IIS) においては、脆弱性対策として特定の名前のフォルダへのユーザーからのアクセスをブロックします。

詳細: URL 内に /bin のあるすべての要求が拒否され 404 エラーが返される
https://technet.microsoft.com/ja-jp/library/cc757697(v=ws.10).aspx

パッケージ内に、"bin" という名前のフォルダがある場合が最も多いパターンです。パッケージにそういったフォルダ名があるかチェックして下さい。(IIS 7.X の場合、さらに複数の除外対象フォルダもありますので、後述手順をチェックしてください。)
bin というフォルダ名をソース フォルダ上にて変更してしまうという対処も可能ですが、アプリケーションのインストーラー等ですとフォルダ名変更ができない場合もあります。
そのような場合、下記手順で、各配布ポイントのサーバーからアクセス排除設定を解除します。

設定にあたっては、IIS サービスの再起動が必要です。ほかにも、同一の配布ポイントからパッケージをダウンロード中のクライアントから、一時的に接続できない状態となりますので、あらかじめご了承ください。
(BITS の特性上、一時的にダウンロードに失敗しても、次回接続時に継続ダウンロードができますので、大きな問題とはなりません。)

■IIS 7.x にてbinフォルダへのアクセス制限を解除する方法

以下の手順にて、配布ポイントとして利用されるサーバーの IIS の 設定を変更し、"bin" フォルダに対するアクセスの制限を解除します。

1. 配布ポイントのサーバーに管理者権限を持つユーザーでログインし、以下のファイルを確認します。

 %windir%\System32\inetsrv\config\applicationHost.config

2. "applicationHost.config"をコピーし、ファイル名を変更し、バックアップファイルを作成します。
※ "applicationHost.config" のファイルを編集するため、間違って編集した場合に、バックアップ ファイルから元の状態に戻すことが可能になります。

3. ApplicationHost.config ファイルをテキストエディタで開き、 "hiddenSegments"の XML 要素を見つけます。
---------------------------------------------------------------
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />
<add segment="App_code" />
<add segment="App_GlobalResources" />
<add segment="App_LocalResources" />
<add segment="App_WebReferences" />
<add segment="App_Data" />
<add segment="App_Browsers" />
</hiddenSegments>
---------------------------------------------------------------

4. 上述の"hiddenSegments"の XML の要素から、以下の行を削除します。

<add segment="bin" />

5. "applicationHost.config" ファイルを上書き保存して、設定を適用します。

6.「インターネット インフォメーション サービス (IIS)マネージャ」を開き、左ペインの「接続」にて、以下の順に展開します。

 スタートページ
  └サーバー名

7. サービスの再起動をするため、「サーバー名」を右クリックし、「停止」をクリックします。数分後に、「開始」をクリックします。

8. 現象が発生しているクライアントにて、パッケージのダウンロードを再度実行し、現象が回避されるかをご確認ください。

■IIS 6.0にてbinフォルダへのアクセス制限を解除する方法

Windows2003 Serverで構成されるIIS 6.0環境におきましても、ASP.NET をインストールしている環境では、同様の bin フォルダへの制限があります。
下記技術情報に従って、設定をします。設定後は、コマンド プロンプトにて iisreset と入力して、IIS サービスを再起動してください。

参考: URL 内に /bin のあるすべての要求が拒否され 404 エラーが返される
https://technet.microsoft.com/ja-jp/library/cc757697(v=ws.10).aspx
B-2. パッケージ内に、IIS からアクセス排除される拡張子が存在する
--------------------------------------------------------------------------

B-1 のパターンに加えて、ファイル名や拡張子によってはパッケージのダウンロードにて、IIS にアクセスする際に排除されてしまうという事が発生します。(このようなフィルター機能は、IIS 7.0 以降のバージョンに見られます。つまり、配布ポイントが Windows Server 2008 以降かどうかも重要です。)

- 特定の拡張子 (.mdb や .config 等) が存在する
- "+" など、"ダブル エスケープ" 文字を含む文字が含まれる

このような IIS のセキュリティ規制を緩和するには、配布ポイントの IIS の要求のフィルタリング設定を編集します。
手順は、下記技術情報をご参考下さい。

技術情報: 要求のフィルタリング <requestFiltering>
https://technet.microsoft.com/ja-jp/library/ee431637.aspx

※ 設定後は、IIS のサービス起動が必要です。

- 補足: 要求のフィルタリングを applicationHost.config ファイルから行う方法

上記の要求のフィルタリング <requestFiltering> の技術情報のような  UI からの変更ではなく、applicationHost.config という設定ファイルを直接編集することでも設定は可能です。

applicationHost.config ファイルを直接編集する場合のポイントは以下です。

・404.7 「ファイル拡張子が拒否されました。」
-> <fileExtension> XML 要素の allowd プロパティを true にする。

・404.8 「名前空間が非表示にされています。」
-> <hiddenSegments> XML 要素配下の <add segment="<任意の値>"> を削除する。

・404.11「URL にダブル エスケープが指定されています。」
-> <requestFiltering> を <requestFiltering allowDoubleEscaping="true"> に変更する。

参考情報: Windows Server 2008 をサイト システムとして構成する方法
https://technet.microsoft.com/ja-jp/library/cc431377.aspx
-> "配布ポイントの requestFiltering セクションの構成" の項を参照

B-3. パッケージのファイルが、インターネットからダウンロードしてきたファイルである (代替データ ストリームが存在する)
--------------------------------------------------------------------------
パッケージのファイルに、代替データ ストリームという、目に見えない情報が付与されている場合にも、パッケージのダウンロードに失敗します。
この場合、典型的な状況としては、99 % までダウンロードが進むが、その後ファイルがキャッシュ フォルダから消えてしまうという状況となります。

代替データ ストリームという情報が予期せず付与される状況としては、インターネットの信頼されていないサイトからのダウンロードを行ったファイルである場合が挙げられます。
あらかじめ、ソフトウェアの展開を行うときには、このような代替データ ストリーム情報を削除しておくことが有効です。

1. 以下弊社ウェブサイトより、Streams.exe ツールをダウンロードします。

Streams
https://technet.microsoft.com/ja-jp/sysinternals/bb897440

2. コマンド プロンプトを管理者権限で開き、Streams.exe ツールを配置した箇所に移動し、以下コマンドを実行して下さい。

streams.exe - s -d "<ソース フォルダの場所>"

※ ソース フォルダの場所は、パッケージのソースとなるフォルダを指定します。当パスは、ダブル コーテーション マーク "" で囲って下さい。

上記にて、ソース フォルダ上のファイルの代替データ ストリームを削除出来ます。

3. 上記ソース ファイルを用いて、パッケージと提供情報を作成し、事象が改善するかお試しください。

※ 代替データ ストリームが原因で発生するダウンロード失敗の事象は、パッケージのダウンロードを、ローカル管理者権限を持たないユーザーにて開始した場合に多く報告されます。
ダウンロードができず、かつ、ローカル管理者権限が無いユーザーにて見られる事象の場合、この状況をまずは疑うと良いでしょう。

パターン C. ダウンロードは開始するが、ダウンロード後に消えてしまうか、実行が始まらない。
================================================================

パッケージのダウンロードは開始出来、問題無く 100% までダウンロード出来るが、その後に実行が始まらなかったり、すぐにファイルがキャッシュから消えてしまうようでしたら、下記を疑います。
C-1. パッケージのソース フォルダにダブルバイト文字のファイル・フォルダ名が存在する
--------------------------------------------------------------------------

パッケージのソースに、ダブルバイト文字は使用しないよう、お願いします。つまり、全て半角英数のファイル・フォルダ名である必要があります。
ダブルバイト文字を使用した場合、ダウンロードされたファイルが、ハッシュのミスマッチのエラーにて、削除される可能性があります。

技術情報: サポート対象のローカライズされた言語
https://technet.microsoft.com/ja-jp/library/bb632951.aspx
"DBCS 文字は、パッケージ名やファイル名ではサポートされません。"
C-2. セキュリティ ソフトウェアによるアクセス ブロックが発生する
--------------------------------------------------------------------------

パッケージのファイルによっては、セキュリティ ソフトによりダウンロードや実行が妨げられるケースが稀に存在します。
クライアント上のセキュリティ ソフトのリアルタイム保護を停止したり、試しにアンインストールし、事象が改善するかお試し下さい。
C-3. Hash mismatch エラーにより、ダウンロードされたファイルが消去される
--------------------------------------------------------------------------

IIS 7.5 の以下の問題により Hash mismatch が起きたと言う報告があります。

Windows 7 の実行、IIS 7. 5 サーバーまたは Windows Server 2008 R2 のファイルをダウンロードしません
https://support.microsoft.com/kb/981898

配布ポイントに更新プログラムを適用し、再度お試し下さい。

加えて、事例上、ソースディレクトリに隠しファイル「Thumbs.db」があるとHash mismatch になることがあるようです。

最後に、配布ポイント上のファイルを直接編集、削除、あるいはディスク エラー等によるファイル破損が生じた場合も Hash mismatch エラーとなります。
このような場合のトラブルシュートとして、配布ポイントをパッケージから一度削除し、再登録することで、パッケージのソース ファイルを再度 配布ポイントにコピーします。