Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

npm install errors on vagrant/homestead/windows: EPROTO: protocol error, symlink

Tags:

I'm building my first project in Laravel and trying to use Elixir, using homestead on Windows 8.1. I've hit the known npm/vagrant issue of too-long-path-names: https://harvsworld.com/2015/how-to-fix-npm-install-errors-on-vagrant-on-windows-because-the-paths-are-too-long/

So I made the one line edit recommended in that article (thank god for that guy), and then ran (with and without sudo): npm install --no-bin-links

It's moved me ahead so now I get two different kinds of errors: some 'Missing write access' errors, and a bunch of "EACCES" errors:

The error output gives me my next clue in the scavenger hunt (I think): Please try running this command again as root/Administrator

That brings me to this post, but the difference for me is there's no change even after I use sudo (or update my user permissions like so):

sudo chown -R $USER /usr/local

sudo chown -R $(whoami) ~/.npm

Update: then after the suggestion below I get EPROTO and EXTXTBSY errors (even after following the prompted suggestion to rename the npm-debug.log back: enter image description here

So I tried running gulp to see if it would give me clues, and error output had me do:

sudo npm rebuild node-sass 

Running that gives me the same EPROTO and ETXTBSY errors, and the npm-debug.log file shows: error EPROTO: protocol error, symlink '../node-sass/bin/node-sass' -> '/home/vagrant/Code/Family-laravel/node_modules/laravel-elixir/node_modules/gulp-sass/node_modules/.bin/node-sass'

Then after working on some other stuff for an hour I came back fresh and redid these steps, this time getting way fewer errors:

  • sudo npm -g install npm@latest (fine)

  • sudo npm install --no-bin-links (just the ETXTBSY error and an error in plugin 'run sequence', in task 'sass')

  • sudo npm rebuild node-sass --no-bin-links (no errors!)

  • gulp (just one error: not found: notify-send)

Getting closer!

like image 490
Diane Kaplan Avatar asked Oct 17 '15 11:10

Diane Kaplan


2 Answers

I have been trying to figure out this problem for weeks. Here is what I did to make it work without using my host environment:

I updated node to the latest version in homestead according to nodesource.com:

sudo apt-get install --yes nodejs curl --silent --location https://deb.nodesource.com/setup_4.x | sudo bash - 

I updated npm to the latest version in homestead. This should be done after updating node:

sudo npm -g install npm@latest 

I ran npm install in the laravel project directory. I also had to use force to get all of the dependencies to install:

sudo npm install --no-bin-links sudo npm cache clear sudo npm install --force --no-bin-links 

I rebuilt node-sass according to a gulp error:

sudo npm rebuild node-sass --no-bin-links 

During this whole process if something fails or after each install, i used:

sudo npm cache clear 

My host is windows 10, with latest virtualbox, latest vagrant, latest homestead. I used git bash as administrator and ssh into vagrant using git bash.

So far I have only tested and confirmed that my gulp works. It is possible that other dependencies need to be rebuilt.

Hope this helps!

like image 187
Adam Avatar answered Sep 24 '22 11:09

Adam


As many of you that are also setting up Homestead with Virtual Box...

After googling for a solution I decided to refer back to the Laravel Homestead documentation. Fortunately the solution was posted there:

https://laravel.com/docs/5.8/homestead#provider-specific-settings

You just need to add the following to your homestead Vagrantfile.

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| (...)     config.vm.provider "virtualbox" do |v|         v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]     end (...) end 

IMPORTANT

Don't forget to provision as an administrator.

homestead up --provision

enter image description here

like image 33
Daniel Teleginski Camargo Avatar answered Sep 25 '22 11:09

Daniel Teleginski Camargo