Azure Image Builder で日本語化イメージを完全自動作成する (Windows Server 2019 編)

Azure Image Builder で日本語化イメージを完全自動作成する (Windows Server 2019 編)

今回はプレビュー中の Azure Image Builder を使い、日本語化イメージを完全自動作成する手順を紹介します。Azure Image Builder は間も無く一般公開予定ですが、現状は CLI のみサポートしています。

GitHub リポジトリ

今回使うテンプレートやスクリプトは次のリポジトリにまとめてあります。ReadMe を追えば実行できます。

https://github.com/sny0421/windows-server-2019-japanese

Image Builder でのイメージ作成全体像

Image Builder でのイメージ作成の流れを次の図で示します。

  1. Image Builder でイメージを作成できるようカスタムロールの付与と、イメージの元となるイメージテンプレートを作成します。
  2. 作成したイメージテンプレートをもとに、自動で仮想マシンの作成・カスタマイズ・イメージ化まで行います。
  3. 作成したイメージをもとに仮想マシンを作成することができます。

今回は共有イメージギャラリーにイメージを保存します。

イメージテンプレート

イメージのカスタマイズ内容やソース、保存先は次のテンプレートで定義しています。(一部置換用の文字列が含まれます)

https://raw.githubusercontent.com/sny0421/windows-server-2019-japanese/master/image-build-template.json

vmProfile

イメージ作成用の仮想マシンのプロパティを指定します。VM サイズは標準だと D1v2 なのでスペックを上げておいた方がいいです。

source

イメージのソースを指定します。Marketplace の他、作成済みのマネージドイメージや共有イメージギャラリーのイメージを指定することもできます。

customize

イメージ作成時に実行するカスタマイズ作業を指示できます。

  • File : ローカルにファイルをダウンロードします。
  • Shell : シェルスクリプトを実行します。
  • WindowsRestart : Windows の再起動を実施します。
  • PowerShell : PowerShell スクリプトを実行します。
  • WindowsUpdate : Windows Update を更新します。

distribute

イメージの保存先を指定します。保存先にはマネージドイメージか共有イメージギャラリーを指定できます。

日本語化スクリプト

今回作った日本語化用のスクリプトを紹介します。

install_language_pack.ps1

言語パックのダウンロードとインストールをします。ja-JP の部分で日本語のインストールを指定しています。

# Download Language pack for Windows Server 2019
## Define download environment variables
### download path 
$downloadPath = "C:\LangPack.iso"
### language pack url
$downloadUrl = "https://software-download.microsoft.com/download/pr/17763.1.180914-1434.rs5_release_SERVERLANGPACKDVD_OEM_MULTI.iso"
### downlaod 
$wc = New-Object net.webclient
$wc.Downloadfile($downloadUrl, $downloadPath)

# Install Language pack
## ISO mount
Mount-DiskImage $downloadPath
## Get mounted disk letter
$driveLetter = (Get-DiskImage -ImagePath $downloadPath | Get-Volume).DriveLetter
$languagePackPath = $driveLetter + ":\x64\langpacks\Microsoft-Windows-Server-Language-Pack_x64_ja-jp.cab"
## install language pack
lpksetup.exe /i ja-JP /p $languagePackPath /r /s
Wait-Process -Name lpksetup

# Clean file
## Unmount disk
DisMount-DiskImage $downloadPath
## Delete ISO file
Remove-Item $downloadPath 

japanese_setting_1.ps1

表示言語と入力方式を変更します。このスクリプトを実行後、再起動処理をかけます。

#ユーザーが使用する言語を日本語にします。
Set-WinUserLanguageList -LanguageList ja-JP,en-US -Force

#入力する言語を日本語で上書きします。
Set-WinDefaultInputMethodOverride -InputTip "0411:00000411"

#MS-IMEの入力方式を設定します。
Set-WinLanguageBarOption -UseLegacySwitchMode -UseLegacyLanguageBar

japanese_setting_2.ps1

地域やシステムロケールの変更に加え、Welcome 画面とデフォルトユーザーの表示言語を変更します。Welcome 画面とデフォルトユーザーの表示言語を変更するコマンドはないので、地道にレジストリを書き換えます。

#UIの言語を日本語で上書きします。
Set-WinUILanguageOverride -Language ja-JP

#時刻/日付の形式をWindowsの言語と同じにします。
Set-WinCultureFromLanguageListOptOut -OptOut $False

#ロケーションを日本にします。
Set-WinHomeLocation -GeoId 0x7A

#システムロケールを日本にします。
Set-WinSystemLocale -SystemLocale ja-JP

#タイムゾーンを東京にします。
Set-TimeZone -Id "Tokyo Standard Time"

Set-Culture ja-JP

$DefaultHKEY = "HKU\DEFAULT_USER"
$DefaultRegPath = "C:\Users\Default\NTUSER.DAT"

reg load $DefaultHKEY $DefaultRegPath
reg import "C:\ja-JP-default.reg"
reg unload $DefaultHKEY
reg import "C:\ja-JP-welcome.reg"

おそらくこのスクリプトだけでも GUI 操作なくできるようになっていると思います。

Image Builder が GA したらよりカスタマイズがしやすくなるかと思います。今後は Windows Virtual Desktop 用の日本語イメージ作成も試していこうと思います。

参考

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/image-builder-overview

https://azure.microsoft.com/ja-jp/blog/streamlining-your-image-building-process-with-azure-image-builder/