2014-06-13 2 views
79

Vagrant를 사용하여 팀에 공통 개발 환경을 제공하고 싶습니다. 호스트는 완전히 다릅니다 :Vagrant의 심볼릭 링크 및 동기화 된 폴더

  • 일부는 OS X, 일부 Linux 및 일부 Windows를 사용합니다.
  • 일부는 VMware를 사용하고 일부는 VirtualBox를 사용합니다.

VM 내부에서 Linux를 실행하고 싶습니다.

지금까지 모든 것이 좋습니다.

이제 우리는 각 개발자가 원하는 IDE를 사용할 수 있어야하므로 호스트와 VM간에 소스 코드를 공유하는 동기화 된 폴더를 도입했습니다. 이것은 기본적으로 잘 작동합니다 ... 심볼릭 링크를 제외하고.

우리의 소스 코드에는 실제로 몇 가지 심볼릭 링크가 있습니다. 이것은 VM 내부의 Linux에서는 문제가 아니지만 Windows에서는 호스트로 인해 문제가 발생합니다. 우리가 할 수있는 유일한 것은 이 아니고은 상징적 인 링크를 없애기 때문에 이것을 처리 할 다른 방법이 필요합니다.

지금까지, 우리는 옵션을 시도 :

  • 은 방랑의 issue에 언급 된 해결 방법은, 불행하게도이 버추얼 전용이며, VM웨어를 실행하는 사람들을 도움이되지 않습니다. 지금까지 사용 된 공급자에 따라 Vagrantfile에 코드를 실행하는 방법을 찾지 못했습니다.
  • 이제 표준 공유 폴더를 사용하는 대신 rsync 유형을 사용해 보았습니다. 이것은 Windows에서 작동하지만, OS X에서 오류가 발생하여 symlink has no referent (심볼릭 링크 당 하나의 오류)이 발생한다는 것을 알리는 오류가 발생합니다.
  • NFS에 대해 생각했지만 Windows를 호스트로 사용하지 않는 경우에만 작동합니다.
  • SMB이지만 Windows에서는 호스트로만 작동합니다.

우리는이 행성에서 유일하게 또는 처음으로 공유 폴더 내의 다중 플랫폼 호스트 및 심볼 링크에 문제가 있음을 알 수 없습니다.

어떻게 심볼릭 링크를 유지할 수 있지만 여전히 다른 호스트 운영 체제를 사용할 수 있도록이 문제를 해결할 수 있습니까?

+0

여기에서 토론 : https://github.com/mitchellh/vagrant/issues/713#issuecomment-4416384 –

+0

@SteveBennett, 해당 문제 (현재 승인 된 답변 참조)는 15 개월 내에 릴리스 된 Vagrant 1.1에서 해결되었습니다. OP가 질문을 게시하기 전에. 어쨌든 VirtualBox 공유 폴더에 관한 것이지 rsync'd 폴더가 아닙니다. 아래의 내 대답을보십시오 (대답이 잘못되었습니다). – jdunk

답변

42

VirtualBox는 보안상의 이유로 공유 폴더에 심볼릭 링크를 허용하지 않습니다.다음 줄이 필요 심볼릭 링크가 Vagrantfile에서 VM 제공자 config 블록에 추가 할 수 있도록하려면

config.vm.provider "virtualbox" do |v| 
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] 
end 

또한, 윈도우 관리자 권한을 가진 쉘에서 실행해야 할 필요를 방랑에. 해결 방법은 필요하지 않습니다.

+9

나는 OP를 의심하고이 질문을 보는 많은 사람들이 "공유"및 "동기화 된"이라는 용어를 서로 바꾸어 사용하고있었습니다. OP의 두 번째 글 머리 기호는 공유 폴더를 사용하고 있음을 강력히 암시하지만 작동하지 않으므로 rsynced 폴더로 전환하려고했습니다. IIRC, 여기에 제공된 솔루션은 내가 가진 문제를 해결했습니다. –

+2

@SteveBennett, 동의 : 잠재적 인 혼란. 더 명확히하는 이유. 상당히 오래된 버전의 방랑자를 사용하지 않는 한,이 제안은 오래 전에 [해결 된] 문제를 언급 할 때 문제를 해결했을 것이라고 생각하기 어렵습니다. 그리고 비록 그렇게했다하더라도, IMO는 VBox의 공유 된 dirs에 대한 파일 시스템 성능 (예 : "git status"가 수초 걸리는 것)을 고려하면 거의 도움이되지 않았을 것입니다.하지만 파일이 거의없는 작은 프로젝트 만 공유 할 수도 있습니다. http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines – jdunk

+0

MacOS에서 http://vccw.cc/와 시도했지만 작동하지 않았습니다. – Meglio

2

기본 동기화 된 폴더 유형이 vboxsf 인 경우 파일/디렉토리 수가 많고 기호 링크 및 하드 링크가 지원되지 않습니다 (티켓 818 - 7 년이 넘은 버그 참조). 그것을 사용하지 마십시오.

rsync 유형의 동기화 된 폴더가 최선의 선택 일 수 있습니다.

당신은 rsync의 어떤 버전을 사용하고 있습니까? 양조를 통해 3.1.0으로 업데이트하려고하면, OOTB가 너무 오래되어서 (2.x), 문제를 일으킬 수 있습니다.

+0

'[wdd @ localhost ~] $ sudo 마운트 -t rsync 노드 공유 마운트 : 알 수없는 파일 시스템 유형 'rsync'' – Musa

+1

이 답변을 읽을 때 기뻤습니다. 내 문제를 해결할 수있을 것이라고 생각했지만 위와 같을 때 'sudo mount -t rsync shared/var/www'는'mount : 알 수없는 파일 시스템 유형 'rsync'' 오류입니다. – samayo

+0

'rsync'는 결코 파일 시스템 유형이 아니므로 마운트 할 수 없습니다. –

1

한 시간 동안 소란을 피우고 몇 가지 다른 솔루션 (vagrant-vbguest, Marvin의 제안 사항 수정)을 시도한 후에 VirtualBox 4.8.10, Vagrant 1.5.1에서 작동하도록 공유 폴더에서 심볼 링크를 얻을 수 없었습니다.

config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path" 
+1

나는 그것을 얻지 않는다. 예를 들어 설명해 주시겠습니까? 감사합니다 – Cassiano

81

허용 된 대답은 좋지 않습니다 :

나는 간단한 해결책은 별도의 공유 폴더를 구성하고 기본 경로에 읽을 루비의 File.readlink를 사용하는 것으로 나타났습니다. 질문에 동기화 된 폴더, 이 아닌공유 폴더에 대한 문제가 설명되어 있습니다. 제안 된 솔루션은 rsynced ( 공유되지 않음) 폴더에는 영향을 미치지 않습니다. 그리고 OP가 폴더를 공유하고 있다고해도, 대답의 제안은 already been integrated into vagrant as of 1.1, released 15 months before the OP posted the question (VirtualBox's shared folders are abysmally slow은 말할 것도 없습니다)을 가진 것입니다.


나는이 같은 문제가 발생 : OS X에, 나는 symlink has no referent에 rsync 오류가 발생했습니다.

config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"] 

나는 또한 opened this issue 특히 (rsync__args에 대한 기본 값이 잘못된 것 같습니다 뭔가를 지적하는 방랑의 GitHub의에 : 나는 개인적으로 내 vagrantfile 특히 rsync를 인자들을 추가하여 해결할 수 있었다 그 중 하나가 디폴트 args 중 하나 인 --copy-links은 적어도 깨진 심볼릭 링크를 복사 할 때까지 --archive을 깨뜨린 것처럼 보입니다.

+0

좋은 전화 - thanks @jdunk. 예, Vagrant 문서에 따르면, --copy-links 옵션은 기본적으로 설정되어 있습니다. 이것은 내 문제였다. 그것을 제거함으로써 (위의 답을 사용하여) - 그것을 처리합니다. –

+1

매우 유용합니다. 감사합니다. 나는 윈도우 대안을 원할 것이다. –

+4

Vagrant 문서에 따르면 공유 폴더는 VirtualBox 사용자의 기본 동기화 된 폴더 유형입니다. "VirtualBox 공급자를 사용하는 경우 VirtualBox 공유 폴더가 기본 동기화 된 폴더 유형입니다." (http://docs.vagrantup.com/v2/synced-folders/virtualbox.html) OP의 질문은 또한 VirtualBox 공유 폴더가 문제이므로 수용된 대답이 문제의 적어도 일부를 처리하려고 시도한다는 것을 암시하는 것으로 보입니다 (실제로 나를 위해 문제를 해결했다). – Ajedi32

2

npm install 오류를 해결하기 위해 이러한 모든 옵션을 시도했습니다.

관리자 프롬프트에서 방황액을 실행하고 VM (vagrant reload)을로드하기 만하면 문제가 해결되었습니다.

내가 다시 가서 Vagrantfile에서 SharedFoldersEnableSymlinksCreate 구성을 제거 했는데도 문제가 없습니다.

+0

'npm update'가 제 방황하는 공유 폴더에서 작동하지 않았습니다. 이 솔루션은 어떤 이유로 든 해결했습니다. – Emre

+0

더 많은 조사가 끝나면 상징적 인 링크를 만드는 것은 기본적으로 Windows에서 관리자 권한이 필요합니다. 권한을 수정하려면 여기를 클릭하십시오 : https://superuser.com/a/125981 – gameweld