Vagrant es un Docker muy chulo, un virtualizador que nos permite desplegar aplicaciones y entornos seguros de forma que podemos empaquetar dichos entornos y desplegarlos rápida y sencillamente. La ventaja, igual que Docker, es que no metemos máquinas completas y si solo lo mínimamente necesario para que la aplicación pueda ejecutarse. Su instalación es muy sencilla y la creación de máquinas especificas, contenedores, aplicaciones también. Os recomiendo muy encarecidamente que visitéis su web para más información ya que es un campo muy interesante y actualmente es hacia donde tienden todos los ISPs.
Pero, ¿que pasa cuando la máquina se niega a arrancar?. Veamos una posible solución al error `read’: Is a directory @ io_fread – /etc/exports (Errno::EISDIR)
Si al ejecutar un vagrant up tras haber creado o inicializado una maquina, nos aparece un churro de errores al estilo (pongo un trozo):
[code]
…
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/action/runner.rb:66:in `run’
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:224:in `action_raw’
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:199:in `block in action’
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:561:in `lock’
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:185:in `call’
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/machine.rb:185:in `action’
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/batch_action.rb:82:in `block (2 levels) in run’
…
[/code]
Es recomendable que revisemos la primera linea del error, si tiene algo como:
[code]/opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/hosts/bsd/cap/nfs.rb:139:in `read’: Is a directory @ io_fread – /etc/exports (Errno::EISDIR)[/code]
O similar, dependiendo si lo habéis instalado via gems, pero donde lo importante es que el nfs.rb (de Ruby) intenta leer un archivo (el /etc/exports) y falla. Podréis ver si ese archivo en cuestión no es un archivo y si un directorio. En caso de ser un directorio es que esta mal y os recomiendo el siguiente parche para solucionarlo:
[code]
cat /etc/exports/nfs_exports | pbcopy
sudo rm -rf /etc/exports
sudo touch /etc/export
pbpaste | sudo tee /etc/exports
[/code]
Donde, lo que hemos hecho es sacar el contenido del fichero nfs_exports del directorio, eliminado el directorio como root y creado un fichero export con el contenido del fichero que teníamos.
Si tras eso, arrancamos la maquina vagrant veremos que funciona correctamente.
Principalmente esto sucede cuando en la maquina en cuestión (que suele ser un Unix o un sistema basado en Unix como OSX) habéis instalado o usado un virtualizador de «otra marca» que ha sido el encargado de crear el /exports/nfs_exports y lo ha dejado ahi.
Algunas aplicaciones, al detectar este fichero erroneo, simplemente pasan de el, mientras que para Vagrant, es necesario. De ahi que de el error.