vagrant-better-smb 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +65 -0
- data/lib/vagrant-better-smb.rb +21 -0
- data/lib/vagrant-better-smb/action_prepare_valid_ids.rb +22 -0
- data/lib/vagrant-better-smb/action_prune.rb +27 -0
- data/lib/vagrant-better-smb/caps.rb +16 -0
- data/lib/vagrant-better-smb/caps/linux.rb +110 -0
- data/lib/vagrant-better-smb/caps/windows.rb +42 -0
- data/lib/vagrant-better-smb/errors.rb +25 -0
- data/lib/vagrant-better-smb/plugin.rb +75 -0
- data/lib/vagrant-better-smb/synced_folder.rb +61 -0
- data/lib/vagrant-better-smb/version.rb +13 -0
- data/templates/locales/better_smb.yml +16 -0
- data/templates/smb/linux_share.erb +8 -0
- metadata +56 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5e7e0dfa577c1d154a7e01618af61ef510865c22
|
4
|
+
data.tar.gz: 60eb224da97674d6b6b61bb9d92fc9666fa03bbe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9f3f7d3170af07d24bae8949fd5f7b9d59f2fe86b75c72c99706106b71af4726b7c3cd44b7a5e13b5807127c005b6dc18567e44e907e23f286f54a54becb8a64
|
7
|
+
data.tar.gz: b6dee4a9ec31a468f5dd221cf15ed1784cfe2d225313990ca5b9a68a48fa8b50cf6da38f0c4f4fd0c3f1ff4c7dd29f849486c1aeca0e44f2c83fe4109850556b
|
data/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# Better SMB support for Vagrant
|
2
|
+
|
3
|
+
Vagrant's core SMB synced folder implementation doesn't use guest and host
|
4
|
+
capabilities and doesn't provide developers with an easy means of extending
|
5
|
+
support to non-Windows platforms. This plugin aims to fix this problem by
|
6
|
+
providing an alternative synced folder implementation.
|
7
|
+
|
8
|
+
* * *
|
9
|
+
|
10
|
+
## Work in progress
|
11
|
+
|
12
|
+
Don't use me for anything important just yet -- I'm still undergoing heavy
|
13
|
+
development. I'll be on RubyGems soon.
|
14
|
+
|
15
|
+
## Using
|
16
|
+
|
17
|
+
To install the plugin:
|
18
|
+
|
19
|
+
$ vagrant plugin install vagrant-better-smb
|
20
|
+
|
21
|
+
Then, in your ```Vagrantfile```:
|
22
|
+
|
23
|
+
config.vm.network :private_network, ip: "<your guest ip>"
|
24
|
+
|
25
|
+
config.vm.synced_folder "testdata", "<your drive letter>:", type: "better_smb",
|
26
|
+
better_smb_machine_ip: "<your guest ip>",
|
27
|
+
better_smb_share_name: "<your share name>",
|
28
|
+
better_smb_host_ip: "<your host ip>",
|
29
|
+
better_smb_share_user: "<your username>",
|
30
|
+
better_smb_share_password: "<your password>"
|
31
|
+
|
32
|
+
## Debugging
|
33
|
+
|
34
|
+
1. Have you added your user account as an SMB user with
|
35
|
+
```sudo smbpasswd -a <your username>```?
|
36
|
+
2. Is your password up to date? Update it with ```smbpasswd```.
|
37
|
+
3. Can you see your share in ```smbclient -L 127.0.0.1 -U <your username>```?
|
38
|
+
4. Have you configured SELinux correctly? Allow Samba to access home directories
|
39
|
+
with ```setsebool -P samba_enable_home_dirs 1```
|
40
|
+
|
41
|
+
## Hacking
|
42
|
+
|
43
|
+
1. Install Ruby and Bundler.
|
44
|
+
2. If you need any local dependencies (i.e. ```json```), pop them into a new
|
45
|
+
file called ```Gemfile.local```. We'll source it for you -- there's no need
|
46
|
+
to alter the top level ```Gemfile```.
|
47
|
+
3. Install the bundle with ```bundle install```.
|
48
|
+
4. Use Vagrant as normal -- just run it with ```bundle exec vagrant```.
|
49
|
+
|
50
|
+
### Building
|
51
|
+
|
52
|
+
It's easy:
|
53
|
+
|
54
|
+
$ bundle install
|
55
|
+
$ rake build
|
56
|
+
$ ls pkg/
|
57
|
+
|
58
|
+
### To do
|
59
|
+
|
60
|
+
* Enable multiple clients to connect to the same SMB share
|
61
|
+
* Sanity check and cleanse the values we're placing in samba.conf
|
62
|
+
* Implement support for Windows hosts
|
63
|
+
* Implement support for Linux guests
|
64
|
+
* Clean up existing shares
|
65
|
+
* Ensure Linux server implementation works outside of Fedora
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
require "vagrant"
|
10
|
+
require "vagrant-better-smb/plugin"
|
11
|
+
|
12
|
+
module VagrantPlugins
|
13
|
+
module BetterSmb
|
14
|
+
autoload :Caps, "vagrant-better-smb/caps"
|
15
|
+
autoload :Errors, "vagrant-better-smb/errors"
|
16
|
+
|
17
|
+
def self.source_root
|
18
|
+
@source_root ||= Pathname.new File.expand_path("../../", __FILE__)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
class ActionPrepareValidIDs
|
12
|
+
def initialize(app, env)
|
13
|
+
@app = app
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
env[:better_smb_valid_ids] = env[:machine].provider.driver.read_vms.values
|
18
|
+
@app.call(env)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
class ActionPrune
|
12
|
+
def initialize(app, env)
|
13
|
+
@app = app
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
if env[:machine].env.host.capability?(:smb_folders_prune) &&
|
18
|
+
env[:better_smb_valid_ids]
|
19
|
+
env[:machine].env.host.capability(
|
20
|
+
:smb_folders_prune, env[:machine].ui, env[:better_smb_valid_ids])
|
21
|
+
end
|
22
|
+
|
23
|
+
@app.call(env)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
module Caps
|
12
|
+
autoload :Linux, "vagrant-better-smb/caps/linux"
|
13
|
+
autoload :Windows, "vagrant-better-smb/caps/windows"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
module Caps
|
12
|
+
class Linux
|
13
|
+
SAMBA_CONF = "/etc/samba/smb.conf"
|
14
|
+
SAMBA_ETC_DIR = "/etc/samba"
|
15
|
+
SAMBA_SMBD = "/usr/sbin/smbd"
|
16
|
+
|
17
|
+
SMBD_STATUS_COMMAND = "systemctl status smb"
|
18
|
+
SMBD_START_COMMAND = "systemctl start smb"
|
19
|
+
SMBD_RESTART_COMMAND = "systemctl restart smb"
|
20
|
+
|
21
|
+
def self.smb_folders_export(env, ui, id, folders)
|
22
|
+
config = share_config(Process.uid, id, folders)
|
23
|
+
|
24
|
+
sudo_command = ""
|
25
|
+
sudo_command = "sudo " unless File.writable?(SAMBA_CONF)
|
26
|
+
|
27
|
+
cleanup_exports(id)
|
28
|
+
|
29
|
+
config.split("\n").each do |line|
|
30
|
+
line = Vagrant::Util::ShellQuote.escape(line, "'")
|
31
|
+
system(%Q[echo '#{line}' | #{sudo_command}tee -a #{SAMBA_CONF} >/dev/null])
|
32
|
+
end
|
33
|
+
|
34
|
+
if smb_running?
|
35
|
+
restart_smb
|
36
|
+
else
|
37
|
+
start_smb
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.smb_folders_prune(env, ui, valid_ids)
|
42
|
+
return unless File.exist?(SAMBA_CONF)
|
43
|
+
|
44
|
+
output = false
|
45
|
+
user = Process.uid
|
46
|
+
|
47
|
+
File.read(SAMBA_CONF).lines.each do |line|
|
48
|
+
if id = line[/^# VAGRANT-BEGIN:( #{user})? ([\.\/A-Za-z0-9\-_:]+?)$/, 2]
|
49
|
+
unless valid_ids.include?(id)
|
50
|
+
if !output
|
51
|
+
# We want to warn the user but we only want to output once
|
52
|
+
ui.info I18n.t("vagrant_plugins.better_smb.messages.pruning")
|
53
|
+
output = true
|
54
|
+
end
|
55
|
+
|
56
|
+
nfs_cleanup(id)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.smb_server_installed(env)
|
63
|
+
File.directory?(SAMBA_ETC_DIR) &&
|
64
|
+
File.file?(SAMBA_CONF) &&
|
65
|
+
File.file?(SAMBA_SMBD)
|
66
|
+
end
|
67
|
+
|
68
|
+
protected
|
69
|
+
|
70
|
+
def self.cleanup_exports(id)
|
71
|
+
return unless File.exist?(SAMBA_CONF)
|
72
|
+
|
73
|
+
sudo_command = ""
|
74
|
+
sudo_command = "sudo " unless File.writable?(SAMBA_CONF)
|
75
|
+
|
76
|
+
user = Regexp.escape(Process.uid.to_s)
|
77
|
+
id = Regexp.escape(id.to_s)
|
78
|
+
|
79
|
+
# Use sed to just strip out the block of code which was inserted
|
80
|
+
# by Vagrant
|
81
|
+
command = "#{sudo_command}sed -r -e '\\\x01^# VAGRANT-BEGIN:( #{user})? #{id}\x01,\\\x01^# VAGRANT-END:( #{user})? #{id}\x01 d' -i.bak #{SAMBA_CONF}"
|
82
|
+
system(command)
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.share_config(uid, id, folders)
|
86
|
+
export_template = File.expand_path(
|
87
|
+
"templates/smb/linux_share", BetterSmb.source_root)
|
88
|
+
|
89
|
+
Vagrant::Util::TemplateRenderer.render(
|
90
|
+
export_template,
|
91
|
+
user: Process.uid,
|
92
|
+
uuid: id,
|
93
|
+
folders: folders)
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.smb_running?
|
97
|
+
system "#{SMBD_STATUS_COMMAND} >/dev/null"
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.restart_smb
|
101
|
+
system "sudo #{SMBD_RESTART_COMMAND} >/dev/null"
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.start_smb
|
105
|
+
system "sudo #{SMBD_START_COMMAND} >/dev/null"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
module Caps
|
12
|
+
class Windows
|
13
|
+
def self.smb_client_installed(env)
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.smb_folders_mount(env, machine, folders)
|
18
|
+
folders.each do |folder, opts|
|
19
|
+
share_name = clean_string opts[:better_smb_share_name]
|
20
|
+
guest_path = clean_string opts[:guestpath]
|
21
|
+
user = clean_string opts[:better_smb_share_user]
|
22
|
+
password = clean_string opts[:better_smb_share_password]
|
23
|
+
|
24
|
+
share = "\\\\#{opts[:better_smb_host_ip]}\\#{share_name}"
|
25
|
+
|
26
|
+
auth_command = "cmdkey /add:#{opts[:better_smb_host_ip]} /user:#{user} /pass:#{password}"
|
27
|
+
clean_command = "NET USE #{guest_path} /DELETE /Y"
|
28
|
+
unfuck_command = "NET USE #{share}"
|
29
|
+
mount_command = "NET USE #{guest_path} #{share} /PERSISTENT:yes"
|
30
|
+
|
31
|
+
machine.communicate.execute "#{auth_command} ; #{clean_command} ; #{unfuck_command} ; #{mount_command}", {
|
32
|
+
shell: :powershell, elevated: true, error_check: false}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.clean_string(string)
|
37
|
+
string.gsub "$", "```$"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
module Errors
|
12
|
+
class BetterSmbError < Vagrant::Errors::VagrantError
|
13
|
+
error_namespace "vagrant_plugins.better_smb.errors"
|
14
|
+
end
|
15
|
+
|
16
|
+
class SmbClientNotInstalledOnGuest < BetterSmbError
|
17
|
+
error_key :smb_client_not_installed_on_guest
|
18
|
+
end
|
19
|
+
|
20
|
+
class SmbServerNotInstalledOnHost < BetterSmbError
|
21
|
+
error_key :smb_server_not_installed_on_host
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
class Plugin < Vagrant.plugin("2")
|
12
|
+
name "BetterSmb"
|
13
|
+
description "Better SMB support for Vagrant"
|
14
|
+
|
15
|
+
host_capability :linux, :smb_folders_export do
|
16
|
+
init!
|
17
|
+
Caps::Linux
|
18
|
+
end
|
19
|
+
|
20
|
+
host_capability :linux, :smb_folders_prune do
|
21
|
+
init!
|
22
|
+
Caps::Linux
|
23
|
+
end
|
24
|
+
|
25
|
+
host_capability :linux, :smb_server_installed do
|
26
|
+
init!
|
27
|
+
Caps::Linux
|
28
|
+
end
|
29
|
+
|
30
|
+
guest_capability :windows, :smb_client_installed do
|
31
|
+
init!
|
32
|
+
Caps::Windows
|
33
|
+
end
|
34
|
+
|
35
|
+
guest_capability :windows, :smb_folders_mount do
|
36
|
+
init!
|
37
|
+
Caps::Windows
|
38
|
+
end
|
39
|
+
|
40
|
+
synced_folder :better_smb, 1 do
|
41
|
+
init!
|
42
|
+
|
43
|
+
require_relative "synced_folder"
|
44
|
+
SyncedFolder
|
45
|
+
end
|
46
|
+
|
47
|
+
action_hook :better_smb_prepare_valid_ids, :machine_action_up do |hook|
|
48
|
+
init!
|
49
|
+
|
50
|
+
require_relative "action_prepare_valid_ids"
|
51
|
+
hook.append(ActionPrepareValidIDs)
|
52
|
+
end
|
53
|
+
|
54
|
+
action_hook :better_smb_prune, :machine_action_halt do |hook|
|
55
|
+
init!
|
56
|
+
|
57
|
+
require_relative "action_prepare_valid_ids"
|
58
|
+
require_relative "action_prune"
|
59
|
+
hook.append(ActionPrepareValidIDs)
|
60
|
+
hook.after(ActionPrepareValidIDs, ActionPrune)
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
65
|
+
def self.init!
|
66
|
+
return if defined?(@initialized)
|
67
|
+
|
68
|
+
I18n.load_path << File.expand_path(
|
69
|
+
"templates/locales/better_smb.yml", BetterSmb.source_root)
|
70
|
+
I18n.reload!
|
71
|
+
@initialized = true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#
|
2
|
+
# Better SMB for Vagrant
|
3
|
+
#
|
4
|
+
# @author Luke Carrier <luke@carrier.im>
|
5
|
+
# @copyright 2015 Luke Carrier
|
6
|
+
# @license GPL v3
|
7
|
+
#
|
8
|
+
|
9
|
+
module VagrantPlugins
|
10
|
+
module BetterSmb
|
11
|
+
class SyncedFolder < Vagrant.plugin("2", :synced_folder)
|
12
|
+
@@lock = Mutex.new
|
13
|
+
def initialize(*args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def usable?(machine, raise_error=false)
|
17
|
+
installed = machine.env.host.capability(:smb_server_installed)
|
18
|
+
raise Errors::SmbServerNotInstalledOnHost if raise_error and !installed
|
19
|
+
|
20
|
+
installed
|
21
|
+
end
|
22
|
+
|
23
|
+
def prepare(machine, folders, opts)
|
24
|
+
# Pre-boot
|
25
|
+
end
|
26
|
+
|
27
|
+
def enable(machine, folders, opts)
|
28
|
+
if !machine.guest.capability(:smb_client_installed)
|
29
|
+
raise Errors::SmbClientNotInstalledOnGuest
|
30
|
+
end
|
31
|
+
|
32
|
+
@@lock.synchronize do
|
33
|
+
begin
|
34
|
+
machine.env.lock("better-smb-lock") do
|
35
|
+
machine.ui.info I18n.t("vagrant_plugins.better_smb.messages.exporting")
|
36
|
+
machine.env.host.capability(
|
37
|
+
:smb_folders_export, machine.ui, machine.id, folders)
|
38
|
+
end
|
39
|
+
rescue Vagrant::Errors::EnvironmentLockedError
|
40
|
+
sleep 1
|
41
|
+
retry
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
machine.ui.info I18n.t("vagrant_plugins.better_smb.messages.mounting")
|
46
|
+
machine.guest.capability(:smb_folders_mount, machine, folders)
|
47
|
+
end
|
48
|
+
|
49
|
+
def cleanup(machine, opts)
|
50
|
+
# Post-halt
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def addressable_ip
|
56
|
+
machine.guest.capability(
|
57
|
+
:choose_addressable_ip_addr, candidate_ips)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
vagrant_plugins:
|
4
|
+
better_smb:
|
5
|
+
errors:
|
6
|
+
smb_client_not_installed_on_guest: |-
|
7
|
+
No SMB client is installed on the guest
|
8
|
+
smb_server_not_installed_on_host: |-
|
9
|
+
No SMB server is installed on the host
|
10
|
+
messages:
|
11
|
+
exporting: |-
|
12
|
+
Exporting folders as SMB shares
|
13
|
+
mounting: |-
|
14
|
+
Mounting SMB shares on guest
|
15
|
+
pruning: |-
|
16
|
+
Pruning invalid SMB shares from host
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# VAGRANT-BEGIN: <%= user %> <%= uuid %>
|
2
|
+
<% folders.each do |name, opts| %>
|
3
|
+
[<%= opts[:better_smb_share_name] %>]
|
4
|
+
path = <%= opts[:hostpath] %>
|
5
|
+
writeable = yes
|
6
|
+
hosts allow = <%= opts[:better_smb_machine_ip] %>
|
7
|
+
<% end %>
|
8
|
+
# VAGRANT-END: <%= user %> <%= uuid %>
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-better-smb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Luke Carrier
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Better SMB support for Vagrant
|
14
|
+
email: luke@carrier.im
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- README.md
|
20
|
+
- lib/vagrant-better-smb.rb
|
21
|
+
- lib/vagrant-better-smb/action_prepare_valid_ids.rb
|
22
|
+
- lib/vagrant-better-smb/action_prune.rb
|
23
|
+
- lib/vagrant-better-smb/caps.rb
|
24
|
+
- lib/vagrant-better-smb/caps/linux.rb
|
25
|
+
- lib/vagrant-better-smb/caps/windows.rb
|
26
|
+
- lib/vagrant-better-smb/errors.rb
|
27
|
+
- lib/vagrant-better-smb/plugin.rb
|
28
|
+
- lib/vagrant-better-smb/synced_folder.rb
|
29
|
+
- lib/vagrant-better-smb/version.rb
|
30
|
+
- templates/locales/better_smb.yml
|
31
|
+
- templates/smb/linux_share.erb
|
32
|
+
homepage: https://github.com/LukeCarrier/vagrant-better-smb
|
33
|
+
licenses:
|
34
|
+
- GPL v3
|
35
|
+
metadata: {}
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 2.4.5
|
53
|
+
signing_key:
|
54
|
+
specification_version: 4
|
55
|
+
summary: Better SMB support for Vagrant
|
56
|
+
test_files: []
|