J'utilise vagrant et chef pour développer mon propre blog dans une machine virtuelle. Pour avoir un accès facile au dossier wordpress, j'ai créé un dossier partagé.
Fondamentalement, le dossier wordpress est sur mon hôte et est monté en tant que dossier partagé dans/var/www/wordpress dans la machine virtuelle. La configuration est similaire à:
config.vm.share_folder "foo", "/guest/path", "/Host/path"
Mon problème est que la propriété de ma VM est toujours vagrant:vagrant
même si je la change sur mon hôte. Les modifications de propriété dans VM sont ignorées.
Je ne peux pas utiliser chown
pour définir la propriété du répertoire de téléchargement sur www-data:www-data
.
Il est possible d’utiliser chmod
et de changer les restrictions d’accès en 777
, mais c’est un hack vraiment moche.
Voici ce que je veux réellement. Est-ce possible?:
Comme @StephenKing le suggère, vous pouvez modifier les options de tout le répertoire.
La fonction pertinente n'est pas documentée mais la source nous dit:
# File 'lib/vagrant/config/vm.rb', line 53
def share_folder(name, guestpath, hostpath, opts=nil)
@shared_folders[name] = {
:guestpath => guestpath.to_s,
:hostpath => hostpath.to_s,
:create => false,
:owner => nil,
:group => nil,
:nfs => false,
:transient => false,
:extra => nil
}.merge(opts || {})
end
En gros, vous pouvez définir group, owner et acl pour l’ensemble du dossier, ce qui est bien mieux que de tout définir en mode écriture sur l’hôte. Je n'ai trouvé aucune méthode pour changer la propriété d'un répertoire imbriqué.
Voici un correctif:
config.vm.share_folder "v-wordpress", "/var/www/wordpress", "/Host/path", :owner => "www-data", :group => "www-data"
@ john-syrinek
dans 1.2+
config.vm.synced_folder "src/", "/srv/website",
owner: "root", group: "root"
http://docs.vagrantup.com/v2/synced-folders/basic_usage.html
Vous pouvez autoriser la modification de la propriété à l'intérieur de l'invité:
config.vm.share_folder "foo", "/guest/path", "/Host/path", {:extra => 'dmode=777,fmode=777'}
Pour faire suite aux astuces géniales de @StephenKing et de @aycokoster, je disposais d'un cas d'utilisation pour monter un autre répertoire en lecture seule.
J'ai ajouté
config.vm.share_folder "foo", "/guest/path", "/Host/path", :extra => 'ro'
et
# discard exit status because chown `id -u vagrant`:`id -g vagrant` /Host/path is okay
vagrant up || true
Comme indiqué dans les autres réponses, vous devez probablement définir le bon propriétaire et le bon groupe à l'aide des options de configuration owner
et group
.
Cependant, cela peut parfois ne pas fonctionner (par exemple, lorsque l'utilisateur cible est créé ultérieurement, uniquement lors de la mise en service). Dans ces cas, vous pouvez remonter le partage:
Sudo mount -t vboxsf -o uid=`id -u www-data`,gid=`id -g www-data` /path/to/share /path/to/share