hashicorp / vagrant

Vagrant is a tool for building and distributing development environments.
https://www.vagrantup.com
Other
26.18k stars 4.43k forks source link

Windows Hyper-V: SMB share failed to be created #12639

Open rgl opened 2 years ago

rgl commented 2 years ago

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 commented 2 years ago

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 commented 1 year ago

Anyone?

unickq commented 10 months ago

anyone v2?