web-dev-qa-db-ja.com

Vagrant:ゲスト内でファイルを共有したり権限を変更したりすることは可能ですか?

VagrantとVirtualBoxを使用して、ホストとゲストの間でファイルを適切に共有する方法を見つけようとして、1週間半の間壁に頭をぶつけてきました。

私が達成する必要があるのは、githubからコードベースをダウンロードする自動プロビジョニングボックスです。コードベースのアクセス許可は、ファイルごとに異なる必要があります(PHPファイル、シェルスクリプト、tmpフォルダー、ログフォルダーなど)。コードベースファイルは、編集のためにホストボックスからアクセスできる必要もあります。

これまで、通常の仮想ボックス共有、NFS共有、bindFSを使用したNFS共有を試しました。これらのいずれも、個々のファイルのアクセス許可を変更することを許可していないようです。

これはVagrantにとって絶対的なショートッパーのようです。私は正直に言って、Vagrantが開発環境を共有する目的でどのように役立つのか理解していません。

誰かがこれを適切に設定する方法を知っていますか?それも可能ですか?

参考のために:

  • ホストOS:Ubuntu 12.04
  • ゲストOS:Debian 6(スクイーズ)
  • vagrant:1.2.2
  • VirtualBox:4.2.12
17
Andrew

これがあなたの質問に完全に答えるかどうかはわかりませんが、アプリケーションが共有フォルダシステムのディスクに書き込めないという問題があったため、Vagrantfileで以下を使用してr/wアクセスを許可しましたクライアント内からの共有ファイル。

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 
7
carbontwelve

ここにはいくつかの部分的な回答がありますが、この質問を見つけやすくするために、それらの部分的な回答を1つにまとめるさまざまな方法を試す必要がないようにしたいと思います。

これは私が使用しているものであり、私にとってはうまく機能しています。 <code>ブロック内でイタリックを使用することは困難または不可能であるため、変更するビットを<angled brackets>内に配置しました。

config.vm.synced_folder ".", "/var/www/vhosts/<project_name>", 
    id: "project",
    owner: <username>,
    group: <group_name>,
    mount_options: ["dmode=775,fmode=664"]

または、おそらく(使用しているCIFS/SMBのバージョンによって異なります):

    mount_options: ["dir_mode=775,file_mode=664"]

所有者とグループがない場合、Vagrantはconfig.ssh.username(ボックスの起動時)の値を所有者とグループとして使用します。上記のような構成を使用すると、VMにログインして、chgrpchownを使用しようとしても機能しないため、共有フォルダーに割り当てる所有者とグループを制御できます。

mount_optionsがないと、所有者とグループ(およびその他)に付与される権限を制御する方法がありません。これはVMであり、これらに777権限を使用しても問題ないと主張することもできますが、これは悪い習慣であり、注意しないと持ち運びが発生する可能性があるため、お勧めしません。それは本番環境に移行し、本番環境のセキュリティを弱めます。しかし、明らかに、私が使用した775664を好きなように変更することができます。それらが何を意味するのかわからない場合は、Googleの「Linuxファイルのアクセス許可」。

mount_options配列を区切るコンマの後にスペースを(習慣から)挿入することができます。しないでください。カンマでは機能しません。

idは、任意の名前にすることができます。

13
iconoclast

ゲストファイルシステムをホストと共有するように、Sambaサーバーなどをセットアップしてみましたか?

Vagrantに組み込まれている共有でも問題が発生したため、ゲストで必要な方法ですべてをセットアップしてから、単純なSamba共有をセットアップして、ユーザー、グループ、デフォルトのファイル作成マスクなどを強制しました。ただし、Windowsマシンなので、Sambaよりも優れた選択肢がある可能性があります...

私はubuntuゲストを持っていたので、セットアップは実行するのと同じくらい簡単でした

$ apt-get install samba

共有するフォルダごとに、次のような共有ブロックを/etc/samba/smb.confファイルに追加します。

[data]
    comment = Local Dev Server - /data
    path = /data
    browsable = yes
    guest ok = yes
    read only = no
    create mask = 0777
    force user = root
    force group = root
#[data] End
6
Matt Cooper

更新:下部にある http://docs.vagrantup.com/v2/synced-folders/basic_usage.html をもう一度見てください。例(ドキュメントからのコピーアンドペースト):

config.vm.synced_folder "src/", "/srv/website", owner: "root", group: "root"
4
Felix Rabe

synced folderを試しましたか?

私はしばらくの間Vagrant + VirtualBoxを使用しており、synced folderを使用してホストとVagrantVM間でコードを共有しています。

リンクは次のとおりです。

http://docs.vagrantup.com/v2/synced-folders/basic_usage.html

コード例は次のとおりです。

Vagrant.configure("2") do |config|
  config.vm.synced_folder "src/", "/srv/website"
end

少し背景

開発環境としてVirtualBoxをセットアップし、アプリケーションとホストデータベースサーバー、VM内のTomcatサーバーを実行します。 Hostで実行されているEclipseを使用して開発できるように、Syncedフォルダーを介してHostとVM)の間でコードを共有しています。

環境:Mac

0
Mingyu