SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows Sysprep と SQL Server Sysprep を連動して VM Role に SQL Server Express をインストール

leave a comment

前回投稿した、SQL Server Sysprep の [イメージの完了] ですが、setup.exe で起動することで実行しているため、コマンドから開始することが可能です。

コマンドで実行できるのであれば Sysprep に簡単に組み込むことが可能ですので今回は VM Role のイメージに SQL Server Sysprep を組み込んで、VM Role 上で SQL Server 2008 R2 Express Edition を起動してみたいと思います。
SSRS につていては設定の詰めが甘いので、セキュリティ設定ができていないですが起動後に HTTP でアクセスはできる状態では起動します。

作業の流れとしては以下のようになります。
# VM Role のイメージは Sysprep を実行する直前までは完了している状態です。
image

Sysprep 中にコマンドを実行するための方法は以下の技術情報が参考になります。
Sysprep 中に任意のコマンドを実行する方法について

 

本手順ですが、データベースのデータの永続化に関しては考慮をしていません。
そのため、SQL Server 内のデータに関しては非永続化された揮発性のデータとなります。

一週間ほど VM Role を使っていて感じたのは、このロールはアプリケーションの実行環境としての利用用途として考えた方が良いのではないかということです。
VPS のようなイメージで考えていると要件にマッチしないと思います。
永続化するようなデータは Web / Worker Role と同様に Windows Azure Storage を使う必要があると思いますので、Windows Azure の作法に乗っ取ったアプリケーションを実行するための環境を VM Role で作ることができるという感じかと。
# カスタマイズした VHD を使用することができるので汎用性が高いのかなと。

 

■VM Role イメージの事前準備


まずは、VM Role で使用するイメージで SQL Server Sysprep の準備を行います。
今回は Microsoft SQL Server2008 R2 RTM – Express with Advanced Services を使用しています。
SQL Server 2008 R2 Express Edition の SSRS 付きのものになります。

SQL Server 2008 R2 Express だと CU5 を統合したイメージの作成がうまくできなかったので修正プログラム未適用でインストールしています。
# XS インスタンスだとなかなか容量が厳しいもので…。

SQL Server Sysprep の準備は以下の設定としています。
今回の環境では SSRS を実行させるために IIS はインストールしていません。
# TCP 80 が競合してしまうため
image
image

SQL Server Sysprep については特に特殊な設定はありません。
インスタンス ID は SQL Server の Express Edition でデフォルトで指定される、[SQLEXPRESS] でもよいと思いますが今回は既定のインスタンスとして SQL Server Express をインストールするため [SQLEXPRESS] としています。

また、SQL Server Express のインストールメディアは SQL Server Sysprep のイメージの完了を実行する際に必要となりますのでローカルディスクに保存しておく必要があります。
今回は [C:Installer] というディレクトリに SQL Server Express のインストールメディアを保存しています。
image

 

SQL Server のインストーラーでは Windows ファイアウォールの例外設定はされませんので SQL Server で使用する以下のポートは事前にファイアウォールの例外として設定しておきます。
# DAC はリモート DAC を有効にしていないので設定しても効果無いですが。

  • TCP 1433 (既定のインスタンス)
  • TCP 1434 (DAC)
  • UDP 1434 (SQL Server Browser)
  • TCP 80 (SSRS)

netsh advfirewall firewall add rule name="SQL Server" dir=in protocol=TCP localport=1433 action=allow
netsh advfirewall firewall add rule name="SQL Server (DAC)" dir=in protocol=TCP localport=1434 action=allow
netsh advfirewall firewall add rule name="SQL Server Browser" dir=in protocol=UDP localport=1434 action=allow
netsh advfirewall firewall add rule name="SQL Server Reporting Services" dir=in protocol=TCP localport=80 action=allow

 

■サイレントインストール用 SQL Server 構成ファイルの準備


Windows Sysprep と SQL Server Sysprep を連動させるためには SQL Server の準備の完了をサイレントインストールで実行する必要があります。

setup.exe にオプションを付けて細かな設定をしても良いのですが、SQL Server のセットアップは構成ファイルを使用して実行することができます。

今回は以下の設定の構成ファイルを作成しています。
# SQL Server 認証の sa のパスワードは適切なものを入力します。

構成ファイルのオプションについては以下の技術情報に記載がされています。
コマンド プロンプトから SQL Server 2008 R2 をインストールする方法

 

構成ファイルの内容ですが、既定のインスタンスをSQL Server 認証を有効にして、TCP での接続を許可の状態でインストールされるように構成しています。

通常、SQL Server Express では
TCP による接続は無効化されています。
これは、SQL Server Express のデフォルトのインストールでは、[TCPENABLED="0"] としてインストールがされるためです。
今回は、[TCPENABLED="1"] としてインストールを行い、TCP での接続を許可した状態にしています。

;SQLSERVER2008 Configuration File
[SQLSERVER2008]

INSTANCEID="MSSQLSERVER"
ACTION="CompleteImage"
HELP="False"
INDICATEPROGRESS="False"
QUIET="False"
QUIETSIMPLE="False"
X86="False"
ENU="False"
UIMODE="Normal"
ERRORREPORTING="False"
SQMREPORTING="False"
INSTANCENAME="MSSQLSERVER"
AGTSVCACCOUNT="NT AUTHORITYNETWORK SERVICE"
AGTSVCSTARTUPTYPE="Disabled"
FARMADMINPORT="0"
SQLSVCSTARTUPTYPE="Automatic"
FILESTREAMLEVEL="0"
ENABLERANU="True"
SQLCOLLATION="Japanese_XJIS_100_CI_AS"
SQLSVCACCOUNT="NT AUTHORITYSYSTEM"
SQLSYSADMINACCOUNTS="BUILTINAdministrators"
SECURITYMODE="SQL"
SAPWD="<パスワード>"
ADDCURRENTUSERASSQLADMIN="False"
TCPENABLED="1"
NPENABLED="0"
BROWSERSVCSTARTUPTYPE="Disabled"

RSSVCACCOUNT="NT AUTHORITYSYSTEM"
RSSVCSTARTUPTYPE="Automatic"
RSINSTALLMODE="DefaultNativeMode"

余談になりますが、TCP の有効化については以下のコマンドを実行することで有効にすることもできます。
# reg add は改行されてしまっていますが 1 行で入力をします。

reg add "HKLMSoftwareMicrosoftMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLServerSuperSocketNetLibTcp" /v Enabled /t REG_DWORD /d 1 /f
net stop MSSQLSERVER
net start MSSQLSERVER

TCP の設定関連はレジストリに設定されているため、レジストリを変更して SQL Server の再起動を行うことでこそっと設定できたりもします。
この辺のレジストリを変更するとポート番号をレジストリから変更することも可能です。

作成した構成ファイルを [ConfigurationFile.ini] として、[C:Installer] に保存をしています。

■Windows Sysprep と SQL Server Sysprep の連動


Windows Sysprep と SQL Server Sysprep の連動ですが、[C:WindowsSetupScriptsSetupComplete.cmd] ファイルを使用して実施するのが楽だと思います。
# 応答ファイルの同期コマンドも試したのですがうまくいかなかったのですよね…。
image

[SetupComplete.cmd] の内容ですが、以下の一行を記載しています。

C:Installersetup.exe /CONFIGURATIONFILE="C:InstallerConfigurationFile.ini" /q

SQL Server Express のセットアップを構成ファイルを使用してサイレントインストールをするように指定を行っています。

また、Sysprep の応答ファイル (C:unattend.xml) に関しては、日本語の SQL Server Express を使用していますので、[en-us] を [ja-jp] に変更しています。
# [en-us] のままだとうまくインストールができなかったので。(システムロケールの問題のような気もしますが。)
image

以上で、Windows Sysprep と SQL Server Sysprep の連動は完了です。
以下の設定で Sysprep を行い、[csupload] を使用して、VM Role 用のイメージとして転送します。
image

SQL Server Sysprep による SQL Server のイメージの完了ですが以下のタイミングで実行されています。
image

 

VM Role にアップした環境がこちらです。
サービスは正常にインストールされているのですが、何故かサービスが起動していませんでしたので手動で起動しましたが…。
# SetupComplete.cmd に net start / stop で SQL Server 起動するように、記述しておいた方が良かったかも。
image

私がエンドポイントの設定を理解できていないので、1433 ではうまくつなげなかったのですが、SSRS の URL には接続することができました。
SSRS のセキュリティをカスタマイズしていないのでエラー画面しか表示されませんが…。
image

リモートデスクトップで接続をして確認をしたところサービスが起動していれば、SQL Server はローカル上では接続できました。
image

かなり中途半端な検証になってしまいましたが、Windows Sysprep と SQL Server Sysprep を連動して SQL Server をインストールすることまではできたかと…。
もうちょっと試してみたいと思います。

Share

Written by Masayuki.Ozawa

1月 16th, 2011 at 12:25 am

Leave a Reply