「せっかくだから、俺はこの銀の弁当箱を選ぶぜ!」くらいの勢いでMac miniを導入した私ですが、初っ端からwindows環境のお客様が続いています・・・
MSDNを導入するには予算オーバーだし、Macを買ってそうそうにwindowsのパッケージを買うのも負けた感があるので、modern IEで配ってるVMを使ってテスト環境を作るのが一番手っ取り早いんですが*1、ちょっと前まではvagrantから使うには一手間必要でした。
Setup modern.ie vagrant boxes · GitHub
が、いつの間にかMicrosoftからvagrantの形式でダウンロードできるようになっていたようです。
"Virtual Machine"のドロップダウンリストから必要なブラウザ&OSの組み合わせを選び、select platformの方のドロップダウンリストから"Vagrant"を選んで、下にある"Download Zip"ボタンを押すとVMをダウンロードすることができます。ただし、帯域制限しているのかうちの環境のせいかは不明ですが、1〜2MB/sec程度の転送レートになっちゃうので、ダウンロードするのに1時間くらいはかかります。*2
ひととおり、ダウンロードしてzipファイルを解凍するとこんな感じになります。
$ ls -s1 total 103168888 5017546388 IE10 - Win7.box 5017546668 IE10.Win7.Vagrant.zip 7378661428 IE11 - Win81.box 7378661710 IE11.Win81.Vagrant.zip 4496872696 IE8 - Win7.box 4496872974 IE8.Win7.Vagrant.zip 4800376728 IE9 - Win7.box 4800377006 IE9.Win7.Vagrant.zip 4717767002 MSEdge.Win10_RS1.Vagrant.zip 4717766724 dev-msedge.box
圧縮の意味が無いのはお約束 :p
とりあえずMS Edge+Win10のものを起動してみましょう。
最初にbox addコマンドでboxを追加しておきます。
vagrant box add MSEdgeWin10 ./dev-msedge.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'MSEdgeWin10' (v0) for provider: box: Unpacking necessary files from: file:///Users/sogo/modernIE/dev-msedge.box ==> box: Successfully added box 'MSEdgeWin10' (v0) for 'virtualbox'!
続いて、適当なディレクトリを作成してvagrant initでVagrantfileを作成します。
$ mkdir test $ cd test $ vagrant box list MSEdgeWin10 (virtualbox, 0) $ vagrant init MSEdgeWin10 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
生成されたVagrantfileを編集して、中ほどにあるGUIの設定とメモリの設定を変更し、vramの設定を追加しておきます。
*3
config.vm.provider "virtualbox" do |vb| # Display the VirtualBox GUI when booting the machine vb.gui = true # Customize the amount of memory on the VM: vb.memory = "8192" vb.customize ["modifyvm", :id, "--vram", "256"] end
でもってvagrant upするとvirtual boxのGUI画面が立ちあがって、そっちでWindows10が起動されます。
コンソール側ではこんな感じで、延々とsshでのアクセスをしようとして失敗しタイムアウトしていますが、GUI使う分には問題無いです。気になる人は"config.vm.boot_timeout=5"とか適当に短いタイムアウト設定をVagrantfileに追加しておけば、コンソール側の処理も早く終わります。
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'MSEdgeWin10'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: WORK_default_1484292217879_22020 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. If you look above, you should be able to see the error(s) that Vagrant had when attempting to connect to the machine. These errors are usually good hints as to what may be wrong. If you're using a custom box, make sure that networking is properly working and you're able to connect to the machine. It is a common problem that networking isn't setup properly in these boxes. Verify that authentication configurations are also setup properly, as well. If the box appears to be booting properly, you may want to increase the timeout ("config.vm.boot_timeout") value.
しかし、実はこのwindowsゲスト内では、sshdが上がっているようでコマンドプロンプトを開いてlocalhostにsshすると入れます。
せっかく用意してくれてるなら、使わないと申し訳ないので一旦vagrant haltしてVagrantfileに以下の設定を追加しましょう。
config.vm.guest = :windows config.ssh.username = "IEUser" config.ssh.password = "Passw0rd!"
vm.questの設定はsshの設定とは直接関係ありませんが、この設定を入れておかないとログインしてsudoしようとして次のようなエラーを吐いてこけます。
==> default: Mounting shared folders... default: /vagrant => /Users/n_so5/Google Drive The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! mkdir -p /vagrant Stdout from the command: Stderr from the command: sh: sudo: command not found
synced folderの設定くらいなら、使わなければ大丈夫なんですが、vagrant haltした時にはsudo shutdown -hしようとしてこけるので致命的です・・・
でもって、この設定を入れてvagrant upすると
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: IEUser default: SSH auth method: password ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 5.0.20 default: VirtualBox Version: 5.1 ==> default: Mounting shared folders... default: /vagrant => /Users/n_so5/Google Drive ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run.
最終的にできあがったVagrantfileはこんな感じになってます。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "MSEdgeWin10" config.vm.guest = :windows config.ssh.username = "IEUser" config.ssh.password = "Passw0rd!" config.vm.provider "virtualbox" do |vb| vb.gui = true vb.memory = "8192" vb.customize ["modifyvm", :id, "--vram", "256"] end end
ん、winrm? 何それ美味しいの?