1. ホーム
  2. synchronization

[解決済み] Vagrantのシンボリックリンクと同期フォルダ

2023-01-30 08:21:22

質問

Vagrantを使って、チームで共通の開発環境を提供したいと考えています。ホストは全く別物です。

  • OS X を使っているもの、Linux を使っているもの、Windows を使っているもの。
  • VMware を使用するものもあれば、VirtualBox を使用するものもあります。

VM の内部で Linux を実行したい。

今のところ、すべてうまくいっています。

私たちの考えは、各開発者が自分の好きな IDE を使用できるようにすることであり、それゆえ、ホストと VM の間でソース コードを共有する同期されたフォルダーを導入しています。これは基本的に、シンボリック リンクを除いては、うまく機能します。

VM 内の Linux では問題ありませんが、ホストとしての Windows ではこれが問題を引き起こします。私たちができる唯一のことは ではなく はシンボリック リンクを取り除くことであり、これに対処する別の方法が必要です。

これまで、私たちはいくつかのオプションを試してきました。

  • で言及されている回避策があります。 問題 に記載されていますが、残念ながらこれは VirtualBox 専用で、VMware を使っている人の役には立ちません。今のところ、私たちは Vagrantfile は、使用するプロバイダによって異なります。
  • 標準の共有フォルダーを使用する代わりに、今度は rsync タイプの使用を試みました。これは Windows 上では動作しますが、OS X 上ではクラッシュし、多くのエラーが発生して symlink has no referent というエラーが表示されます (シンボリック リンクごとに 1 つのエラー)。
  • 私たちが考えたのは NFS を考えましたが、これは Windows をホストとして使用しない場合にのみ機能します。
  • また、私たちは SMB も考えましたが、これも Windows をホストとする場合にのみ機能します。

マルチプラットフォーム ホストと共有フォルダー内のシンボリック リンクに関する問題を経験したのは、この地球上で私たちだけ、あるいは最初の人たちだとは思えません。

シンボリック リンクを維持しつつ、異なるホスト オペレーティング システムを使用できるように、この問題をどのように解決できるでしょうか?

どのように解決するのですか?

Virtualboxはセキュリティ上の理由から共有フォルダのシンボリックリンクを許可していません。symlinks を有効にするには、Vagrantfile の vm provider config ブロックに次の行を追加する必要があります。

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

さらに、Windowsでは、vagrant upは管理者権限のあるシェルで実行する必要があります。 回避策は必要ありません。