Skip to content

Instantly share code, notes, and snippets.

@chimmelb
Last active April 4, 2024 16:07
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save chimmelb/6342504893b2b9fce0f4a8efd096ae60 to your computer and use it in GitHub Desktop.
Save chimmelb/6342504893b2b9fce0f4a8efd096ae60 to your computer and use it in GitHub Desktop.
.ebextensions config file to load NodeJS EB instance with packages needed for Puppeteer/Chromium
# This is for ElasticBeanstalk with Amazon Linux 2023. For previous Linux 2 or Linux 1, see revisions for ideas
packages:
yum:
cups-libs: []
libdrm: []
libXdamage: []
libXfixes: []
libXrandr: []
mesa-libgbm: []
libxkbcommon: []
dbus-glib: []
libXrandr: []
libXcursor: []
libXinerama: []
cairo: []
cairo-gobject: []
pango: []
liberation-sans-fonts: []
libwayland-client: []
libwayland-cursor: []
gtk3: []
gdk-pixbuf2: []
libxkbcommon: []
libXScrnSaver: []
libpkgconf: []
atk: []
at-spi2-atk: []
at-spi2-core: []
alsa-lib: []
commands:
refresh-fonts:
command: |
fc-cache-64 -f -v
@hagi4u
Copy link

hagi4u commented Oct 2, 2018

Thank you!!!
I respect to your to spend a long time.

@SlootSantos
Copy link

@chimmelb how exactly is this going to fix the puppeteer issue?
I'd love to use this extension.. but for some reason it just doesn't work as I still get permission errors.
Do I have to set the "skip chromium installation" env-var?

@rsweny
Copy link

rsweny commented Nov 16, 2018

To fix the permission issue I put a .npmrc in the root of my project. The contents are:

# Force npm to install chrome also as root, preventing permission denied errors in AWS with npm
unsafe-perm=true

@nicolaslopezj
Copy link

CentOS mirror is giving 404 on 3 packages. I had to update the urls:

commands:
  atk:
    command: rpm -ivh --nodeps --replacepkgs http://mirror.centos.org/centos/7/os/x86_64/Packages/atk-2.28.1-1.el7.x86_64.rpm
  at-spi2-atk:
    command: rpm -ivh --nodeps --replacepkgs http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-atk-2.26.2-1.el7.x86_64.rpm
  at-spi2-core:
    command: rpm -ivh --nodeps --replacepkgs http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-core-2.28.0-1.el7.x86_64.rpm

@IhsanMujdeci
Copy link

Can confirm above fix by @rsweny works for elastic beanstalk install of pupetteer.

@giona69
Copy link

giona69 commented Aug 14, 2019

thank you so much it works great!!!

@javierjara
Copy link

Great

@RobDBob
Copy link

RobDBob commented Nov 1, 2019

Out of date, the atk-2.22.0-3.el7.x86_64.rpm no longer exists under URL. Nerveless, thank you for making the effort.
Updated files:
rpm -ivh --nodeps --replacepkgs http://mirror.centos.org/centos/7/os/x86_64/Packages/atk-2.28.1-1.el7.x86_64.rpm
rpm -ivh --nodeps --replacepkgs http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-atk-2.26.2-1.el7.x86_64.rpm
rpm -ivh --nodeps --replacepkgs http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-core-2.28.0-1.el7.x86_64.rpm

@alexbeletsky
Copy link

For those who are also looking the solution for "permission" issues of puppeteer npm module installation, here is another config for ebextentions.

npm.config

files:
  "/tmp/.npmrc":
    mode: "000777"
    owner: root
    group: root
    content: |
      //registry.npmjs.org/:_authToken=${NPM_TOKEN}
      unsafe-perm=true

You can remove //registry.npmjs.org/:_authToken=${NPM_TOKEN} line in case if you don't use any private/organizational packages.

@swebal
Copy link

swebal commented Jan 29, 2020

I'm installing via the ebextension script and have added the config files above.

Installation seems to work ok (no errors), but when calling puppeteer.launch (with any option), I get the following error:

(node:8305) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatk-bridge-2.0.so.0)

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatspi.so.0)

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: symbol lookup error:

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: undefined symbol: g_type_class_adjust_private_offset

I just can't understand how to solve this dependency issue, any help much appreciated!

@pawlarius
Copy link

I'm installing via the ebextension script and have added the config files above.

Installation seems to work ok (no errors), but when calling puppeteer.launch (with any option), I get the following error:

(node:8305) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process!

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatk-bridge-2.0.so.0)

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: /lib64/libdbus-1.so.3: no version information available (required by /usr/lib64/libatspi.so.0)

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: symbol lookup error:

/var/app/current/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux/chrome: undefined symbol: g_type_class_adjust_private_offset

I just can't understand how to solve this dependency issue, any help much appreciated!

having the same errors.. it seems from this thread puppeteer/puppeteer#5379, that is issues from puppeteer, and some people said using puppeteer@2.0.0 helps

@ayavilevich
Copy link

Another version change at the repository. had to update to:

commands:
  atk:
    command: rpm -ivh --nodeps --replacepkgs --replacefiles http://mirror.centos.org/centos/7/os/x86_64/Packages/atk-2.28.1-2.el7.x86_64.rpm

@chimmelb
Copy link
Author

chimmelb commented Sep 9, 2020

I just updated this gist for the versions that are currently working for me. Presumably they will become out of a date again.

@xehpuk
Copy link

xehpuk commented Oct 13, 2020

Doesn't work for me:

2020-10-13 22:17:41,853 [ERROR] -----------------------BUILD FAILED!------------------------
2020-10-13 22:17:41,853 [ERROR] Unhandled exception during build: Command libwayland-client failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 171, in <module>
    worklog.build(metadata, configSets)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 129, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 530, in build
    self.run_config(config, worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
    changes['commands'] = CommandTool().apply(self._config.commands)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
    raise ToolError(u"Command %s failed" % name)
ToolError: Command libwayland-client failed

Platform branch: Node.js 10 running on 64bit Amazon Linux 2
Current platform version: 5.2.2

@anthify
Copy link

anthify commented Jan 30, 2021

I can't get this to work as random packages fail install, and even when they don't packages are still required. The process of updating and deploying takes a while. Is there not a simpler more reliable way to do this?

My environment is EBS Amazon Linux 2 and Node 12.

@ValterSantosMatos
Copy link

Same here, not working anymore

@gerardhysa
Copy link

Doesn't work for me:

2020-10-13 22:17:41,853 [ERROR] -----------------------BUILD FAILED!------------------------
2020-10-13 22:17:41,853 [ERROR] Unhandled exception during build: Command libwayland-client failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 171, in <module>
    worklog.build(metadata, configSets)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 129, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 530, in build
    self.run_config(config, worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
    changes['commands'] = CommandTool().apply(self._config.commands)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
    raise ToolError(u"Command %s failed" % name)
ToolError: Command libwayland-client failed

Platform branch: Node.js 10 running on 64bit Amazon Linux 2
Current platform version: 5.2.2

Were you able to find a solution for this ? I am getting the same error

@chimmelb
Copy link
Author

We recently moved to Amazon Linux 2 and the upgrade had some changes for this config. (Revision 4)
Available Yum libs made it all a lot easier. I added the comments (prefixed with #) live in this gist, so if they break, remove them!
Linux (1) ideas are in the prior revisions.

@samueuh
Copy link

samueuh commented Jun 29, 2022

You are my hero! Thank you so much!

@raphaelsetin
Copy link

This worked with Node.js 16 running on 64bit Amazon Linux 2/5.5.6 🎉

Thank you!!

@falco467
Copy link

falco467 commented Dec 1, 2022

I found an easy way on Amazon Linux 2 is just:

packages: 
  yum:
    google-chrome-stable: []

This will install all required libraries with google chrome, even if you use the local installation from puppeteer afterwards.

Additionally I needed to configure the cache directory of puppeteer to a local directory, because how staging of new versions works on Elastic Beanstalk. Just put a .puppeteerrc.cjs in your project root:

const {join} = require('path');

/**
 * @type {import("puppeteer").Configuration}
 */
module.exports = {
  // Changes the cache location for Puppeteer.
  cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};

@SFaraji
Copy link

SFaraji commented Dec 8, 2022

@falco467 I'm facing the similar issue with Playwright package which cannot use due to dependencies issue. Please see my latest log which I raised in StackOverflow and if you can point me what I'm doing wrong. Thanks
https://stackoverflow.com/questions/74696909/error-in-aws-elastic-beanstalk-for-using-playwrightcrawler-package

@wojtekKrol
Copy link

And how do you install puppeter (in my case playwright)?

I tried with command

npx playwright install chromium but it throws error

@falco467
Copy link

@wojtekKrol
Exactly as @SFaraji wrote in his StackOverflow answer. You need to install playwright with EBCONFIG file:

 command: PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers npx playwright install

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment