VagrantでHyper-Vやるぜ!

投稿者: | 3月 12, 2014

VagrantがサポートしているHyper-Vは、Windows 8.1のみ。
以前のバージョンのHyper-VのAPIに対応していなくて、動作しないことがあるらしい。

Hyper-VとVirtualBox、VMwareなどの仮想化技術は共存ができない。Hyper-Vが有効になっているとVirutualBoxでエラーが出るので、Hyper-Vを無効化する必要がある。具体的には、[Windows 8.1で、VirtualBoxとHyper-Vを簡単に切り替える方法]を参照。

Hyper-Vを使用するには、予めWindowsの機能追加と削除でHyper-Vを有効にしておく必要がある。
image

 

Hyper-Vを使用するには、[vagrant up]コマンドのオプション[—provider]に[hyperv]を指定する。実行するときには、管理者特権が必要で、権限がない場合、Vagrantはエラーを返す。

image

The Hyper-V provider requires that Vagrant be run with
administrative privileges. This is a limitation of Hyper-V itself.
Hyper-V requires administrative privileges for management
commands. Please restart your console with administrative
privileges and try again.

 

コマンドプロンプトを意気揚々と管理者特権で起動してコマンド実行!

vagrant init hashicorp/precise64
vagrant up –provider=hyperv

また、エラー・・・。

image

There are no virtual switches created for Hyper-V! Please open
the Hyper-V Manager, go to the "Virtual Switch Manager", and create
at least one virtual switch.
A virtual switch is required for Vagrant to create a Hyper-V
machine that is connected to a network so it can access it.

Hyper-V用の仮想スイッチが作成されていないので、Hyper-Vマネジャーで仮想スイッチマネージャーから仮想スイッチを作成してね!っとのこと。
てなわけで、仮想スイッチを作成しちゃいましょう!

image

仮想スイッチを作成したら、改めて[Vagrant up]

vagrant up –provider=hyperv

image

SMBフィル共有で何かエラーがでているが、もう疲れたよ、ママン。
なので、エラーはでてるが気にしない。
気にしなければ、Hyper-Vでの操作はおしまい。

SMB同期

デフォルトでは、SMB同期が有効になっている。
SMB同期は、ネットワーク共有設定をするが、[vagrant destroy]などでネットワーク共有をクリーンアップしないので残り続けるので、必要に応じて自分で解除する必要がある。

image

 

制限事項

Vagrantは、まだHyper-V用の新しいネットワーク設定と作成方法を把握していません。
Hyper-Vでマシーンを起動するとき、Vagrantはどの仮想スイッチに仮想マシンを接続したいかを確認します。

Vagarantは、固定IP設定や自動NAT設定をすることはできません。

Vagrant upの過程で、マシンの仮想IPを報告し、ホストオンリーのネットワークでIPアドレスを使用できます。

 

vagrant up –provider=hyperv でエラー

c:\work\ubuntu>vagrant up –provider=hyperv
Bringing machine ‘default’ up with ‘hyperv’ provider…
==> default: Importing a Hyper-V instance
    default: Cloning virtual hard drive…
    default: Creating and registering the VM…
C:/HashiCorp/Vagrant/embedded/gems/gems/childprocess-0.5.1/lib/childprocess/abstract_process.rb:183:in `assert_started’:
process not started (ChildProcess::Error)
        from C:/HashiCorp/Vagrant/embedded/gems/gems/childprocess-0.5.1/lib/childprocess/windows/process.rb:39:in `exite
d?’
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.5.0/lib/vagrant/util/subprocess.rb:207:in `ensure in exec
ute’
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.5.0/lib/vagrant/util/subprocess.rb:209:in `execute’
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.5.0/lib/vagrant/util/subprocess.rb:22:in `execute’
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.5.0/lib/vagrant/util/powershell.rb:32:in `execute’
        from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.5.0/plugins/providers/hyperv/driver.rb:96:in `execute_pow
ershell’

こんな感じで、エラーが出ると途方にくれますね。
[SET VAGRANT_LOG=debug]で詳細ログを見ると、原因がわかるかも。

ちなみに今回のケースでは、仮想スイッチ名に日本語を使用していたらから、文字化けしちゃって使用できなかったから。仮想スイッチ名を[新しい仮想スイッチ]からアルファベット(たとえば[out]とか)にしたら正常に動作した。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください