読者です 読者をやめる 読者になる 読者になる

Vagrantのsynced_folderにはあまり期待してはいけない

Vagrant Ansible

そもそもなにがしたかったか

Vagrant + VirtualBoxで開発環境を作ろうとしていて、デフォルトのvagrantユーザで作業するのもアレなんでprovision(今回はansible_local)でユーザを作って、そのユーザのホームディレクトリをホストOSと共有したかった。

試したことと当たった問題

  1. config.vm.synced_folderowner, groupにユーザ名・グループ名を普通に指定。
    • id: magai: no such user
    • フォルダの同期→provisioningの順番なのか。
  2. provisioner側でmountする。
    • mounting failed with the error: Protocol errorとか言われる。
    • どうも、ホストOS側からVirtualBoxに指示(GUIなどから?)しないとホストOS側のパスが見えない? ちょっとここ原因が最後までわからなかった。
  3. 仕方ないので、synced_folderで、uid, gidで直接指定しつつ、provisioner側で、uid, gid指定でユーザ、グループを作成。
    • mount_optionsがおかしいのか、これも動かない。普通にvagrant:vagrantのままになっていた。

そして、解決しないままいろいろ試していて気付いたのだが、ホームディレクトリを共有するとなると、~/.ssh/なども共有することになるが、ご存知の通りこの辺パーミッションが厳密でないと動作しない。

なのにsynced_folderではディレクトリ・ファイルのパーミッションを1つ設定するだけで、細かいことはできないし、そもそもホームディレクトリを共有しても問題ばかりで駄目かなと。

あきらめた。

おまけ: 関連して引っかかった細かい問題

  1. Ansibleのmountモジュールのpathパラメータが、今回使ったバージョンのAnsibleではまだnameだった。
  2. Ansibleのsudo: yesがbecome: yesになっていた。
  3. Ansibleのuserモジュールにgidパラメータがなかった。issueは立っているので、今後修正されるかもだが、今はいちいちgidを指定してgroupを作ってから……と二度手間になる。

今後確認すること

  1. ユーザが存在する場合のみsynced_folderを設定する、ということはできないか?
  2. VirtualBoxの共有機能のパーミッション周りにはどれくらい制限があるか。