« 2010年9月 | トップページ | 2010年11月 »

2010年10月

2010年10月29日 (金)

Windows7&Windows Server 2008 R2 SP1 RC版のインストール

PDC10パブリックビューイングのust中継を見ながら書いてます。

Windows7&Windows Server 2008 R2 SP1 RC版が出たので、さっそくBeta版を入れた環境にインストール。
Beta版はアンインストールしないといけないのですが、「Windows Server 2008 R2 SP1 Betaの副産物」で書いたように、SP1なしの状態ではIntel HD Graphicsドライバがコケるのでちょっと前置きが必要です。
とは言っても、標準VGAに変更してからアンインストールするだけですが。
RC版に入れ替わったら、再度Intel HD Graphics用ドライバに変更すればOKです。

ちなみに、私の環境では、Beta版アンインストールからRC版インストール完了までに約2時間かかりました。

2010年10月26日 (火)

りばてぃさんの連載:Team Foundation Server 2010入門 第4回

@ITにて、りばてぃさんが連載されているTeam Foundation Server 2010入門の第4回が公開されました。今回は「自動ビルド」についてです。

自動ビルドに関して、個人的にはもう一つ「いいな」と思う点があります。
それは、「正式なビルド環境が保全される」ということです。

ちゃんとした開発環境ではあまり意識する必要はないと思いますが、「このシステムはxxさんの端末でビルドしてたんだけど、別システムの開発で環境いじったらちゃんとビルドできなくなっちゃった。orz」なんてことないでしょうか??
(自分の部署ではアリアリです(^_^;))

TFSのビルドサーバを立てておけば、こんなことはなくなります。
(あ、ちゃんとバックアップは取得してくださいね。)

1台のビルドサーバ内に複数のビルド環境の構築も可能ですし、仮想環境でも構築可能ですので、「サーバ」と名がつく割には比較的導入しやすいと思われます。

2010年10月17日 (日)

VirtualServer2005用ツールの自作 その6

補足情報です。

○ツールでのVirtualMachine状態確認について
 少しだけ状態確認(「実行中でないと保存させない」とか)を行っていますが、正確なチェック内容ではありません。
 VirtualServerの正確な状態遷移図(State Diagram)は英語のMSDN(Virtual Machine State Diagram)にあります。
 ちなみに、Hyper-Vについても資料(Msvm_ComputerSystem Class)は存在するのですが、V1.0とV2.0で仕様が異なるようです。

○再起動用バッチファイルについて
 ソースを収納したZIPファイルに、再起動用のバッチファイルを含めています。
 (tempフォルダ内の「再起動時.bat」/「再起動後.bat」)

VirtualServer2005用ツールの自作 その5

Virtual Serverが起動されていないせいでエラーになるのであれば、起動するまで待てばよいと。

サービス操作関連は「System.ServiceProcess」名前空間にあるクラスを使えば簡単に操作できます。
サービスが、とある状態になるまで待機するメソッドとして「System.ServiceProcess.ServiceController.WaitForStatus()」があるので、これを使います。
        Public Sub WaitVirtualServerService()
            Dim sc As New System.ServiceProcess.ServiceController("Virtual Server")

            Console.WriteLine("VirtualServer起動待ち")
            sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running)
            Console.WriteLine("VirtualServer起動確認完了")
        End Sub
これで、Virtual Serverが起動してから操作が行えるようになりました。


思ったより結構手間がかかりましたが、これで運用できそうです。




とっととHyper-Vにしたい!!

VirtualServer2005用ツールの自作 その4

使い方としては、
 ・Windowsの「タスク」で週末夜間にsaveを実行→shutdownコマンドで再起動
 ・タスクに「システム起動時」のジョブを作成し、そこでresumeを実行
ということを考えていたので、Hyper-Vの中に作ったVirtualServer2005環境で実テスト。
saveはちゃんとできて、shutdownコマンドも実行されてOS再起動。
ログインして管理用Webサイトを確認すると.....「保存済み」のまま??

タスクの実行結果を確認すると、「前回の結果」がエラー(0x0ではない)になっています。
Photo_3

エラー出力をテキストファイルにリダイレクトするようにしていたので、テキストファイルを確認すると、アクセス拒否エラー??
Resume

手動ではresumeもちゃんと動作したし、タスク実行ユーザもログインユーザを指定しているのに....?
またもや小一時間悩み、出た結論は「Virtual Serverサービスが起動されてないから」。

Windowsのサービス起動は基本的に「無秩序」に起動です。
UNIX/Linuxのように「シェルに記述した順番で起動」というものではありません。
サービスの依存関係で前提サービスを指定することは可能ですが、すべてのサービスに対して秩序は求めていません。
(平行で実行されるので、起動時間の短縮にはなるのですが)

ちなみに、Virtual ServerサービスとTask Schedulerサービスの依存関係は
Vs Task
となっています。
「Remote Procedure Call(RPC)」サービスが起動した後にVirtual ServerサービスとTask Schedulerが起動されますが、Virtual Serverサービスが起動される前にTask Schedulerサービスが起動されてしまうためにエラーになっているようです。

ちょっと長いので分割。

VirtualServer2005用ツールの自作 その3

とりあえず、適当なサンプルを書いて動かしてみると...

Photo_2
なんじゃこりゃ~

どうもプロセス偽装が必要な様子。まぁ、サービス実行されているものに対して操作を行うので当然といえば当然ですが。
でもどうすりゃいいの??ということで小1日かけて検索し、たどり着いたので英語のMSDNにあるVirtualServerのページ
Msdn

COMを使って操作するための基礎情報は、「Using Microsoft Virtual Server」-「Connecting to the Virtual Server COM Object」にあります。
しっかりとC#でサンプルがあるので確認すると、Ole32.dllにある「CoInitializeSecurity()」を呼び出して偽装レベルを設定しています。

これをほぼコピペでVBに移植したら、やっと動きました。
これで完成か??と思いきや、まだネタがありました。orz

VirtualServer2005用ツールの自作 その2

まずは、VB.NETから操作する方式とその設定について。

WMIで操作するのが楽なんですが、稼働中のゲストOSしか列挙できない様子。
今回の対応だけであればいいのですが、機能追加を考えると稼働していないゲストOSも操作可能にしたいので却下。

となるとCOM経由でのアクセスになります。
スクリプトでも「CreateObject」を使って操作している例が多数あります。
ですが、VB.NETから「CreateObject」はしたくないので、「参照の追加」でCOM参照をしておきたいなと。
Photo
でも、何を追加すればいいの??

小一時間探してなんとか資料を発見。
VirtualServer2005インストールフォルダ(デフォルトは「C:\Program Files\Microsoft Virtual Server」)の下に「Documentation」フォルダがあり、その中の「Microsoft.VirtualServer.Interop.dll」を参照追加します。
(同じフォルダにある「Microsoft.VMRCClientControl.Interop.dll」は、VMRCクライアントの機能を使用するためのDLLです)

あとは「Microsoft.VirtualServer.Interop」をImportすれば簡単にソース記述できるようになります。
(Intellisenseもちゃんと出てきます)
Imports

これでメデタシメデタシと思ってたのですが...。

VirtualServer2005用ツールの自作 その1

会社でまだVirtualServer2005がまだ稼働してるのですが、いつ誰が使ってるかわからないので24時間稼働しっぱなしです。

そんな使い方をしていると、たまにホストOSにアクセスできない状態が発生するんです。
早い段階で見つかれば「IIS Admin Service」(と関連サービス)を再起動すれば回復するのですが、大体は「時すでに遅し」で強制再起動です。
(ログインすら数十分かかるので、ハード的な再起動です)

当然、ゲストOSの稼働状態は吹っ飛び、利用者からは「なんで~」って感じになるので、定期的にリブートしたいとは思うのですが、イチイチゲストOSを保存するのが面倒。
(Hyper-Vならシャットダウン時にゲストOSを自動保存できるのでいいですね。)

ネットを探すと、スクリプトでゲストOSの保存とかは転がってるんですけど、どのゲストOSが実行中だったかをスクリプトで保存するのがちょっと億劫になったので、VB.NETでツールを作成してみることに。

途中でいろいろ引っかかったところを以降で保存。

作ったツールはここに置いてますので、ご自由にどうぞ。
※使用は自由ですが、保証はしませんしサポートもしません。「自己責任」にてお願いします。

使用方法ですが、
 RebootVirtualServer.exe [動作] [稼働中のVirtualMachine名を格納するファイル名]
  ・[動作]
   "save"と"resume"しかありません。
    save:稼働中のVirtualMachine名をファイルに出力し、「保存」状態に変更します。
    resume:ファイルに保存されたVirtualMachine名を取得し、「実行中」状態に変更します。
  ・[稼働中のVirtualMachine名を格納するファイル名]
   稼働中のVirtualMachine名の保存に使用するファイル名を指定します。
となります。

« 2010年9月 | トップページ | 2010年11月 »

無料ブログはココログ