Cypress: Alpine Linux support

Created on 9 Feb 2017  路  28Comments  路  Source: cypress-io/cypress

I don't know if this is even possible but I was wondering if there are any plans to support Alpine Linux.

I don't know if it's helpful but here's an ldd on the Cypress executable from within Alpine:

root@6b425a4f775a[~/.cypress/Cypress] $ ldd ./Cypress 
    /lib64/ld-linux-x86-64.so.2 (0x5603ddf7c000)
    libnode.so => ./libnode.so (0x7f37b4b22000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x5603ddf7c000)
    libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0x7f37b4557000)
    libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x7f37b42b5000)
    libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x7f37b4092000)
    libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x7f37b3d29000)
    libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x7f37b3b1d000)
    libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x7f37b3900000)
    libcairo.so.2 => /usr/lib/libcairo.so.2 (0x7f37b361b000)
    libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x7f37b33d8000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x7f37b3133000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x7f37b2ef7000)
    libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x7f37b2cb7000)
    libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x7f37b2a71000)
    libXi.so.6 => /usr/lib/libXi.so.6 (0x7f37b2862000)
    libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x7f37b2658000)
    libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x7f37b2455000)
    libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x7f37b224b000)
    libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x7f37b2048000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x7f37b1e38000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x7f37b1c32000)
    libXrender.so.1 => /usr/lib/libXrender.so.1 (0x7f37b1a28000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x7f37b1705000)
    libXtst.so.6 => /usr/lib/libXtst.so.6 (0x7f37b14ff000)
    libXss.so.1 => /usr/lib/libXss.so.1 (0x7f37b12fc000)
    libgconf-2.so.4 => /usr/lib/libgconf-2.so.4 (0x7f37b10c4000)
    libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x7f37b0ec0000)
    librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x5603ddf7c000)
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x7f37b0bd1000)
    libnss3.so => /usr/lib/libnss3.so (0x7f37b08a8000)
    libnssutil3.so => /usr/lib/libnssutil3.so (0x7f37b067a000)
    libsmime3.so => /usr/lib/libsmime3.so (0x7f37b0453000)
    libnspr4.so => /usr/lib/libnspr4.so (0x7f37b0214000)
    libffmpeg.so => ./libffmpeg.so (0x7f37afe3d000)
    libasound.so.2 => /usr/lib/libasound.so.2 (0x7f37afb4b000)
    libcups.so.2 => /usr/lib/libcups.so.2 (0x7f37af8d3000)
    libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x5603ddf7c000)
    libexpat.so.1 => /usr/lib/libexpat.so.1 (0x7f37af6b3000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f37af362000)
    libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x5603ddf7c000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f37af150000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x5603ddf7c000)
    ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x7f37aeec3000)
    libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x7f37aecaf000)
    libintl.so.8 => /usr/lib/libintl.so.8 (0x7f37aeaa1000)
    libz.so.1 => /lib/libz.so.1 (0x7f37ae88b000)
    libmount.so.1 => /lib/libmount.so.1 (0x7f37ae64a000)
    libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x7f37ae3ba000)
    libpng16.so.16 => /usr/lib/libpng16.so.16 (0x7f37ae18d000)
    libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x7f37adf89000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x7f37add63000)
    libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x7f37adb55000)
    libbz2.so.1 => /usr/lib/libbz2.so.1 (0x7f37ad948000)
    libffi.so.6 => /usr/lib/libffi.so.6 (0x7f37ad740000)
    libORBit-2.so.0 => /usr/lib/libORBit-2.so.0 (0x7f37ad4d9000)
    libpcre.so.1 => /usr/lib/libpcre.so.1 (0x7f37ad27d000)
    libplc4.so => /usr/lib/libplc4.so (0x7f37ad078000)
    libplds4.so => /usr/lib/libplds4.so (0x7f37ace74000)
    libgnutls.so.30 => /usr/lib/libgnutls.so.30 (0x7f37acb60000)
    libavahi-common.so.3 => /usr/lib/libavahi-common.so.3 (0x7f37ac954000)
    libavahi-client.so.3 => /usr/lib/libavahi-client.so.3 (0x7f37ac745000)
    libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x7f37ac4f7000)
    libblkid.so.1 => /lib/libblkid.so.1 (0x7f37ac2bc000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x7f37ac0b9000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x7f37abeb3000)
    libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x7f37abc57000)
    libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x7f37aba47000)
    libnettle.so.6 => /usr/lib/libnettle.so.6 (0x7f37ab813000)
    libhogweed.so.4 => /usr/lib/libhogweed.so.4 (0x7f37ab5e0000)
    libgmp.so.10 => /usr/lib/libgmp.so.10 (0x7f37ab37c000)
    libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x7f37ab15c000)
    libuuid.so.1 => /lib/libuuid.so.1 (0x7f37aaf58000)
Error relocating ./libnode.so: __isinf: symbol not found
Error relocating ./libnode.so: __rawmemchr: symbol not found
Error relocating ./libnode.so: __isnan: symbol not found
Error relocating ./libnode.so: backtrace: symbol not found
Error relocating ./libffmpeg.so: __isnan: symbol not found
Error relocating ./libffmpeg.so: __isinf: symbol not found
Error relocating ./Cypress: __sbrk: symbol not found
Error relocating ./Cypress: __isnan: symbol not found
Error relocating ./Cypress: __res_ninit: symbol not found
Error relocating ./Cypress: __finite: symbol not found
Error relocating ./Cypress: backtrace: symbol not found
Error relocating ./Cypress: __isinf: symbol not found
Error relocating ./Cypress: backtrace_symbols: symbol not found
Error relocating ./Cypress: getcontext: symbol not found
Error relocating ./Cypress: __res_nclose: symbol not found
Error relocating ./Cypress: __cmsg_nxthdr: symbol not found
Error relocating ./Cypress: __libc_stack_end: symbol not found
linux electron pkelectron ready for work

Most helpful comment

Hi all. Can someone offer the latest update on whether or not there is currently support for latest Alpine Linux? Any progress?

All 28 comments

I had the same issue... Yeah, it looks like Cypress needs to be built against musl libc instead of glibc. I guess we would need to wait for a new build.

This likely has to do with electron and not necessarily Cypress.

It may be easier opening an issue over there https://github.com/electron/electron/issues and ask about what it will take to build Chromium against Alpine.

It may already be possible, so any direction here would be helpful and we can look at adding a new dist when we release.

This is a year old. -_-

Also would like this

I spent some time looking into this yesterday, and could not get all the required libraries work on Alpine. If anyone can actually build Electron on Alpine Linux, then we could potentially setup a CI chain that builds Alpine-specific Cypress version, but I expect the demand to be pretty low

I am going to close this for now, because Electron itself has their Alpine Linux build issue open https://github.com/electron/electron/issues/2727 (opened in 2015). If that issue is resolved successfully, we can revisit Alpine Linux support.

It appears that Electron 3 no longer depends on gconf. Could this issue be reopened?

It's been two years.
Any way to support cypress work with alpine linux?

This issue will be covered as part of our 4.0 release - which includes upgrading Electron.

Hello,

Any news about this issue?
I've just started setting up my CI/CD pipeline and since we're using node:alpine for our Dockerfile, I'm also using it for Gitlab CI, which has led me right here ;-)

Hello,

Any news about this issue?
I've just started setting up my CI/CD pipeline and since we're using node:alpine for our Dockerfile, I'm also using it for Gitlab CI, which has led me right here ;-)

maybe you can try frolvlad/alpine-glibc image

@dsebastien A lot of us are waiting for this still. As a workaround I only run tests using cypress in the cypress node image and everything else in alpine images. I'll just swap the cypress node image afterwards with the appropriate image later.

Hi guys, I tried installing cypress via npm on alpine linux and ended up with:

image

I got the /usr/lib/libasound.so.2 from:

  • RUN apk add --no-cache alsa-lib
  • RUN apk add --no-cache alsa-lib-dev (header files)

My first run was with alpine:3.10 but that did not get me anywhere. So I used this image: frolvlad/alpine-glibc:alpine-3.9_glibc-2.29

Would it be an option to clone the git repo and just completely build Cypress against musl or is the problem with my libasound 2 library?

Tried building on alpine linux and can confirm that my main problem is this error:

/usr/lib/libasound.so.2: no version information available (required by /home/root/cypress/build/linux/Cypress/Cypress)

image

StackOverflow answer

Quote: Chris => The "no version information available" means that the library version number is lower on the shared object. For example, if your major.minor.patch number is 7.15.5 on the machine where you build the binary, and the major.minor.patch number is 7.12.1 on the installation machine, ld will print the warning.

Alsa-libs APKBUILD for alpine contains this statement: --without-versioned and thus it might cause 'no version information available' error. But that is just an hypothesis.

Anybody got an idea to resolve this issue?

UPDATE:

I manually build alsa-lib to fix the version error with shared library /usr/lib/libasound.so.2 . Building without the --without-versioned solved the problem.

Unfortunately the following error still appears and make the build fail: Relink `/usr/lib/libgmp.so.10' with `/usr/glibc-compat/lib/libc.so.6' for IFUNC symbol `memset'

image

Installing thealsa-lib package (alpine 3.10) I didn't have any ALSA issue

I have installed the following packages using apk:

  • chromium
  • xvfb
  • gtk+3.0-dev
  • libnotify
  • gconf
  • nss
  • libxscrnsaver
  • alsa-lib
  • xkbcomp
  • glibc-2.30-r0.apk (downloaded from sgerrand/alpine-pkg-glibc)

鈩癸笍Command cypress verify fail when it comes to load libgobject-2.0.so.0

鈩癸笍Other _mislinked_ libraries (found with ldd)

  • __isnan: symbol not found
  • __isinf: symbol not found
  • strtoll_l: symbol not found
  • strtoull_l: symbol not found
  • __sbrk: symbol not found
  • __res_nclose: symbol not found
  • __res_ninit: symbol not found
  • __vsnprintf_chk: symbol not found
  • __isnanf: symbol not found
  • __isnan: symbol not found
  • __isinf: symbol not found
  • __longjmp_chk: symbol not found
  • strtoll_l: symbol not found
  • strtoull_l: symbol not found
  • __fdelt_chk: symbol not found
  • backtrace: symbol not found
  • __strncat_chk: symbol not found
  • __fprintf_chk: symbol not found
  • __sprintf_chk: symbol not found
  • initstate_r: symbol not found
  • random_r: symbol not found
  • __strcat_chk: symbol not found
  • __isinff: symbol not found
  • __vfprintf_chk: symbol not found
  • __snprintf_chk: symbol not found
  • gnu_get_libc_version: symbol not found
  • __register_atfork: symbol not found
  • __longjmp_chk: symbol not found

This is as far as I could get with Alpine 3.10 and Cypress (base image being php:7.3.8-fpm-alpine3.10 )

Hello,

Any news about this issue?
I've just started setting up my CI/CD pipeline and since we're using node:alpine for our Dockerfile, I'm also using it for Gitlab CI, which has led me right here ;-)

Xvfb package enables you to run graphical applications without a display (e.g., browser tests on a CI server) so cypress needs xvfb package to be installed.

It is not going to work on node:alpine image as the xvfb package is not present.

Running on markadams/chromium-xvfb-js docker image fixed the issue for me.

Hello,
Any news about this issue?
I've just started setting up my CI/CD pipeline and since we're using node:alpine for our Dockerfile, I'm also using it for Gitlab CI, which has led me right here ;-)

Xvfb package enables you to run graphical applications without a display (e.g., browser tests on a CI server) so cypress needs xvfb package to be installed.

It is not going to work on node:alpine image as the xvfb package is not present.

Running on markadams/chromium-xvfb-js docker image fixed the issue for me.

@Prabhakar-17 markadams/chromium-xvfb-js is not based on alpine

@ffxluca

Installing thealsa-lib package (alpine 3.10) I didn't have any ALSA issue

I never said I had an issue installing the library on alpine. It is the libasound driver that is packaged in alsa-lib that gave me the error about versioning. Which in return was solved by packaging it myself.

This is as far as I could get with Alpine 3.10 and Cypress (base image being php:7.3.8-fpm-alpine3.10 )

As you can see in my post I am compiling Cypress with glibc. Not pulling it from some php based base image.

Is this resolved? Previously it was believed that the issue was dependent on an Electron upgrade. We've upgraded Electron close to its most recent version now. Can anywhere verify?

I tried playing with Cypress in the alpine:latest Docker image (docker run --entrypoint sh -it alpine:latest), and ran into issues with permissions when installing as root.

I got further installing as a regular user, but even after that, Alpine seems to have some issue with the Cypress binary. The cli fails to launch the binary with an ENOENT error, and you can't even launch it manually, even though it certifiably exists:

~ $ ls -al ./.cache/Cypress/4.8.0/Cypress/Cypress 
-rwxr-xr-x    1 foo      foo      116418440 Jun 10 13:38 ./.cache/Cypress/4.8.0/Cypress/Cypress
~ $ ./.cache/Cypress/4.8.0/Cypress/Cypress 
ash: ./.cache/Cypress/4.8.0/Cypress/Cypress: not found

Maybe someone who knows more about Alpine knows more about why this is happening.


EDIT: The same issue occurs when installing & trying to run vanilla Electron, so it does not appear to be a Cy-specific issue.

This issue still seems to exist even after Electron 9.0.5.

Yeah I recently tried to get cypress running on alpine 3.12, with no luck. I was able to get all dependencies with the exception of gconf, which electron still seems to rely on

Is this resolved? Previously it was believed that the issue was dependent on an Electron upgrade. We've upgraded Electron close to its most recent version now. Can anywhere verify?

@jennifer-shehane Actually I'm not sure where the idea came from that it has something to do with gconf. In the original post I see no:

Error loading shared library libgconf-2.so.4: No such file or directory (needed by /root/.cache/Cypress/3.4.1/Cypress/Cypress)

What I see is:

https://gist.github.com/x-yuri/c96dd195e8293f292de824aba203ab3e

which supposedly means that Electron was built against glibc, and that is the reason it doesn't start.

I understand Cypress comes with a custom version of Electron? Why? How can I build one?

I understand Cypress comes with a custom version of Electron? Why? How can I build one?

@x-yuri Cypress uses the Electron binaries that get installed with electron from the NPM registry. You can actually reproduce this issue using the Electron binaries directly, without Cypress, see my comment: https://github.com/cypress-io/cypress/issues/419#issuecomment-642017901 It seems to be a generic issue with running Electron in Alpine.

Indeed, the issue can be reproduced w/o cypress. And they don't seem to want to support it:

In order for this to happen someone would need to confirm that Chromium, Node, et al will run correctly on it and to add support for it in all the affected build scripts, so I don't think it's likely this will be on the project's supported roadmap.

However MUSL-libc does indeed look cool. If a volunteer wrote the code to make this happen, I suspect the project would accept the code as an unsupported feature.

Apr 15, 2018

https://github.com/electron/electron/issues/12610#issuecomment-381412186

I'm closing this for now because we don't plan to support musl officially. I'm happy to offer what help I can, though!

Sep 12, 2018

https://github.com/electron/electron/issues/9662#issuecomment-420480342

And there's at least one person who succeeded in those threads.

Hi all. Can someone offer the latest update on whether or not there is currently support for latest Alpine Linux? Any progress?

Was this page helpful?
0 / 5 - 0 ratings