volta-cli / volta

Volta: JS Toolchains as Code. ⚡
https://volta.sh
Other
11.15k stars 238 forks source link

Volta setup fails on GitHub self-hosted runner #1303

Open scalvert opened 2 years ago

scalvert commented 2 years ago

We're trying to use Volta on a self-hosted runner image (Centos 7) by way of volta-cli/action (installs and bootstraps Volta for the repo under test). Currently, when trying to install, and specifically during the setup command, installation fails with the following error:

/runner/_work/_temp/820dc87e-b753-4c79-b5e3-f826efe2c6fe/bin/volta setup
/runner/_work/_temp/820dc87e-b753-4c79-b5e3-f826efe2c6fe/bin/volta: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory

OpenSSL is installed on the system, and is a version that appears supported by Volta:

/export/apps/openssl/bin/openssl version
OpenSSL 1.0.2h  3 May 2016

Which translates into downloading:

##[debug]Downloading https://github.com/volta-cli/volta/releases/download/v1.0.8/volta-1.0.8-linux-openssl-1.0.tar.gz

and subsequently triggers the failure above.

What I've tried

  1. Verifying that libssl.so.1.0.0 is linked:

    Run whereis libssl.so.1.0.0
      whereis libssl.so.1.0.0
      shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
    ##[debug]/usr/bin/bash --noprofile --norc -e -o pipefail /runner/_work/_temp/3b327cfe-878e-48a1-8a07-0b0c164194bf.sh
    libssl.so.1.0: /usr/lib64/libssl.so.1.0.2k
  2. Noticing the linked name is different, I tried adding a symlink to the version of libssl.so.1.0.0

    ln -s /usr/lib64/libssl.so.1.0.2k libssl.so.1.0.0

Any thoughts on how to solve this, @charlespierce?

scalvert commented 2 years ago

So it appears that the Volta action didn't support installing using the RHEL variant, and as such the version that was downloaded didn't work correctly on the self-hosted image. We've verified that the volta-1.0.8-linux-openssl-rhel.tar.gz version works.

I've opened https://github.com/volta-cli/action/pull/102 to address this.

charlespierce commented 2 years ago

Thanks for the follow-up @scalvert, that was going to be my first question! Medium-term, I have a PR out to swap to use a Rust-based TLS implementation that's statically-linked into the binary, so we can avoid this whole class of issues with OpenSSL: https://github.com/volta-cli/volta/pull/1214

scalvert commented 2 years ago

Oh please YES! I'll take that now, TYVM.

:)

nifr commented 2 years ago

Update: #1214 has been merged.

☑️ Statically link to Rustls instead of using OpenSSL

It's on the main branch now and will be part of the next release.