virtualbox vagrant nfs

virtualbox - Vagrant: ¿Es posible compartir archivos y alterar permisos dentro del invitado?



nfs (6)

He estado golpeando mi cabeza contra una pared durante una semana y media, tratando de averiguar cómo compartir correctamente los archivos entre un anfitrión y un huésped utilizando Vagrant y VirtualBox.

Lo que necesito lograr es un cuadro de autoaprovisionamiento que descargue nuestro código base de github. Los permisos de la base de código deben variar de un archivo a otro (archivos PHP, scripts de shell, carpetas tmp, carpetas de registro, etc.). Los archivos de código base también deben estar accesibles desde el cuadro de host para editarlos.

Hasta ahora he intentado compartir normalmente con virtualbox, compartir NFS, compartir NFS con bindFS. Ninguno de estos parece permitir cambiar los permisos de archivos individuales.

Esto parece ser un showstopper absoluto para Vagrant. Sinceramente, no entiendo cómo Vagrant es útil para compartir entornos de desarrollo.

¿Alguien sabe cómo configurar esto correctamente? ¿Es incluso posible?

Para referencia:

  • sistema operativo host: Ubuntu 12.04
  • SO invitado: Debian 6 (apretar)
  • vagabundo: 1.2.2
  • VirtualBox: 4.2.12

¿Ha intentado configurar un servidor Samba o algo similar para que esté compartiendo el sistema de archivos invitado con el host en lugar de al revés?

También tuve problemas con el uso compartido integrado en Vagrant, así que simplemente configuré todo lo que quería en el invitado y luego configuré un recurso compartido Samba simple para forzar al usuario, el grupo y la máscara de creación de archivos predeterminada, etc. una máquina con Windows aunque podría haber una mejor opción que Samba ...

Tuve un invitado de Ubuntu, así que la instalación fue tan simple como correr

$ apt-get install samba

Agregue un bloque compartido para cada carpeta que desee compartir en el archivo /etc/samba/smb.conf , algo como:

[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


¿Has synced folder ?

He estado usando Vagrant + VirtualBox por un tiempo, y usamos la synced folder para compartir el código entre el host y Vagrant VM.

Aquí hay un enlace:

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

Aquí hay un ejemplo de código:

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

Un poco de fondo

Configuramos el VirtualBox como nuestro entorno de desarrollo, y ejecutamos nuestra aplicación y el servidor de la base de datos host, el servidor Tomcat dentro de la máquina virtual. Tenemos nuestro código compartido entre el host y la VM a través de la carpeta Synced para que podamos desarrollar el uso de Eclipse que se ejecuta en el host.

Ambiente: Mac



Aquí hay varias respuestas parciales, pero me gustaría facilitar las cosas a las personas que encuentran esta pregunta, para que no tengan que experimentar con varias formas de combinar esas respuestas parciales en una sola.

Esto es lo que uso, y está funcionando bien para mí. Dado que es difícil o imposible utilizar cursivas dentro de un bloque <code> , he puesto los bits que desea cambiar dentro 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"]

O posiblemente (dependiendo de la versión de CIFS / SMB que estés usando):

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

Sin el propietario y el grupo, Vagrant usará el valor de config.ssh.username (cuando se inició el cuadro) como propietario y grupo. Al utilizar una configuración como la anterior, puede controlar qué propietario y grupo están asignados a la carpeta compartida, ya que iniciar sesión en la máquina virtual y tratar de usar chgrp y chown no funciona.

Sin las mount_options , no tendrá forma de controlar qué derechos se otorgan al propietario y al grupo (y otros). Aunque se trata de una máquina virtual, y podría argumentar que está bien usar los derechos de 777 para estos, no lo recomiendo ya que es un mal hábito y, si no tiene cuidado, es probable que lo lleve a producción. , debilitando su seguridad de producción. Pero obviamente puedes cambiar el 775 y el 664 que solía usar para lo que quieras. Si no sabes lo que significan, Google "permisos de archivo de Linux".

Puede (por costumbre) insertar un espacio después de la coma que separa la matriz mount_options . No lo hagas No funcionará con una coma.

El id puede ser lo que quieras.


Puede intentar copiar el código base de la carpeta compartida en una carpeta específica de la máquina invitada, por ejemplo, desde /vagrant/codebase a /codebase . Una vez que haya ingresado los archivos en la máquina invitada, puede chown como de costumbre. No es lo ideal, pero podría escribir un script simple para ejecutarlo cada vez que modifique el código desde el lado del host. También puede probar un script de inicio que se copie en cualquier archivo cuando se inicie la máquina virtual, según la frecuencia con la que necesite actualizar los archivos.


No estoy seguro de si esto responde bastante a su pregunta, pero tuve problemas con mis aplicaciones al no poder escribir en el disco en un sistema de carpetas compartidas, así que usé lo siguiente en mi Vagrantfile para permitir el acceso de r / w a cualquier archivo compartido desde dentro el cliente.

config.vm.synced_folder "./vhosts/", "/var/www/vhosts/", id: "vagrant-root", extra: "dmode=777,fmode=777"