LoginSignup
4
3

More than 5 years have passed since last update.

WindowsコンテナにWSUSをインストールしてみる(失敗)

Last updated at Posted at 2017-04-23

やりたいこと

WSUS(Windows Server Update Service)は長期間運用しているとDBやコンテンツファイルがすぐ肥大化するため、割りと頻繁(年1~2回くらい)に再構築をしている。

Windows Server 2016からDockerコンテナが使えるようになったため、WSUSをこのコンテナ上に構築することができれば、再構築も楽チンになるのではないかと思い、コンテナ作成の練習も兼ねてやってみることにした。

結論から言うとうまくいかず途中で断念してしまったのだが、再挑戦するときのためにも手順を書き留めておく。

コンテナ実行環境の準備

OSはWindows Server 2016 Datacenterの評価版を使う。
適当に転がっていたPCにインストールしてWindows Updateをかけておく。

OSがインストールできたら、MSのドキュメントに従ってDocker実行環境をセットアップする。
Powershellを管理者権限で起動し、コマンドを3つ実行するだけなので簡単だ。

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force

docker versionを実行してバージョンが表示されればOK
dcoker_version.PNG

コンテナの作成

WSUSを構築するためのコンテナを用意する。
Windows Serverで使えるコンテナベースイメージは「Windows Server Core」ベースと「Nano Server」ベースの2種類がある。
詳細は省くが、WSUSの場合は内部でIISを使うため前者でないとダメだと思う。

Windows Server Coreのベースイメージをダウンロードする。
10GBくらいあるので時間がかかる。

docker pull microsoft/windowsservercore

ダウンロードが済んだらこのベースイメージからWSUSを構築するコンテナを立ち上げる。

docker run --name wsus_test -v D:\WSUS:C:\WSUS -it microsoft/windowsservercore powershell

実行するとコンテナが立ち上がり、コンテナ内のPowershellに入れる。
なお、ここでは-v D:\WSUS:C:\WSUSを指定することでホストOSのD:\WSUSフォルダをコンテナ内のC:\WSUSにマッピングしている。こうすることでWSUSの配信ファイルをコンテナ内に直接保存せずに済むはずだ。
D:\WSUSフォルダは事前に作成しておくこと)

hostnameを実行するとホストOSとは異なるホスト名が表示され、コンテナ内に入っていることが確認できる。
コンソールの背景色がおかしくなるのはご愛嬌。
hostname.PNG

WSUSの役割インストール

いよいよコンテナにWSUSをインストールしていく。
手順はTechNetの記事を参考に。
記事内ではSQLサーバを使う方法も説明されているが、今回は内蔵のWindows Internal Database(WID)を使う方法でやる。

コンテナにWSUSの役割をインストール

Install-WindowsFeature -Name UpdateServices -IncludeManagementTools

install_wsus.PNG

Exit CodeがSuccessになっているので成功したようだ。
Restart NeededはNoとなっているのでこのまま先に進む。

WSUSは役割をインストールしただけでは動作せず、追加設定をしないといけない。以下のコマンドを実行する。
配信ファイルの保存先をC:\WSUSにしたいので、CONTENT_DIR引数を付けている。

cd 'C:\Program Files\Update Services\Tools\'
.\WsusUtil.exe postinstall CONTENT_DIR=C:\WSUS

postinstall.PNG

と、ここでエラーが出てしまった。
Fatal Error: The Server service is not started.

サービスの起動に失敗したようだ。ログファイルを見てみる。

PS C:\> cat C:\Users\ContainerAdministrator\AppData\Local\Temp\tmpB6DC.tmp
2017-04-23 20:21:20  Postinstall started
2017-04-23 20:21:21  Detected role services: Api, WidDatabase, Services
2017-04-23 20:21:21  Start: LoadSettingsFromParameters
2017-04-23 20:21:21  Content local is: True
2017-04-23 20:21:21  Content directory is: C:\WSUS
2017-04-23 20:21:21  SQL instname is:
2017-04-23 20:21:21  End: LoadSettingsFromParameters
2017-04-23 20:21:21  Start: Run
2017-04-23 20:21:21  Fetching WsusAdministratorsSid from registry store
2017-04-23 20:21:21  Value is (null)
2017-04-23 20:21:21  Configuring content directory...
2017-04-23 20:21:21  Configuring groups...
2017-04-23 20:21:21  Starting group configuration for WSUS Administrators...
2017-04-23 20:21:21  Group does not already exist in the registry
2017-04-23 20:21:21  System.Runtime.InteropServices.COMException (0x80070842): The Server service is not started.

   at System.DirectoryServices.DirectoryEntry.RefreshCache()
   at System.DirectoryServices.AccountManagement.PrincipalContext.DoMachineInit()
   at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
   at System.DirectoryServices.AccountManagement.PrincipalContext.ContextForType(Type t)
   at System.DirectoryServices.AccountManagement.Principal.set_Name(String value)
   at Microsoft.UpdateServices.Administration.ConfigureGroups.FetchOrCreateGroup(PrincipalContext context, String name,
String description)
   at Microsoft.UpdateServices.Administration.ConfigureGroups.SetupGroup(PrincipalContext context, String groupName, Str
ing description, String registryValue)
   at Microsoft.UpdateServices.Administration.ConfigureGroups.Run(Action`1 logWriter)
   at Microsoft.UpdateServices.Administration.PostInstall.Run()
   at Microsoft.UpdateServices.Administration.PostInstall.Execute(String[] arguments)

System.DirectoryServices.DirectoryEntry.RefreshCache()で例外が発生しているようだが、
エラーコードでググってみても解決方法がよくわからない。
比較のため(コンテナではない)通常のWindows Server Core 2016にも全く同じ手順でインストールしてみたが、そちらはうまくいったため、コンテナ環境に何か問題があることは間違いなさそうだが・・・

Windowsコンテナでは実行ユーザがuser manager\containeradministratorとなっており、通常のAdministratorではないようだ。
ここで権限周りの問題が発生しているのだろうか?
whoami.PNG

通常のAdministratorで実行する方法がないかいろいろと試したがうまくいかず、
今回はここで諦めてしまった。

感想

Windows Server 2016がリリースされて半年ほど経つが、Windowsコンテナに関してはまだまだ情報が少ない印象だ。
特に導入部を越えて、実際にコンテナをどう利活用していくかという部分ではまだまだ試行錯誤が必要だろう。
今回試したWSUSに限らず、ITインフラオペレーションの分野でコンテナ技術をどのように取り入れていくことができるのか、継続的にウォッチしていきたい。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3