Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

npm install puppeteer showing permission denied errors

I'm unable to install puppeteer as a project dependency, and I've tried re-installing node. Anyone have an idea on how to fix this? Running Ubuntu 17.10 x64

sudo apt-get purge nodejs;
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -;
apt-get install -y nodejs;
sudo npm install -g n;
sudo n stable;

Node versions:

$ node -v
v9.4.0
$ npm -v
5.6.0

I try to install:

root@server:/var/www/html# npm install --save puppeteer

Error message:

> [email protected] install /var/www/html/node_modules/puppeteer
> node install.js

ERROR: Failed to download Chromium r536395! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
{ Error: EACCES: permission denied, mkdir '/var/www/html/node_modules/puppeteer/.local-chromium'
  errno: -13,
  code: 'EACCES',
  syscall: 'mkdir',
  path: '/var/www/html/node_modules/puppeteer/.local-chromium' }
npm WARN [email protected] No description

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-02-19T15_55_52_669Z-debug.log

I don't see any ways to fix this in the referenced issue: https://github.com/GoogleChrome/puppeteer/issues/375

like image 339
d-_-b Avatar asked Feb 19 '18 15:02

d-_-b


People also ask

What is NPM puppeteer?

Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium. Get started # Overview of Puppeteer.


1 Answers

EDIT 20th April 2019:

The easy solution suggested by lauraalvarezz1 is,

sudo npm install -g puppeteer --unsafe-perm=true

This is okay as long as you trust puppeteer and want it to install puppeteer globally.

However beware of using --unsafe-perm=true for permission related problems. Reasons are:

  • Running unsafe-perm=true with sudo, as a non-root user, will give the script root access. This might be okay only if you trust the script and do not concern about security that much.
  • You might need to use --no-sandbox in every script you run, because the chrome installed with this command might not run without this parameter. See this github issue.

You have installed npm with sudo. Thus anything you install globally will require sudo.

To install anything on var/www/html folder, either you have to own that folder,

sudo chown -R $USER /var/www/html

Or you can use nvm to manage npm. Technically it will use your home directory and your current user.

After installing nvm, you can install puppeteer globally with it,

npm i -g puppeteer

or you have to use sudo

sudo npm install --save puppeteer

However chromium will not be downloaded due to permission error, that's why you have to use ---unsafe-perm=true as stated before.

Security Related Resources:

  • Resolve this without sudo, you can use this answer.
  • Learn more about best practices dealing with /var/www folder, refer to this answer.

Best of luck!

like image 174
Md. Abu Taher Avatar answered Oct 29 '22 23:10

Md. Abu Taher