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
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"
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.
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
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"
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
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.