npm install and permissions
# The problem
While working on the CI script for notes.alex-mille.co, I ran into a permissions problem when installing the netlify-cli.
sudo npm install netlify-cli -g
> esbuild@0.11.18 postinstall /usr/local/lib/node_modules/netlify-cli/node_modules/esbuild > node install.js Trying to install "esbuild-linux-64" using npm Failed to install "esbuild-linux-64" using npm: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/esbuild-pwn6zf0scfg' Trying to download "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.11.18.tgz" /usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/install.js:195 throw e; ^ Error: EACCES: permission denied, open '/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/bin/esbuild__' at Object.openSync (fs.js:476:3) at Object.writeFileSync (fs.js:1467:35) at installBinaryFromPackage (/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/install.js:58:6) at processTicksAndRejections (internal/process/task_queues.js:93:5) { errno: -13, syscall: 'open', code: 'EACCES', path: '/usr/local/lib/node_modules/netlify-cli/node_modules/esbuild/bin/esbuild__' }
So it looks like the error is being thrown from a postinstall script for esbuild
.
# The solution
Make the npm scripts run in the same context as the originally command (ie,
no user switching). To do this use the --unsafe-perm
flag.
sudo npm install netlify-cli -g --unsafe-perm=true
See these posts for more details: