Vagrant: est-il possible de partager des fichiers et de modifier les permissions à l'intérieur de l'invité?

je me cogne la tête contre un mur depuis une semaine et demie en essayant de trouver comment partager correctement des fichiers entre un hôte et un invité en utilisant Vagrant et VirtualBox.

ce que je dois réaliser est une boîte d'auto-approvisionnement qui télécharge notre base de code de github. Les permissions de codebase doivent varier d'un fichier à l'autre (fichiers PHP, scripts shell, dossiers tmp, dossiers log, etc.). Les fichiers codebase doivent également être accessibles depuis la boîte d'hôte pour être édités.

Donc jusqu'à présent, j'ai essayé le partage virtualbox, le partage NFS, le partage NFS avec bindFS. Aucun de ceux-ci ne semble permettre de modifier les permissions individuelles des fichiers.

cela semble être un showstopper absolu pour les vagabonds. Honnêtement, je ne comprends pas comment Vagrant est utile dans le but de partager les environnements de développement.

est ce que quelqu'un sait comment configurer correctement? Est-il même possible?

référence:

  • OS hôte: Ubuntu 12.04
  • OS invité: Debian 6 (squeeze)
  • errant: 1.2.2
  • VirtualBox: 4.2.12
16
demandé sur Andrew 2013-07-04 07:45:05

6 réponses

Je ne suis pas sûr si cela répond tout à fait à votre question, mais j'ai eu des problèmes avec mes applications ne pouvant pas écrire sur le disque sur un système de dossiers partagés donc j'ai utilisé ce qui suit dans mon Vagrantfile pour permettre l'accès R / w à tous les fichiers partagés à partir du client.

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777" 
7
répondu carbontwelve 2013-10-02 21:45:51

il y a plusieurs réponses partielles ici, mais j'aimerais que ce soit beaucoup plus facile pour les gens qui trouvent cette question, afin qu'ils n'aient pas à expérimenter diverses façons de combiner ces réponses partielles en une seule.

C'est ce que j'utilise, et il fonctionne bien pour moi. Puisqu'il est difficile ou impossible d'utiliser l'italique à l'intérieur d'un <code> bloc, j'ai mis les morceaux que vous aurez envie de changement à l'intérieur de <angled brackets>.

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

Ou éventuellement (selon la version de CIFS/SMB que vous utilisez):

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

sans le propriétaire et le groupe, Vagrant utilisera la valeur de config.ssh.username (quand la boîte a été démarrée) comme le propriétaire et le groupe. En utilisant une configuration comme celle ci-dessus, vous pouvez contrôler quel propriétaire et quel groupe sont assignés au dossier partagé, depuis la connexion dans la VM et en essayant d'utiliser chgrp et chown ne fonctionne pas.

Sans mount_options, vous n'aurez aucun moyen de contrôler les droits conférés au propriétaire et au groupe (et d'autres). Même si c'est une VM, et on pourrait dire que c'est correct d'utiliser 777 droits pour ceux-ci, je ne le recommande pas car c'est une mauvaise habitude, et si vous ne faites pas attention, vous risquez de le reporter à la production, affaiblissant votre sécurité de production. Mais évidemment vous pouvez changer le 775 et 664 que j'ai utilisé tout ce que vous voulez. Si vous ne savez pas ce que cela signifie, Google "Permissions de fichiers Linux".

Vous pouvez (par habitude) insérer un espace après la virgule qui sépare l' mount_options array. Ne le fais pas. Ça ne marchera pas avec une virgule.

id peut être tout ce que vous voulez.

13
répondu iconoclast 2014-12-09 19:35:48

Avez-vous essayé de configurer un serveur Samba ou quelque chose de similaire, de sorte que vous partagez l'invité du système de fichiers avec l'hôte, plutôt que l'inverse?

j'ai rencontré des problèmes avec le partage intégré dans Vagrant, donc j'ai juste configuré tout ce que je voulais sur l'invité et ensuite j'ai configuré un simple partage de Samba pour forcer l'utilisateur, le groupe et le masque de création de fichier par défaut, etc. C'était de travailler avec une machine Windows, mais il pourrait être un meilleur choix que De la Samba...

j'ai eu une ubuntu invité donc l'installation est tout aussi simple que de courir

$ apt-get install samba

Ajouter un bloc de partage pour chaque dossier que vous voulez partager dans le /etc/samba/smb.conf fichier, quelque chose comme:

[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
répondu Matt Cooper 2013-07-04 14:21:57

mise à Jour: jetez un oeil à http://docs.vagrantup.com/v2/synced-folders/basic_usage.html encore une fois, au fond. Exemple (copier-n-coller à partir de google documents):

config.vm.synced_folder "src/", "/srv/website", owner: "root", group: "root"
4
répondu Felix Rabe 2013-08-20 18:44:56

Avez-vous essayé synced folder?

J'utilise Vagrant + VirtualBox depuis un moment, et nous utilisons le synced folder pour partager le code entre l'hôte et la VM vagabonde.

Voici un lien:

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

Voici un exemple de code:

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

Un peu de fond

nous configurons VirtualBox comme notre environnement de développement, et nous exécutons notre l'application, et l'hôte du serveur de base de données, serveur d'application Tomcat à l'intérieur de la VM. Nous avons notre code partagé entre l'hôte et la VM via un dossier synchronisé pour que nous puissions développer en utilisant Eclipse qui tourne sur l'hôte.

Environnement: Mac

0
répondu Mingyu 2014-04-16 19:53:03

vous pouvez essayer de copier le codebase à partir du dossier partagé dans un dossier propre à la machine invitée, disons à partir de /vagrant/codebase/codebase. Une fois que vous obtenez les fichiers dans l'ordinateur invité, vous pouvez chown comme normal. Ce n'est pas l'idéal, mais vous pouvez écrire un script simple à exécuter chaque fois que vous modifiez le code de l'hôte. Vous pouvez également essayer un script de démarrage qui copie dans n'importe quel fichier lorsque la VM démarre, en fonction de la fréquence à laquelle vous avez besoin de mettre à jour les fichiers.

-1
répondu bfitzpatrick 2013-07-08 17:07:05