4. 自動更新について

4.1. 概要

この文書は CO-Store における自動更新機能の設定手順をまとめたものです。

CO-Store における自動更新機能は、サーバー上で一連の CO-StoreApi コマンドと PVS PowerShell コマンドを実行することにより実現します。

必要に応じて PowerShell スクリプトを作成し、タスクスケジューラに登録するなどして定期的に実行するように設定してください。

以下の記述は CO-Store 5.0.0.5 に基づいています。自動更新機能をご利用の場合には、CO-Store 5.0.0.5 以降へのアップデートをご検討ください。

CO-Store における自動更新機能は、以下の機能要素で構成されています。

  • PVS サーバー上で自動更新処理を管理するためのサーバー側スクリプト - イメージの書き換え開始処理 - イメージの書き換え終了処理 - 端末電源管理 (起動、待機、シャットダウン)
  • 端末上で更新処理実行するための端末側スクリプト - Windows Update の実行などの各種更新処理の実行
  • 保守モードの端末の起動時にディスクメニューを出さずに端末を起動する機能 - CO-Booter 連携 (ForceDisk 機能)
  • 自動更新のためのオプション機能 - 自動ログオンの実行

4.1.1. 用語

CO-StoreAgent
自動更新の処理を実行します。端末側にサービスとしてインストールされます。
Force Disk
更新用端末がブートメニューで待機せずに自動的に更新用イメージを選択するための機能です。
自動ログオン
Windows のログオン画面が表示された際に、特定のユーザーで自動的にログオンさせるための機能です。

4.2. 準備

CO-StoreAgent の準備手順について説明します。

4.2.1. CO-Store Agent の導入

自動更新を実施する端末を利用して「自動更新を設定するディスク」を書き換え開始し、次の作業を行ってイメージを更新してください。

  1. .NET Framework 4.6.1 を導入する。
  • Windows 10 であれば必要ありません。
  1. CO-StoreAgent.msi を 更新用端末 の上で実行する。
  • 「次へ」「インストールする」「完了」を押すだけです。
  1. 続いて起動した設定ツールで自動ログオンの設定をする。
  • 内容の詳細は次項を参照してください。
  1. プログラムの一覧で CO-Store 自動更新モジュール が追加されていることを確認する。
  2. 端末側で実行するスクリプトの一時保存先として "C:ProgramDataCO-CONVCO-StoreScripts" を作成する。

4.2.2. 設定ツールによる設定

インストーラに続いて起動した設定ツールにおいて、 CO-StoreServer のホスト名(IP アドレス)、ポート (既定では 54321) を指定してください。

  • [サーバー] の [ホスト名] および [ポート] には、CO-StoreServer の IP アドレス/ポート を設定してください。その後に [接続確認] ボタンを 押して CO-StoreServer との接続が可能かを確認してください。(10 秒程度かかることがあります)
  • [OK] を押して、設定を保存してください。
_images/CO-StoreAgentConfig.png

自動ログオン機能の設定 (オプション)

以下は自動ログオンを利用する場合に設定してください。(必須ではありません。)

  • 自動ログオンを行うアカウント、ドメインを指定してください。ワークグループ環境の場合には、ドメインの 欄に “.” を設定してください。
  • 設定ファイル (CO-StoreAgentConfig.exe.config) に記録されているパスワードを変更したり新規に設定したりする場合には、 「パスワードを変更する」のチェックボックスをセットし、パスワードを入力してください。
  • 「再起動までの待機時間」は、CO-StoreAgent 以外の起動時の処理が完了したのちに再起動させたい場合に、 適切な待機時間を設定してください。
  • 「自動ログオン後のシャットダウンまでの待機時間」は、自動ログオンでのログオン後に、更新作業にかかる時間を設定してください。

4.2.3. Force Disk 機能

更新用端末がブートメニューで待機してしまわないようにするための機能です。 更新用端末の起動時にブートメニュー画面で自動的に更新用イメージを選択させることができます。

  1. CO-BooterServer が稼働していることを確認する。
  • 端末起動時に問い合わせるサーバーすべてで稼働している必要があります。 - BIOS の場合はブートストラップファイルに埋め込まれた 4 つのサーバー。 - UEFI の場合は DHCP Option 17 (もしくは Option 11) で指定されているサーバー。
  • サービスマネージャで確認してください。
  • スタートアップの種類が「手動」になっている場合には、CO-Store 設定ウィザードを実行して「このサーバーで CO-Booter サーバーを利用する」の チェックボックスをオンにして設定をし直してください。
  1. 更新用端末が CO-Booter を利用して起動するように設定されているか確認する。
  • DHCP のオプション設定を確認してください。

4.2.4. 端末側ログレベルの設定 (オプション)

端末側ログの出力レベルをサーバー側で設定することができます。デフォルトでは INFO レベルで出力します。

通常は INFO レベルで構いませんが、端末側処理の調査などにおいてログレベルを変更したい場合に設定してください。

以下は DEBUG レベルで出力する設定をしたい場合の手順です。

  1. PVS コンソールを起動する。
  2. 更新用端末を選択して右クリック > [プロパティ] を選択する。
  3. [ターゲット デバイス プロパティ] ダイアログの [パーソナリティ] タブを選択する。
  4. [追加] ボタンを押して [パーソナリティ文字列の追加/編集] ダイアログを開く。
  5. 以下の値をセットして [OK] を押す。
  • 名前: CO-Store.LogLevel
  • 値: DEBUG
_images/DevicePersonality-1.png
  1. 一覧に追加されたことを確認して [OK] を押す。
_images/DevicePersonality-2.png

4.2.5. 自動ログオン機能 (オプション)

端末側で CO-StoreAgent によりスクリプトを実行するだけであれば、自動ログオンは不要です。 端末側において指定ユーザーで何らかの処理を行わせたい場合にご利用ください。

自動ログオンするように設定された端末は以下のように動作します。 自動ログオンのフローに再起動が含まれることにご注意ください。

  1. 起動する。
  • 設定に誤りがあるなどして自動ログオンに失敗した場合には、 画面に「ユーザ名かパスワードが正しくありません。」等の表示が出ることがあります。
  1. レジストリを変更して自動ログオンするべく設定する。
  2. 再起動する。
  3. 自動ログオンする。
  • 再起動後の 2 回めの起動時に自動ログオンに成功するのが仕様です。

自動ログオン機能を持つ他のツールが導入されたディスクに対して用いた際、 両者の機能が競合すると適切に動作しない場合があります。 自動更新を行う時間帯において両者の機能が競合しないようにしてください。

4.3. 自動更新用スクリプトの作成と実行

4.3.1. 自動更新用スクリプトの準備

サーバー側スクリプト

まずはサンプルスクリプト (Run-AutoUpdate.ps1) を使ってみてください。

  1. "C:\ProgramData\CO-CONV\CO-Store\Scripts\Server\AutoUpdate" 以下の .ps1-dist を .ps1 にリネームする。
  • AutoUpdateSettings.ps1 - 自動更新処理の設定を記述するファイルです。
  • Run-AutoUpdate.ps1 - 自動更新処理 (書き換え開始・終了、端末の起動・停止などを順次実行) を実行するスクリプトです。
  • AutoUpdateUtils.ps1 - Run-AutoUpdate.ps1 で利用するユーティリティ関数を定義しています。通常は編集する必要はありません。
  1. AutoUpdateSettings.ps1 の設定を環境に応じて編集する。:

    # CO-StoreApi.exe のパス
    $Api = "C:\Program Files\CO-CONV\CO-Store\Server\CO-StoreApi.exe"
    # CO-StoreApi.exe のコマンド実行時のタイムアウト [単位: 秒]
    $ApiTimeout = 120
    
    # CO-BooterServer の IP, ポート番号
    $CoBooterServer = "localhost:16910"
    
    # 自動更新処理が完了したかどうかを最初に確認するまでの待機時間
    $UpdateWaitTime = 3600
    
    # 自動更新処理のタイムアウト時間 [単位: 秒]
    $UpdateTimeout = 10800
    
    # 自動更新処理がエラーだった場合に更新バージョンを削除するかどうか
    # ※ $true: 削除する (デフォルト), $false: 削除しない
    $DeleteWhenAutoUpdateIsFailed = $true
    
  • $UpdateWaitTime, $UpdateTimeout, $DeleteWhenAutoUpdateIsFailed 以外は通常は変更する必要はありません。

端末側スクリプト

Windows Update を実行するサンプルスクリプト (Run-WindowsUpdate.ps1) を用意しています。

  1. "C:\ProgramData\CO-CONV\CO-Store\Scripts\Device\Windows Update" 以下の .ps1-dist を .ps1 にリネームする。
  • WindowsUpdateSettings.ps1 - 設定ファイルです。
  • Run-WindowsUpdate.ps1 - Windows Update を実行するスクリプトです。
  1. WindowsUpdateSettings.ps1 の設定を編集する。:

    # EULA に同意するかどうか
    # ※ $false にしておくと、EULA の同意を求める更新がスキップされます。
    $acceptEula = $true
    
    # 適用除外リスト
    $ignoreList = (
        "Windows 10、バージョン 1709 の機能更新プログラム",
        "Windows 10、バージョン 1803 の機能更新プログラム"
    )
    
  2. 必要に応じて端末側で実行する更新処理を記述した PowerShell スクリプトを用意する。

端末側スクリプト実行設定

Run-AutoUpdate.ps1 の -DeviceScriptsDir オプションに Default が指定されるものとします。 (サーバー側で Run-AutoUpdate.ps1 を実行する際に指定されるオプションです。)

その場合、端末側スクリプトを準備するフォルダは C:\ProgramData\CO-CONV\CO-Store\Scripts\Device\Default\Private になります。

  1. ScriptFileNames.txt に、端末側にダウンロードするファイルを列挙して保存する
  • このファイル名 (ScriptsFileNames.txt) は固定です。

  • 例えば、Run-SomeTask.ps1 を実行する場合は以下のように書いてください。:

    CO-StoreAgent.ini
    Run-SomeTask1.ps1
    SomeTask1Settings.ps1
    Run-SomeTask2.ps1
    
  • (動作試験などで) 実行するスクリプトが無い場合にも、中身は空でもよいので ScriptFileNames.txt を用意してください。

  • CO-StoreAgent.ini もダウンロード対象として記述してください。

  • 上記の例は、何らかの処理を実行する Run-SomeTask1.ps1 と Run-SomeTask2.ps1、Run-SomeTask1.ps1 の設定を記述した SomeTask1Settings.ps1 の組み合わせであることを想定しています。

  1. 各 .ps1 の実行設定を CO-StoreAgent.ini に記述する
  • このファイル名 (CO-StoreAgent.ini) は固定です。

  • 例えば、Run-SomeTask1.ps1 に 3 時間のタイムアウト、Run-SomeTask2.ps1 に 15 分のタイムアウトを設定して実行する場合には以下のようになります。:

    [Script-1]
    FileName=Run-SomeTask1.ps1
    Enabled=true
    Timeout=3:00:00
    
    [Script-2]
    FileName=SomeTask1Settings.ps1
    Enabled=false
    
    [Script-3]
    FileName=Run-SomeTask2.ps1
    Enabled=true
    Timeout=0:15:00
    
  • 各セクション名は [Script-N] という形式で記述してください。(N は任意です。)

  • タイムアウトのデフォルト設定は 2 時間です。

  1. 指定したファイルをフォルダに設置する
  • 先述の例であれば、以下のファイルを C:\ProgramData\CO-CONV\CO-Store\Scripts\Device\Default\Private に設置することになります。
    • ScriptFileNames.txt
    • CO-StoreAgent.ini
    • Run-SomeTask1.ps1
    • SomeTask1Settings.ps1
    • Run-SomeTask2.ps1

4.3.2. 自動更新処理の概要

サンプルスクリプト Run-AutoUpdate.ps1 では以下の一連の処理をしています。

  1. 書き換え開始
  • 更新用バージョン (保守モード) を追加する
  • 更新用端末を割り付ける
  1. 更新用端末の設定
  • 自動更新を有効にする
  • ForceDisk を有効にする
  • 自動ログオンを有効にする (オプション)
  1. 端末を起動する
  2. 更新処理を待機する
  3. 端末をシャットダウンする
  4. 更新用端末の設定解除
  • 自動更新を無効にする
  • ForceDisk を無効にする
  • 自動ログオンを無効にする (オプション)
  1. 書き換え終了
  • 更新用バージョンを実稼働モードに昇格する
  1. 運用端末の割り付け
  • 最新バージョンに割り付け変更する。
    • 更新作業に用いた端末 および 自動更新を行った系列の最新バージョンを利用していた端末に、 自動更新により作成されたバージョンを割り付ける。

4.4. 補足情報

以下で、サンプルスクリプト Run-AutoUpdate.ps1 で利用している API コマンドの説明をします。

より詳細な API の説明については、CO-Store_ApiGuide.pdf を参照してください。

4.4.1. 書き換え開始

CO-StoreConsole の「書き換え開始」ボタンを押した際と同様の処理を実行します。更新用バージョンの作成と更新用端末の割り付けを実施します。 更新用端末には保守端末を指定してください。

コマンド

CO-StoreApi.exe update_title --store=STORE --title=TITLE --device=DEVICE --unassign-same-title --unassign-different-title

備考

--unassign-same-title, --unassign-different-title
 更新用端末に更新対象のディスクを割り付ける際に、作業前に割り付けられていたディスクの割り付け解除を指定するためのオプションです。特別の理由がない限りはこの設定で運用してください。

4.4.2. 自動更新有効化

更新用端末で自動更新処理を実行するように設定します。 更新用端末の起動よりも前に実行してください。(更新用端末の起動リクエストよりも前にこのコマンドを実行するようにスクリプトを記述してください。)

コマンド

CO-StoreApi.exe enable_auto_update --store=STORE --title=TITLE --device=DEVICE [--enable-auto-logon]

備考

--enable-auto-logon
 更新用端末の起動時に自動ログオンでログオンするように設定します。

4.4.3. スクリプト実行有効化

更新用端末で端末側スクリプトを実行するように設定します。

コマンド

CO-StoreApi.exe enable_device_scripts --quiet --store=STORE --device=DEVICE

4.4.4. ForceDisk 有効化

更新用端末の起動時に指定したディスク・バージョンで起動するように設定します。 更新用端末の起動よりも前に実行してください。(更新用端末の起動リクエストよりも前にこのコマンドを実行するようにスクリプトを記述してください。)

コマンド

CO-StoreApi.exe set_forcedisk --store=STORE --title=TITLE --version=VERSION [--co-booter-server=CO_BOOTER_SERVER]

備考

  • バージョン番号の指定が必要であることに注意してください。
  • CO-BooterServer の設定のデフォルトは localhost:16910 です。

4.4.5. 端末起動

コマンド

CO-StoreApi.exe boot_device --store=STORE --device=DEVICE

4.4.6. 端末シャットダウン

コマンド

CO-StoreApi.exe shutdown_device --store=STORE --device=DEVICE

4.4.7. ForceDisk 無効化

コマンド

CO-StoreApi.exe clear_forcedisk --store=STORE --title=TITLE --version=VERSION [--co-booter-server=CO_BOOTER_SERVER]

備考

  • バージョン番号の指定が必要であることに注意してください。
  • CO-BooterServer の設定のデフォルトは localhost:16910 です。

4.4.8. スクリプト実行無効化

更新用端末で端末側スクリプトの実行をしないように設定します。

コマンド

CO-StoreApi.exe disable_device_scripts --store=STORE --device=DEVICE

4.4.9. 自動更新無効化

更新用端末での自動更新処理の実行をしないように設定します。

コマンド

CO-StoreApi.exe disable_auto_update --store=STORE --title=TITLE --device=DEVICE

4.4.10. 書き換え終了

  • 更新作業に用いた端末には、更新作業を行った系列の最新のバージョンが割り付けられます。 - 自動更新開始前に割り付けられていたディスクは、割り付け解除されます。

コマンド

CO-StoreApi.exe finish_update --store=STORE --title=TITLE --assign-working-device --unassign-same-title --unassign-different-title

備考

--assign-working-device
 書き換え終了後、最新バージョンに更新用端末を割り付けます。
--unassign-same-title, --unassign-different-title
 割り付け変更する更新用端末に、書き換え終了前に割り付けられていたディスクの割り付け解除をするためのオプションです。特別の理由がない限りはこの設定で運用してください。

4.4.11. 書き換え終了時の割り付け変更

コマンド

CO-StoreApi.exe assign_device_post_update --store=STORE --title=TITLE --version=VERSION|all

備考

  • バージョン番号を指定すると、そのバージョンに割り付けられていた端末が最新バージョンに割り付け変更されます。
  • all を指定すると、系列のいずれかのバージョンに割り付けられていた端末すべてが最新バージョンに割り付け変更されます。