vagrant-guest-msys2 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a3f7a4a1d4dbac452c62e24485f0d3e8888eadf
4
- data.tar.gz: e1f593cbb79a14b3e3093dd065a38d77988e50a8
3
+ metadata.gz: 026ae197e2fb6b998bdff1de9b11cd6fab7e1354
4
+ data.tar.gz: 4873e8ea80587ca21f15bc21b35ad1b06c09244d
5
5
  SHA512:
6
- metadata.gz: 71abe576af291dedd846c7771f0c6da3929d268c897659dc2259e070fe5df297576225bb8ab18463c7e70b14bd34f371fc909c01f6fd76f0f259265b36d6eff4
7
- data.tar.gz: 5051d0bbb50183fcdefc3ec56e9b24c9c9b46e73ebc9ea46e53644b7d5f819fb173cd83e5d7a746cf925aa0dfbca304b1a70ded4620f97a6ce2c229d36fb4056
6
+ metadata.gz: 575ef68704c07d8726338c6ac1dd5fef45660eaba36778aa484966aa65ad138b4b7506e31caac62e290c16c42dba99a768dc3395d2fa03d33c648527cd0ef65b
7
+ data.tar.gz: e25db1a2b8cdcd48767f56036535ad54436ed41c789dc3fe92baa400269ac605ea6d730520439bb3d4094c865e6ff9382e1a3da19b7e25523ed49d9e272901f8
@@ -1 +1,15 @@
1
1
  require "vagrant-guest-msys2/plugin"
2
+
3
+ module VagrantPlugins
4
+ module GuestMSYS2
5
+ lib_path = Pathname.new(File.expand_path('../vagrant-guest-msys2', __FILE__))
6
+ autoload :Errors, lib_path.join('errors')
7
+
8
+ # This returns the path to the source of this plugin.
9
+ #
10
+ # @return [Pathname]
11
+ def self.source_root
12
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,39 @@
1
+ require "vagrant-guest-msys2/util/cap_helpers"
2
+
3
+ module VagrantPlugins
4
+ module GuestMSYS2
5
+ module Cap
6
+ module ChangeHostName
7
+ def self.change_host_name(machine, name)
8
+ change_host_name_and_wait(machine, name, machine.config.vm.graceful_halt_timeout)
9
+ end
10
+
11
+ def self.change_host_name_and_wait(machine, name, sleep_timeout)
12
+ machine.guest.capability(:powershell_check) if machine.guest.capability?(:powershell_check)
13
+
14
+ escaped_name = name.gsub("'", "''")
15
+
16
+ # If the configured name matches the current name, then bail
17
+ # We cannot use %ComputerName% because it truncates at 15 chars
18
+ return if machine.communicate.test(Util::CapHelpers.wrap_powershell("if ([System.Net.Dns]::GetHostName() -eq '#{escaped_name}') { exit 0 } exit 1"))
19
+
20
+ # Rename and reboot host if rename succeeded
21
+ script = <<-EOH.gsub(/^ {14}/, '')
22
+ $computer = Get-WmiObject -Class Win32_ComputerSystem
23
+ $retval = $computer.rename('#{escaped_name}').returnvalue
24
+ if ($retval -eq 0) {
25
+ shutdown -r -t 5 -f -d p:4:1 -c "Vagrant Rename Computer"
26
+ }
27
+ exit $retval
28
+ EOH
29
+ machine.ui.info I18n.t("vagrant-guest-msys2.info.run_change_host_name", host: name)
30
+ machine.communicate.execute(Util::CapHelpers.wrap_powershell(script))
31
+
32
+ # Don't continue until the machine has shutdown and rebooted
33
+ machine.ui.info I18n.t("vagrant-guest-msys2.info.run_wait_for_reboot", host: name)
34
+ sleep(sleep_timeout)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,20 @@
1
+ module VagrantPlugins
2
+ module GuestMSYS2
3
+ module Cap
4
+ module ChooseAddressableIPAddr
5
+ def self.choose_addressable_ip_addr(machine, possible)
6
+ machine.communicate.tap do |comm|
7
+ possible.each do |ip|
8
+ command = "ping -n 1 -w 1 #{ip}"
9
+ if comm.test(command)
10
+ return ip
11
+ end
12
+ end
13
+ end
14
+
15
+ nil
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ require "log4r"
2
+ require_relative "../guest_network"
3
+
4
+ module VagrantPlugins
5
+ module GuestMSYS2
6
+ module Cap
7
+ module ConfigureNetworks
8
+ @@logger = Log4r::Logger.new("vagrant::guest::windows::configure_networks")
9
+
10
+ def self.configure_networks(machine, networks)
11
+ @@logger.debug("Networks: #{networks.inspect}")
12
+ @@logger.debug("communicator: #{machine.config.vm.communicator.inspect}")
13
+
14
+ guest_network = GuestNetwork.new(machine.communicate)
15
+ network_adapters = guest_network.network_adapters()
16
+ @@logger.debug("network_adapters: #{network_adapters}")
17
+
18
+ return
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,31 @@
1
+ module VagrantPlugins
2
+ module GuestMSYS2
3
+ module Cap
4
+ class InsertPublicKey
5
+ def self.insert_public_key(machine, contents)
6
+ comm = machine.communicate
7
+ contents = contents.chomp
8
+
9
+ remote_path = "/tmp/vagrant-authorized-keys-#{Time.now.to_i}"
10
+ Tempfile.open("vagrant-msys2-insert-public-key") do |f|
11
+ f.binmode
12
+ f.write(contents)
13
+ f.fsync
14
+ f.close
15
+ comm.upload(f.path, remote_path)
16
+ end
17
+
18
+ comm.execute <<-EOH.gsub(/^ {12}/, '')
19
+ mkdir -p ~/.ssh
20
+ chmod 0700 ~/.ssh
21
+ cat '#{remote_path}' >> ~/.ssh/authorized_keys
22
+ chmod 0600 ~/.ssh/authorized_keys
23
+
24
+ # Remove the temporary file
25
+ rm -f '#{remote_path}'
26
+ EOH
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,59 @@
1
+ module VagrantPlugins
2
+ module GuestMSYS2
3
+ module Cap
4
+ class Powershell
5
+ def self.powershell_installed(machine)
6
+ machine.communicate.test('which powershell')
7
+ end
8
+
9
+ def self.powershell_install(machine)
10
+ machine.ui.info I18n.t("vagrant-guest-msys2.info.run_powershell_install")
11
+ script = <<-EOH.gsub(/^ {12}/, '')
12
+ set -e
13
+ OS_VERSION=`echo '' | wmic os get version | grep -o '^[0-9]*\\.[0-9]*'`
14
+ OS_ARCH=`regtool -l get '\\HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\\PROCESSOR_ARCHITECTURE' | tr '[:upper:]' '[:lower:]'`
15
+
16
+ if [ "$OS_VERSION" = "5.1" -a "$OS_ARCH" = "x86" ]; then # Windows XP 32-bit
17
+ pacman -S --noconfirm wget
18
+
19
+ if ! (regtool -l get '\\HKLM\\SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727\\SP' | grep -q "1"); then
20
+ wget --no-verbose --no-check-certificate "https://download.microsoft.com/download/0/8/c/08c19fa4-4c4f-4ffb-9d6c-150906578c9e/NetFx20SP1_x86.exe" -O "/tmp/NetFx20SP1_x86.exe"
21
+ /tmp/NetFx20SP1_x86.exe //passive //norestart
22
+ rm /tmp/NetFx20SP1_x86.exe
23
+ fi
24
+
25
+ if ! (regtool -l get '\\HKLM\\SOFTWARE\\Microsoft\\PowerShell\\1\\PowerShellEngine\\PowerShellVersion' | grep -q "2\\.0"); then
26
+ wget --no-verbose --no-check-certificate "https://download.microsoft.com/download/E/C/E/ECE99583-2003-455D-B681-68DB610B44A4/WindowsXP-KB968930-x86-ENG.exe" -O "/tmp/WindowsXP-KB968930-x86-ENG.exe"
27
+ /tmp/WindowsXP-KB968930-x86-ENG.exe //passive //norestart
28
+ rm /tmp/WindowsXP-KB968930-x86-ENG.exe
29
+ fi
30
+ else
31
+ (>&2 echo Unsupported OS $OS_VERSION $OS_ARCH)
32
+ fi
33
+
34
+ if [ -f "c:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -a ! -f /bin/powershell ]; then
35
+ echo '#!/bin/sh'$'\\n''"c:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -inputformat none $@' > /bin/powershell
36
+ chmod 755 /bin/powershell
37
+ fi
38
+
39
+ which powershell
40
+ EOH
41
+ machine.communicate.execute(script)
42
+ end
43
+
44
+ def self.powershell_check(machine)
45
+ if machine.guest.capability?(:powershell_installed)
46
+ installed = machine.guest.capability(:powershell_installed)
47
+ if !installed
48
+ if machine.guest.capability?(:powershell_install)
49
+ machine.guest.capability(:powershell_install)
50
+ end
51
+ installed = machine.guest.capability(:powershell_installed)
52
+ raise Errors::PowershellNotInstalledInGuest if !installed
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,21 @@
1
+ module VagrantPlugins
2
+ module GuestWindows
3
+ module Cap
4
+ class Reboot
5
+ def self.wait_for_reboot(machine)
6
+ return if machine.config.vm.communicator != :ssh
7
+
8
+ script = File.expand_path("../../scripts/reboot_detect.ps1", __FILE__)
9
+ script = File.read(script)
10
+ while machine.communicate.execute(script, error_check: false) != 0
11
+ sleep 10
12
+ end
13
+
14
+ # This re-establishes our symbolic links if they were
15
+ # created between now and a reboot
16
+ machine.communicate.execute("net use", error_check: false)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require "vagrant/util/shell_quote"
2
+
3
+ module VagrantPlugins
4
+ module GuestMSYS2
5
+ module Cap
6
+ class RemovePublicKey
7
+ def self.remove_public_key(machine, contents)
8
+ contents = contents.chomp
9
+ contents = Vagrant::Util::ShellQuote.escape(contents, "'")
10
+
11
+ machine.communicate.tap do |comm|
12
+ if comm.test("test -f ~/.ssh/authorized_keys")
13
+ comm.execute(<<SCRIPT)
14
+ sed -e '/^.*#{contents}.*$/d' ~/.ssh/authorized_keys > ~/.ssh/authorized_keys.new
15
+ mv ~/.ssh/authorized_keys.new ~/.ssh/authorized_keys
16
+ chmod 600 ~/.ssh/authorized_keys
17
+ SCRIPT
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -3,7 +3,7 @@ module VagrantPlugins
3
3
  module Cap
4
4
  class RSync
5
5
  def self.rsync_installed(machine)
6
- machine.communicate.test("which rsync")
6
+ machine.communicate.test('which rsync')
7
7
  end
8
8
 
9
9
  def self.rsync_install(machine)
@@ -12,7 +12,7 @@ module VagrantPlugins
12
12
  end
13
13
 
14
14
  def self.rsync_command(machine)
15
- "rsync"
15
+ 'rsync'
16
16
  end
17
17
 
18
18
  def self.rsync_pre(machine, opts)
@@ -0,0 +1,23 @@
1
+ module VagrantPlugins
2
+ module GuestMSYS2
3
+ module Errors
4
+ # A convenient superclass for all our errors.
5
+ class MSYS2Error < Vagrant::Errors::VagrantError
6
+ error_namespace("vagrant-guest-msys2.errors")
7
+ end
8
+
9
+ class RenameComputerFailed < MSYS2Error
10
+ error_key(:rename_computer_failed)
11
+ end
12
+
13
+ class PowershellNotInstalledInGuest < MSYS2Error
14
+ error_key(:powershell_not_installed_in_guest)
15
+ end
16
+
17
+ class PowershellInstallationFailed < MSYS2Error
18
+ error_key(:powershell_installation_failed)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,127 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module GuestMSYS2
5
+ # Manages the remote Windows guest network.
6
+ class GuestNetwork
7
+ PS_GET_WSMAN_VER = '((test-wsman).productversion.split(" ") | select -last 1).split("\.")[0]'
8
+ WQL_NET_ADAPTERS_V2 = 'SELECT * FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL'
9
+
10
+ def initialize(communicator)
11
+ @logger = Log4r::Logger.new("vagrant::windows::guestnetwork")
12
+ @communicator = communicator
13
+ end
14
+
15
+ # Returns an array of all NICs on the guest. Each array entry is a
16
+ # Hash of the NICs properties.
17
+ #
18
+ # @return [Array]
19
+ def network_adapters
20
+ @logger.debug("querying network adapters")
21
+
22
+ wsman_version == 2? network_adapters_v2_winrm : network_adapters_v3_winrm
23
+ end
24
+
25
+ # Checks to see if the specified NIC is currently configured for DHCP.
26
+ #
27
+ # @return [Boolean]
28
+ def is_dhcp_enabled(nic_index)
29
+ cmd = <<-EOH
30
+ if (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "Index=#{nic_index} and DHCPEnabled=True") {
31
+ exit 0
32
+ }
33
+ exit 1
34
+ EOH
35
+ @communicator.test(cmd)
36
+ end
37
+
38
+ # Configures the specified interface for DHCP
39
+ #
40
+ # @param [Integer] The interface index.
41
+ # @param [String] The unique name of the NIC, such as 'Local Area Connection'.
42
+ def configure_dhcp_interface(nic_index, net_connection_id)
43
+ @logger.info("Configuring NIC #{net_connection_id} for DHCP")
44
+ if !is_dhcp_enabled(nic_index)
45
+ netsh = "netsh interface ip set address \"#{net_connection_id}\" dhcp"
46
+ @communicator.execute(netsh)
47
+ end
48
+ end
49
+
50
+ # Configures the specified interface using a static address
51
+ #
52
+ # @param [Integer] The interface index.
53
+ # @param [String] The unique name of the NIC, such as 'Local Area Connection'.
54
+ # @param [String] The static IP address to assign to the specified NIC.
55
+ # @param [String] The network mask to use with the static IP.
56
+ def configure_static_interface(nic_index, net_connection_id, ip, netmask)
57
+ @logger.info("Configuring NIC #{net_connection_id} using static ip #{ip}")
58
+ #netsh interface ip set address "Local Area Connection 2" static 192.168.33.10 255.255.255.0
59
+ netsh = "netsh interface ip set address \"#{net_connection_id}\" static #{ip} #{netmask}"
60
+ @communicator.execute(netsh)
61
+ end
62
+
63
+ # Sets all networks on the guest to 'Work Network' mode. This is
64
+ # to allow guest access from the host via a private IP on Win7
65
+ # https://github.com/WinRb/vagrant-windows/issues/63
66
+ def set_all_networks_to_work
67
+ @logger.info("Setting all networks to 'Work Network'")
68
+ command = File.read(File.expand_path("../scripts/set_work_network.ps1", __FILE__))
69
+ @communicator.execute(command)
70
+ end
71
+
72
+ protected
73
+
74
+ # Checks the WinRS version on the guest. Usually 2 on Windows 7/2008
75
+ # and 3 on Windows 8/2012.
76
+ #
77
+ # @return [Integer]
78
+ def wsman_version
79
+ @logger.debug("querying WSMan version")
80
+ version = ''
81
+ @communicator.execute(PS_GET_WSMAN_VER) do |type, line|
82
+ version = version + "#{line}" if type == :stdout && !line.nil?
83
+ end
84
+ @logger.debug("wsman version: #{version}")
85
+ Integer(version)
86
+ end
87
+
88
+ # Returns an array of all NICs on the guest. Each array entry is a
89
+ # Hash of the NICs properties. This method should only be used on
90
+ # guests that have WinRS version 2.
91
+ #
92
+ # @return [Array]
93
+ def network_adapters_v2_winrm
94
+ @logger.debug("querying network adapters")
95
+
96
+ # Get all NICs that have a MAC address
97
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx
98
+ adapters = @communicator.execute(WQL_NET_ADAPTERS_V2, { shell: :wql } )[:win32_network_adapter]
99
+ @logger.debug("#{adapters.inspect}")
100
+ return adapters
101
+ end
102
+
103
+ # Returns an array of all NICs on the guest. Each array entry is a
104
+ # Hash of the NICs properties. This method should only be used on
105
+ # guests that have WinRS version 3.
106
+ #
107
+ # This method is a workaround until the WinRM gem supports WinRS version 3.
108
+ #
109
+ # @return [Array]
110
+ def network_adapters_v3_winrm
111
+ command = File.read(File.expand_path("../scripts/winrs_v3_get_adapters.ps1", __FILE__))
112
+ output = ""
113
+ @communicator.execute(command) do |type, line|
114
+ output = output + "#{line}" if type == :stdout && !line.nil?
115
+ end
116
+
117
+ adapters = []
118
+ JSON.parse(output).each do |nic|
119
+ adapters << nic.inject({}){ |memo,(k,v)| memo[k.to_sym] = v; memo }
120
+ end
121
+
122
+ @logger.debug("#{adapters.inspect}")
123
+ return adapters
124
+ end
125
+ end
126
+ end
127
+ end
@@ -11,6 +11,8 @@ module VagrantPlugins
11
11
  description "MSYS2 guest support."
12
12
 
13
13
  guest('msys2') do
14
+ init!
15
+
14
16
  require File.expand_path("../guest", __FILE__)
15
17
  Guest
16
18
  end
@@ -21,13 +23,13 @@ module VagrantPlugins
21
23
  end
22
24
 
23
25
  guest_capability("msys2", "insert_public_key") do
24
- require Vagrant.source_root.join('plugins/guests/linux/cap/insert_public_key')
25
- VagrantPlugins::GuestLinux::Cap::InsertPublicKey
26
+ require_relative "cap/insert_public_key"
27
+ Cap::InsertPublicKey
26
28
  end
27
29
 
28
30
  guest_capability("msys2", "remove_public_key") do
29
- require Vagrant.source_root.join('plugins/guests/linux/cap/remove_public_key')
30
- VagrantPlugins::GuestLinux::Cap::RemovePublicKey
31
+ require_relative "cap/remove_public_key"
32
+ Cap::RemovePublicKey
31
33
  end
32
34
 
33
35
  guest_capability("msys2", "rsync_installed") do
@@ -55,6 +57,50 @@ module VagrantPlugins
55
57
  Cap::RSync
56
58
  end
57
59
 
60
+ guest_capability("msys2", "choose_addressable_ip_addr") do
61
+ require_relative "cap/choose_addressable_ip_addr"
62
+ Cap::ChooseAddressableIPAddr
63
+ end
64
+
65
+ guest_capability("msys2", "change_host_name") do
66
+ require_relative "cap/change_host_name"
67
+ Cap::ChangeHostName
68
+ end
69
+
70
+ guest_capability("msys2", "wait_for_reboot") do
71
+ require_relative "cap/reboot"
72
+ Cap::Reboot
73
+ end
74
+
75
+ guest_capability("msys2", "powershell_check") do
76
+ require_relative "cap/powershell"
77
+ Cap::Powershell
78
+ end
79
+
80
+ guest_capability("msys2", "powershell_install") do
81
+ require_relative "cap/powershell"
82
+ Cap::Powershell
83
+ end
84
+
85
+ guest_capability("msys2", "powershell_installed") do
86
+ require_relative "cap/powershell"
87
+ Cap::Powershell
88
+ end
89
+
90
+ guest_capability("msys2", "configure_networks") do
91
+ require_relative "cap/configure_networks"
92
+ Cap::ConfigureNetworks
93
+ end
94
+
95
+ protected
96
+
97
+ def self.init!
98
+ return if defined?(@_init)
99
+ I18n.load_path << File.expand_path('locales/en.yml', VagrantPlugins::GuestMSYS2.source_root)
100
+ I18n.reload!
101
+ @_init = true
102
+ end
103
+
58
104
  end
59
105
  end
60
106
  end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module GuestMSYS2
3
+ module Util
4
+ module CapHelpers
5
+ def self.wrap_powershell(script)
6
+ wrapped = <<-EOH.gsub(/^ {12}/, '')
7
+ cat << 'EOF' | powershell -InputFormat none -Command -
8
+ #{script}
9
+ EOF
10
+ EOH
11
+ wrapped
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module GuestMSYS2
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -0,0 +1,17 @@
1
+ en:
2
+ vagrant-guest-msys2:
3
+ info:
4
+ run_powershell_install: "Installing powershell to the VM..."
5
+ run_change_host_name: "Changing hostname to %{host}"
6
+ run_wait_for_reboot: "Waiting until %{host} reboots"
7
+
8
+ errors:
9
+ rename_computer_failed: |-
10
+ Renaming the MSYS2 guest failed. Most often this is because you've
11
+ specified a FQDN instead of just a host name.
12
+
13
+ Ensure the new guest name is properly formatted. Standard names may
14
+ contain letters (a-z, A-Z), numbers (0-9), and hypens (-), but no
15
+ spaces or periods (.). The name may not consist entirely of digits.
16
+
17
+ powershell_not_installed_in_guest: "Powershell is not installed in this VM."
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-guest-msys2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-06-28 00:00:00.000000000 Z
12
+ date: 2016-11-03 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: 'Adds MSYS2 (https://sourceforge.net/p/msys2/wiki/Home/) as a guest for
15
15
  Vagrant. '
@@ -20,9 +20,19 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - lib/vagrant-guest-msys2.rb
22
22
  - lib/vagrant-guest-msys2/plugin.rb
23
+ - lib/vagrant-guest-msys2/cap/change_host_name.rb
24
+ - lib/vagrant-guest-msys2/cap/choose_addressable_ip_addr.rb
25
+ - lib/vagrant-guest-msys2/cap/powershell.rb
26
+ - lib/vagrant-guest-msys2/cap/remove_public_key.rb
23
27
  - lib/vagrant-guest-msys2/cap/halt.rb
28
+ - lib/vagrant-guest-msys2/cap/configure_networks.rb
29
+ - lib/vagrant-guest-msys2/cap/reboot.rb
24
30
  - lib/vagrant-guest-msys2/cap/rsync.rb
31
+ - lib/vagrant-guest-msys2/cap/insert_public_key.rb
32
+ - lib/vagrant-guest-msys2/util/cap_helpers.rb
33
+ - lib/vagrant-guest-msys2/guest_network.rb
25
34
  - lib/vagrant-guest-msys2/version.rb
35
+ - lib/vagrant-guest-msys2/errors.rb
26
36
  - lib/vagrant-guest-msys2/guest.rb
27
37
  - Rakefile
28
38
  - CHANGELOG.md
@@ -30,6 +40,7 @@ files:
30
40
  - Gemfile
31
41
  - README.md
32
42
  - LICENSE
43
+ - locales/en.yml
33
44
  - .gitignore
34
45
  homepage: https://github.com/tsmolka/vagrant-guest-msys2
35
46
  licenses: