vboxsf - Carpeta compartida en VirtualBox para Apache
virtualbox mount shared folder windows 10 (3)
En lighttpd
la solución es agregar la siguiente línea a lighttpd.conf
server.network-backend = "writev"
Ver: Lighttpd roto al servir desde la carpeta compartida de Virtualbox
Mi equipo host es ArchLinux y estoy ejecutando Apache en un invitado de CentOS. Tengo la configuración de vhost y todo el código del sitio en una carpeta compartida. Para poder poner la configuración de vhost en una carpeta compartida, monté la carpeta compartida como apache: apache.
shared /mnt/shared vboxsf defaults,uid=48,gid=48 0 0
Cuando estoy editando archivos en el host, Apache constantemente comenzará a enviar versiones anteriores del archivo con los caracteres finales. En vim, aparecen como ^ @, así que supongo que son caracteres nulos. La cantidad de caracteres nulos está relacionada con la cantidad de cambios que realizo, incluso si edito la primera línea, aparecen caracteres nulos al final. Si tuviera que especular, parece una mala diferencia.
Si dejo httpd
, umount
, volver a montar e iniciar httpd
el archivo se ve bien. Solo reiniciar httpd no ayuda.
¿Cómo voy a depurar la montura? Nada saltó hacia mí en /var/log
.
Estaba equivocado; estaba sucediendo en otro lado pero noté que solo estaba con los archivos .css y .js. Una búsqueda me llevó a esta publicación que habla sobre un problema con vboxsf y archivos pequeños.
La solución es establecer, en Apache
EnableSendfile off
Para responder a la pregunta específica "¿cómo debo proceder para depurar el montaje"?
(Lo siguiente es parafrasear, basado en una investigación que acabo de hacer, en un problema causado por el mismo error en Virtualbox, pero con un servidor web diferente)
Después de diagnosticar que el problema está sucediendo en algún lugar en la forma en que Apache lee los archivos dentro del host virtual, usaría "strace -p" dentro del host virtual para registrar las llamadas al sistema de Apache.
Mientras se hace el stracing, solicite solo el archivo truncado / corrupto.
Un diagnóstico cuidadoso revelará que está estableciendo correctamente el archivo para obtener su longitud. Y luego lo está sirviendo usando sendfile syscall. Básicamente, confirmar que sendfile se está comportando mal, lo que significa que debe ser un error en la máquina virtual.
La búsqueda de "sendfile virtualbox" lo lleva a estos errores.
https://www.virtualbox.org/ticket/9069 https://www.virtualbox.org/ticket/12597