質問: ### 前提・実現したいこと vagrantにcentos7を入れて、composerでcakephp3をインストールしようとしています。 プロジェクトのファイルを windowsのエクスプローラからatomなどを使って直接編集して、centos7のプロジェクト内に同期させたいと考えています。 ただ、vagrantfileのマウント場所に、プロジェクトをインストールしようとするも、どうしてもインストールエラーになります。 環境は、windows10,vagrant2.2.9,centos7.7,php7.4,cakephp3.9です。 ### 試したこと vagrantfileの中の同期設定で、 ``` # config.vm.synced_folder "../data", "/vagrant_data" config.vm.synced_folder "../data", "/home/vagrant" ``` と変えてみたところ、/home/vagrantではインストールできず 他のディレクトリ(/var/www/html/)で試してみたところ、インストールはできます。 そして、再びvagrantfileでマウント場所を(/var/www/html)に変えてみると、今度はそのプロジェクトは消えてしまいます。ただし、# vim hoge.txtなどと別のファイルを作り、共有することはできます。 そして、/var/www/htmlでプロジェクトを作ろうとすると以下のメッセージが流れます。 ``` Creating a "cakephp/app:^3.9" project at "./caketest01" Installing cakephp/app (3.9.0) - Installing cakephp/app (3.9.0): Loading from cache Created project in /var/www/html/caketest01 Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 83 installs, 0 updates, 0 removals - Installing cakephp/plugin-installer (1.2.0): Loading from cache Plugin installation failed (include(/var/www/html/caketest01/vendor/cakephp/plugin-installer/src/Installer/PluginInstaller.php): failed to open stream: No such file or directory), rolling back - Removing cakephp/plugin-installer (1.2.0) [RuntimeException] Could not delete /var/www/html/caketest01/vendor/cakephp/plugin-installer/s rc/Installer: create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [] [] [] ``` ### まとめ テキストエディタでCtrl + Sしたときに、linux上のcakephp3のファイルを上書きする方法でおすすめの方法を教えてください。
回答: 追記 `synced_folder` でマウントしたディレクトリーは Windows のディスクなのでシンボリックリンクを作成することができない他、 権限も規定では `777` となります 特にシンボリックリンクは PHP で使われることが多いので Composer のインストールが失敗する原因になりやすいです 自分の場合は、次のどちらかの対応を行っていました 選択 A: ファイルを絞って Windows からマウント シンボリックリンクなどが含まれたディレクトリーは Windows のディスク上で扱うことができませんので、 それ以外のファイルだけを Windows 上で管理するようにします PHP のプロジェクトによっては vendor ディレクトリーさえ Linux のディスクにしておけば 動作するものもあるので、その場合はこの方法を使います ただし、Linux のディスクにあるファイルを取り出すときは Windows 側の空のフォルダーを Linux 側のファイルのパスにマウントしても取り出せません マウントは既存のファイル・ディレクトリーを隠し、 マウントしたファイル・ディレクトリーを表示します Answer: Vagrant shared folders wipes all the contents in my folders Answer: What does Linux do with existing files in a mount point? mount(8): mount filesystem - Linux man page Linux 上のファイルを取り出すときは次のコマンドが役立ちます: ``` cp -ipr /path/to/source /path/to/destination ``` 選択 B: 仮想マシンのボリュームを Windows にマウント どうしてもシンボリックリンク等のファイルを扱う必要がある場合は Vagrant の `synced_folder` の利用を諦め、 `Samba` を使って Linux 側のディスクを Windows にマウントします Sambaの基本を知っておこう:基礎から理解するLinuxサーバーCent OS 7.0編 - @IT インストール手順は、次の Ansible コードが参考になります (Ansible が実行できなくても、読めばインストール手順としては参考になると思います) ansible-role-samba-amazon-linux/main.yml at master · yukihiko-shinoda/ansible-role-samba-amazon-linux 正しくインストールすれば、Samba のサービスが Linux 側で起動するので Windows 側で次のようにマウント・アンマウントします マウント: ``` net use Z: \\172.28.128.3\workspace /user:vagrant vagrant ``` アンマウント: ``` net use Z: /delete ``` WSL は未検証です 上記の知識は WSL 以前のものなので、 もしかすると WSL を使えば別の解決方法があるかもしれません 元の回答 ``` config.vm.synced_folder "../data", "/var/www/html" ``` この書式でマウントできるはずです > > vagrantfileでマウント場所を(/var/www/html)に変えてみると、 > > 今度はそのプロジェクトは消えてしまいます。 > > > Windows 側の `data` フォルダーの中が空にされてしまうということでしょうか? Vagrant 自体にはそのような処理はないはずなので、仮想マシンを起動するときに 次のコマンドで起動して何も起きず無事にマウントできるようにならないか確認してみてはいかがでしょうか? ``` vagrant up --no-provision ``` 上記のコマンドは、起動時のプロビジョニング処理を抑制します プロビジョニング処理の内容にもよりますが、 この処理で問題なくマウントできれば、プロビジョニング処理が想定外の動作をしていることになります vagrant up - Command-Line Interface | Vagrant by HashiCorp 仮想マシンに `GuestAdditions` はインストールしましたか? `GuestAdditions` がインストールされていないと ファイル共有は行なえません `vagrant-vbguest` をインストールしておくと、 自動的に `GuestAdditions` をインストールしてくれるので便利かもしれません dotless-de/vagrant-vbguest: A Vagrant plugin to keep your VirtualBox Guest Additions up to date ``` vagrant plugin install vagrant-vbguest ``` また、`vagrant up` や `vagrant reload` した際に、次のログは表示されましたか? ``` ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => C:/Users/Public/workspace/test-vagrant-287111 default: /var/www/html => C:/Users/Public/workspace/data ``` このログはフォルダーが正常にマウントされたことを示しています もし、このログが表示されていない場合は、 仮想マシンが起動した際になんらかのエラーが発生しているものと思われます その場合は、起動した際のメッセージを確認すると、原因を調べることができます