[synchronization] Vagrant의 심볼릭 링크 및 동기화 된 폴더

Vagrant를 사용하여 팀에 공통 개발 환경을 제공하고 싶습니다. 호스트는 완전히 다릅니다.

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

VM 내부에서 Linux를 실행하려고합니다.

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

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

소스 코드 내부에는 실제로 몇 개의 심볼릭 링크가 있는데, 이는 VM 내부의 Linux에서는 문제가되지 않지만 호스트로서 Windows에서는 문제가 발생합니다. 우리가 할 수 없는 유일한 것은 심볼릭 링크를 제거하는 것이므로이를 처리 할 다른 방법이 필요합니다.

지금까지 여러 가지 옵션을 시도했습니다.

  • Vagrant 문제 에 언급 된 해결 방법이 있습니다 . 불행히도 이것은 VirtualBox 전용이며 VMware를 실행하는 사용자에게 도움이되지 않습니다. 지금까지 사용 된 공급자에 따라 Vagrantfile 에서 코드를 실행하는 방법을 찾지 못했습니다 .
  • 표준 공유 폴더를 사용하는 대신 rsync 유형을 사용해 보았습니다 . 이것은 Windows에서 작동하지만 OS X에서 충돌하며 symlink has no referent(심볼릭 링크 당 하나 의 오류)를 알려주는 많은 오류가 발생합니다.
  • NFS 에 대해 생각 했지만 Windows를 호스트로 사용하지 않는 경우에만 작동합니다.
  • 우리는 또한 SMB 에 대해서도 알고 있지만 이것은 Windows에서만 호스트로 작동합니다.

공유 폴더 내에서 다중 플랫폼 호스트 및 심볼릭 링크에 문제가있는 지구상에서 우리가 유일하거나 처음이라고 상상할 수 없습니다.

심볼릭 링크를 유지하면서 다른 호스트 운영 체제를 계속 사용할 수 있도록이 문제를 어떻게 해결할 수 있습니까?



답변

Virtualbox는 보안상의 이유로 공유 폴더에서 심볼릭 링크를 허용하지 않습니다. 심볼릭 링크를 활성화하려면 Vagrantfile의 vm provider config 블록에 다음 줄을 추가해야합니다.

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

또한 Windows에서 vagrant up은 관리자 권한이있는 셸에서 실행되어야합니다. 필요한 해결 방법이 없습니다.


답변

받아 들여진 대답은 좋지 않습니다. 질문은 공유 폴더가 아니라 동기화 된 폴더 의 문제를 설명합니다 . 제안 된 솔루션은 rsynced ( 공유되지 않음 ) 폴더 에 영향을 미치지 않습니다 . 그리고 OP가 공유 폴더를 사용하고 있더라도 수락 된 답변의 제안은 OP가 질문을 게시하기 15 개월 전에 공개 된 1.1에서 이미 vagrant에 통합 된 것입니다 ( VirtualBox의 공유 폴더가 너무 느립니다 ).


이 같은 문제가 발생했습니다. OS X에서 symlink has no referentrsync 오류가 발생했습니다. 나는 개인적으로 특정 rsync 인수를 내에 추가하여 해결할 수있었습니다 vagrantfile.

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

나는 또한 vagrant의 github 에서이 문제열어서 기본값에 잘못된 것으로 보이는 것을 지적했습니다 rsync__args(특히 기본 인수 중 하나가 --copy-links다른 인수 를 깨는 것 같습니다 --archive. 적어도 깨진 심볼릭 링크 복사에 관한 한) ).


답변

실행중인 오류를 해결하기 위해이 모든 옵션을 시도했습니다 npm install.

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

돌아가서 SharedFoldersEnableSymlinksCreateVagrantfile 에서 구성을 제거했지만 모든 것이 여전히 정상이었습니다.


답변

기본 동기화 폴더 유형입니다 vboxsf파일 / 디렉토리의 많은 수의 성능 문제를 알고, 그리고 심볼릭 링크와 하드 링크 (표 참조에 대한 지원이 부족했다 (818) – 7+ 세 버그). 그것을 사용하지 마십시오.

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

충돌했다고 언급했는데 어떤 버전의 rsync를 실행 중입니까? brew를 통해 3.1.0으로 업데이트하려고하면 OOTB가 너무 오래되어 (2.x) 문제가 발생할 수 있다는 것을 알고 있습니다.


답변

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

더 간단한 해결책은 별도의 공유 폴더를 구성한 다음 Ruby를 사용 File.readlink하여 기본 경로를 읽는 것입니다.

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


답변

Vagrantfile에 다음 행을 추가하십시오.

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

이것은 virtualbox 6.0.8을 6.0.4로, vagrant 2.2.4를 2.2.1로 다운 그레이드 한 후에 저에게 효과적이었습니다.

“관리자 권한으로 실행”으로 터미널을 열 때 (Windows 10에서 git bash 사용).

또한 git bash changing : in project file : $ vim .git / config change to symlinks = true

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = true
        ignorecase = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master


답변