Skip to content

Instantly share code, notes, and snippets.

@tknerr
Last active February 11, 2019 19:42
Show Gist options
  • Save tknerr/7fc4a4191903e3611c45 to your computer and use it in GitHub Desktop.
Save tknerr/7fc4a4191903e3611c45 to your computer and use it in GitHub Desktop.
Trying to get a minimal Vagrant with a Windows guest example to work...

Environment

If you are trying to reproduce this exactly, I'm using the following environment:

Basebox

First challenge is to get a windows basebox from somewhere. I couldn't find a good one, so built one myself from the windows/boxcutter packer templates:

git clone https://github.com/boxcutter/windows.git windows-boxes
cd windows-boxes
make virtualbox/eval-win7x86-enterprise

This takes a while (~45 minutes, depending on your internet connection).

Once the basebox is built, you can import it to Vagrant:

vagrant box add boxcutter/eval-win7x86-enterprise box/virtualbox/eval-win7x86-enterprise-nocm-1.0.4.box

Goal: Minimal Vagrantfile Example

Next I was trying to figure out a minimal Vagrantfile example, which works for all the basic Vagrant things, e.g.:

  • vagrant up should not work reliably (not hang / run into timeouts)
  • vagrant ssh should work
  • vagrant ssh -c "echo foo" should run the command
  • vagrant provision should work, with either inline: or path: (.bat / .ps) "shell" provisioner
  • synced folders should work (via vboxsf or smb ideally)

First Try

The Vagrantfile that is packaged within the above built basebox already includes some windows specific settings, such as setting config.vm.communicator = "winrm" and config.vm.guest = :windows, so we don't need to repeat that in our Vagrantfile.

So this was my first try:

Vagrant.configure(2) do |config|
  config.vm.box = "boxcutter/eval-win7x86-enterprise-nocm"
  config.vm.provision "shell", inline: "echo hello!"
  config.vm.synced_folder ".", "/vagrant", disabled: true
end

No luck though...

  • vagrant up works, but hangs and never completes (I can Ctrl+C though and continue working with the VM)
  • vagrant ssh works, yay! :-)
  • vagrant ssh -c "echo foo" drops me into the shell instead of executing the command
  • vagrant provision hangs and times out
  • synced folders I explicitly disabled for now to make it even simpler
W:\repo\windows-examples\minimini>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'boxcutter/eval-win7x86-enterprise-nocm'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: minimini_default_1430891237003_64906
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 3389 => 3389 (adapter 1)
default: 5985 => 5985 (adapter 1)
default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
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.
W:\repo\windows-examples\minimini>vagrant ssh
Last login: Tue May 5 23:05:12 2015 from 10.0.2.2
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\vagrant>echo "oh yeah!"
"oh yeah!"
C:\Users\vagrant>exit
Connection to 127.0.0.1 closed.
W:\repo\windows-examples\minimini>vagrant ssh -c "echo just run it!"
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\vagrant>exit
Connection to 127.0.0.1 closed.
W:\repo\windows-examples\minimini>vagrant provision
==> default: Waiting for cleanup before exiting...
Terminate batch job (Y/N)? Y
@jimklo
Copy link

jimklo commented May 7, 2015

have you configured winrm inside windows? AND ensured Windows Defender isn't blocking the ports?

@tknerr
Copy link
Author

tknerr commented May 9, 2015

Hey @chrisbaldauf @sneal @jimklo thanks for your help!

Seems like I didn't get email notified about your comments since gists don't support that yet :-/

Anyways, I got my issue resolved and it was in fact a WinRM configuration issue, that somehow sneaked in when I built the boxcutter/eval-win7x86-enterprise box. I had to manually set the network adapter to private and run the winrm config mentioned here again: https://github.com/WinRb/WinRM#troubleshooting

At some point in time later, I rebuilt the same boxcutter box (nothing changed or updated), and it suddenly worked. I have rebuilt the box several times since then, and it seems to reliably work right now.

=> i.e. the boxcutter boxes are fine and all of the above commands now work as expected out-of-the-box.

Also thanks for the vagrant-winrm plugin mention, this is super helpful too!

@tknerr
Copy link
Author

tknerr commented May 9, 2015

P.S.: even sync folder work perfectly too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment