我一直遇到Vagrant机器的常见错误,并且npm
文件系统突然变为只读.在所有情况下,都涉及包含git repo的同步目录.
这是我能够遇到问题的配置设置.这两个文件都位于像面向节点-git仓库的根这一个.
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Use host's SSH keys config.ssh.forward_agent = true # Get current directory name (presumably, repo dirname) repo_dirname = File.basename(Dir.getwd) # Set US locale ENV['LC_ALL']="en_US.UTF-8" # Ensures virtualbox can create symlinks in shared folders config.vm.provider "virtualbox" do |vb| vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"] end # Forward usual dev port through to host machine config.vm.network :forwarded_port, guest: 3000, host: 3000 # Also forward production port just in case config.vm.network :forwarded_port, guest: 80, host: 8080 # Forward a folder for the repo so that code can be worked on from outside the # VM as usual config.vm.synced_folder ".", "/home/ubuntu/#{repo_dirname}", create: true config.vm.define "#{repo_dirname}-vm" do |repo_vm| repo_vm.vm.box = "ubuntu/xenial64" repo_vm.vm.host_name = "#{repo_dirname}-vm" repo_vm.vm.provision :shell do |sh| sh.path = "vagrant_provision.sh" sh.privileged = false sh.env = { REPO_DIR: repo_dirname } end end end
#!/usr/bin/env bash function set_locale() { sudo locale-gen en.US } function get_builds() { sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y curl build-essential } function get_n_installer() { if [ -f n-install ] then echo "n installer already exists. Not downloading." return 0 else echo "n installer not found. Downloading..." wget -L https://git.io/n-install fi } function install_n() { if [ -d "n" ] then echo "n install directory already exists. Not installing." return 0 else echo "n install directory not found. Installing..." yes | bash n-install fi } function add_github_keys() { # Adds the github server key to known hosts ssh-keyscan github.com >> ~/.ssh/known_hosts && return 0 || return 1 } function add_n_to_path() { # Added by n-install, but ignored by vagrant export N_PREFIX="$HOME/n"; [[ :$PATH: == *":$N_PREFIX/bin:"* ]] || PATH+=":$N_PREFIX/bin" } function get_repo() { if [ -d "$2" ] then echo "Destination directory $2 already exists. Deleting contents..." rm -rfv ./$2 fi echo "Cloning $1 into $2..." git clone $1 $2 } function install_npm_deps() { echo "Installing npm dependencies..." npm install } function rebuild_node_sass() { # Needed because of https://github.com/sass/node-sass/issues/1579 npm rebuild node-sass } # . ~/.bashrc && set_locale && add_github_keys && get_builds && get_n_installer && install_n && add_n_to_path && cd $REPO_DIR && install_npm_deps && rebuild_node_sass && echo "Provisioned user is: $USER" && echo "Frontend provisioned. To run, type 'vagrant ssh'."
似乎导致问题的主要步骤是npm install
由非特权提供者执行.有时会发生存档解包错误,但有时,npm会因ENOENT错误而失败.
登录vagrant ssh
以完成作业后,将显示只读文件系统错误.尽管如此,系统上仍有足够的空间(例如,8GB中剩余7个).
当webpack服务器在相同的情况下运行时,也会出现只读文件系统错误.
引用类似错误的问题和票据,但我没有看到任何探索底层机制是什么.这是怎么回事?