vagrant icon indicating copy to clipboard operation
vagrant copied to clipboard

Windows Hyper-V: SMB share failed to be created

Open rgl opened this issue 3 years ago • 3 comments

Vagrant version

2.2.19

Host operating system

Windows 10 10.0.19044.1415

Guest operating system

Ubuntu 20.04. But I think it does not matter, as this code is host specific.

Vagrantfile

  config.vm.provider 'hyperv' do |hv, config|
    ...
    config.vm.synced_folder '.', '/vagrant',
      type: 'smb',
      smb_username: ENV['VAGRANT_SMB_USERNAME'] || ENV['USER'],
      smb_password: ENV['VAGRANT_SMB_PASSWORD']
...

The full Vagrantfile is at https://github.com/rgl/ubuntu-vagrant/blob/master/example/Vagrantfile.

Debug output

The relevant part is:

INFO subprocess: Starting process: ["C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0/powershell.EXE", "-NoLogo", "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", "$p = Start-Process -FilePath powershell -ArgumentList @('-NoLogo', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-EncodedCommand', 'JABwACAAPQAgAFMAdABhAHIAdAAtAFAAcgBvAGMAZQBzAHMAIAAtAEYAaQBsAGUAUABhAHQAaAAgAHAAbwB3AGUAcgBzAGgAZQBsAGwAIAAtAEEAcgBnAHUAbQBlAG4AdABMAGkAcwB0ACAAQAAoACcALQBOAG8ATABvAGcAbwAnACwAIAAnAC0ATgBvAFAAcgBvAGYAaQBsAGUAJwAsACAAJwAtAE4AbwBuAEkAbgB0AGUAcgBhAGMAdABpAHYAZQAnACwAIAAnAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAJwAsACAAJwBCAHkAcABhAHMAcwAnACwAIAAnAC0ARQBuAGMAbwBkAGUAZABDAG8AbQBtAGEAbgBkACcALAAgACcASgBnAEEAZwBBAEMASQBBAFEAdwBBADYAQQBDADgAQQBTAEEAQgBoAEEASABNAEEAYQBBAEIAcABBAEUATQBBAGIAdwBCAHkAQQBIAEEAQQBMAHcAQgBXAEEARwBFAEEAWgB3AEIAeQBBAEcARQBBAGIAZwBCADAAQQBDADgAQQBaAFEAQgB0AEEARwBJAEEAWgBRAEIAawBBAEcAUQBBAFoAUQBCAGsAQQBDADgAQQBaAHcAQgBsAEEARwAwAEEAYwB3AEEAdgBBAEQASQBBAEwAZwBBAHkAQQBDADQAQQBNAFEAQQA1AEEAQwA4AEEAWgB3AEIAbABBAEcAMABBAGMAdwBBAHYAQQBIAFkAQQBZAFEAQgBuAEEASABJAEEAWQBRAEIAdQBBAEgAUQBBAEwAUQBBAHkAQQBDADQAQQBNAGcAQQB1AEEARABFAEEATwBRAEEAdgBBAEgAQQBBAGIAQQBCADEAQQBHAGMAQQBhAFEAQgB1AEEASABNAEEATAB3AEIAbwBBAEcAOABBAGMAdwBCADAAQQBIAE0AQQBMAHcAQgAzAEEARwBrAEEAYgBnAEIAawBBAEcAOABBAGQAdwBCAHoAQQBDADgAQQBjAHcAQgBqAEEASABJAEEAYQBRAEIAdwBBAEgAUQBBAGMAdwBBAHYAQQBIAE0AQQBaAFEAQgAwAEEARgA4AEEAYwB3AEIAbwBBAEcARQBBAGMAZwBCAGwAQQBDADQAQQBjAEEAQgB6AEEARABFAEEASQBnAEEAZwBBAEMASQBBAFEAdwBBADYAQQBGAHcAQQBjAGcAQgBuAEEARwB3AEEAWABBAEIAMQBBAEcASQBBAGQAUQBCAHUAQQBIAFEAQQBkAFEAQQB0AEEASABZAEEAWQBRAEIAbgBBAEgASQBBAFkAUQBCAHUAQQBIAFEAQQBYAEEAQgBsAEEASABnAEEAWQBRAEIAdABBAEgAQQBBAGIAQQBCAGwAQQBDAEkAQQBJAEEAQQBpAEEASABZAEEAWgB3AEIAMABBAEMAMABBAFoAUQBBADIAQQBHAE0AQQBaAFEAQQB4AEEARABjAEEATwBBAEIAaQBBAEcARQBBAE0AQQBBADUAQQBEAGcAQQBOAGcAQgBqAEEARABRAEEATQBnAEEAdwBBAEQASQBBAE8AUQBCAGwAQQBHAE0AQQBNAFEAQQB6AEEARwBVAEEATgBBAEIAagBBAEcAUQBBAE4AQQBCAGkAQQBEAEkAQQBNAEEAQQB4AEEAQwAwAEEATgBnAEIAaABBAEcAUQBBAE4AUQBCAG0AQQBHAFEAQQBZAGcAQgBqAEEARwBJAEEAWgBnAEEAeQBBAEcAVQBBAFkAUQBCAGgAQQBEAGsAQQBNAHcAQgBpAEEARwBRAEEATgBnAEEAeQBBAEcAWQBBAE8AUQBBAHkAQQBEAE0AQQBNAHcAQQB6AEEARwBFAEEATQBnAEIAbABBAEQAWQBBAFoAUQBBADEAQQBDAEkAQQBJAEEAQQBpAEEASABZAEEAWgB3AEIAMABBAEMAMABBAFoAUQBBADIAQQBHAE0AQQBaAFEAQQB4AEEARABjAEEATwBBAEIAaQBBAEcARQBBAE0AQQBBADUAQQBEAGcAQQBOAGcAQgBqAEEARABRAEEATQBnAEEAdwBBAEQASQBBAE8AUQBCAGwAQQBHAE0AQQBNAFEAQQB6AEEARwBVAEEATgBBAEIAagBBAEcAUQBBAE4AQQBCAGkAQQBEAEkAQQBNAEEAQQB4AEEAQwAwAEEATgBnAEIAaABBAEcAUQBBAE4AUQBCAG0AQQBHAFEAQQBZAGcAQgBqAEEARwBJAEEAWgBnAEEAeQBBAEcAVQBBAFkAUQBCAGgAQQBEAGsAQQBNAHcAQgBpAEEARwBRAEEATgBnAEEAeQBBAEcAWQBBAE8AUQBBAHkAQQBEAE0AQQBNAHcAQQB6AEEARwBFAEEATQBnAEIAbABBAEQAWQBBAFoAUQBBADEAQQBDAEkAQQBJAEEAQQA3AEEAQwBBAEEAWgBRAEIANABBAEcAawBBAGQAQQBBAGcAQQBDAFEAQQBUAEEAQgBCAEEARgBNAEEAVgBBAEIARgBBAEYAZwBBAFMAUQBCAFUAQQBFAE0AQQBUAHcAQgBFAEEARQBVAEEATwB3AEEAPQAnACkAIAAtAFAAYQBzAHMAVABoAHIAdQAgAC0AVwBpAG4AZABvAHcAUwB0AHkAbABlACAASABpAGQAZABlAG4AIAAtAFcAYQBpAHQAIAAtAFIAZQBkAGkAcgBlAGMAdABTAHQAYQBuAGQAYQByAGQATwB1AHQAcAB1AHQAIAAnAEMAOgAvAFUAcwBlAHIAcwAvAFIAVQBJAEcAfgAxAC4ATABPAFAALwBBAHAAcABEAGEAdABhAC8ATABvAGMAYQBsAC8AVABlAG0AcAAvAHYAYQBnAHIAYQBuAHQAMgAwADIAMgAwADEAMAAzAC0ANAA0ADQANAAtADEAZABhAGoAaAAyAGQALwBzAHQAZABvAHUAdAAuAHQAeAB0ACcAIAAtAFIAZQBkAGkAcgBlAGMAdABTAHQAYQBuAGQAYQByAGQARQByAHIAbwByACAAJwBDADoALwBVAHMAZQByAHMALwBSAFUASQBHAH4AMQAuAEwATwBQAC8AQQBwAHAARABhAHQAYQAvAEwAbwBjAGEAbAAvAFQAZQBtAHAALwB2AGEAZwByAGEAbgB0ADIAMAAyADIAMAAxADAAMwAtADQANAA0ADQALQAxAGQAYQBqAGgAMgBkAC8AcwB0AGQAZQByAHIALgB0AHgAdAAnADsAIABpAGYAKAAkAHAAKQB7ACAAZQB4AGkAdAAgACQAcAAuAEUAeABpAHQAQwBvAGQAZQA7ACAAfQBlAGwAcwBlAHsAIABlAHgAaQB0ACAAMQAgAH0A') -PassThru -WindowStyle Hidden -Wait -Verb RunAs; if($p){ exit $p.ExitCode; }else{ exit 1 }"]
 INFO subprocess: Command not in installer, restoring original environment...
DEBUG subprocess: Selecting on IO
DEBUG subprocess: Waiting for process to exit. Remaining to timeout: 31998
DEBUG subprocess: Exit status: 1
ERROR warden: Error occurred: Exporting an SMB share failed! Details about the failure are shown
below. Please inspect the error message and correct any problems.

Host path: 

Stderr: 

Stdout: 
 INFO warden: Beginning recovery process...

Expected behavior

The SMB share should have been created without any error.

Actual behavior

It failed to create the SMB with an unknown error.

After decoding the logged script from above, this comes down to:

& "C:/HashiCorp/Vagrant/embedded/gems/2.2.19/gems/vagrant-2.2.19/plugins/hosts/windows/scripts/set_share.ps1" "C:\rgl\ubuntu-vagrant\example" "vgt-e6ce178ba0986c42029ec13e4cd4b201-6ad5fdbcbf2eaa93bd62f92333a2e6e5" "vgt-e6ce178ba0986c42029ec13e4cd4b201-6ad5fdbcbf2eaa93bd62f92333a2e6e5" ; exit $LASTEXITCODE;

Which , when manually executed, returns this:

The syntax of this command is:

NET SHARE
sharename
          sharename=drive:path [/GRANT:user,[READ | CHANGE | FULL]]
                               [/USERS:number | /UNLIMITED]
                               [/REMARK:"text"]
                               [/CACHE:Manual | Documents| Programs | BranchCache | None]
          sharename [/USERS:number | /UNLIMITED]
                    [/REMARK:"text"]
                    [/CACHE:Manual | Documents | Programs | BranchCache | None]
          {sharename | devicename | drive:path} /DELETE
          sharename \\computername /DELETE

share path: C:\rgl\ubuntu-vagrant\example
error

Looking at that set_share.ps1 script, I have a couple of questions:

  1. Why is it using net share instead of the New-SmbShare cmdlet (which is supported from Windows 2012R2+)?
    • NB Replacing net share with New-SmbShare worked for me.
  2. Why is it granting permissions to Everyone instead of the smb_username given in the Vagrantfile?
  3. There's a logical error in the for loop. It should use the -lt (less than) operator instead of -le (less than or equal).
    • NB Without this, that script will always print the odd WARNING: empty path argument encountered - complete message.

Would a PR be acceptable for fixing this (at least 1 and 3)?

rgl avatar Jan 03 '22 13:01 rgl

To add, the UAC stuff also seems to have an influence in this... so this is related to https://github.com/hashicorp/vagrant/issues/10628 too.

rgl avatar Jan 03 '22 17:01 rgl

Anyone?

rgl avatar Sep 23 '22 11:09 rgl

anyone v2?

unickq avatar Nov 21 '23 16:11 unickq