Closed
Description
Description
Currently the node
binary that's used to run external actions dynamically links against libc. This has the effect that when used with containers, actions break because of libc symbols not being available:
- https://github.com/pyca/bcrypt/actions/runs/7221890745/job/19677826890
Error relocating /__e/node20/bin/node: fcntl64: symbol not found
- https://github.com/pyca/bcrypt/actions/runs/7221730927/job/19677334188
/__e/node20/bin/node: /lib64/libm.so.6: version 'GLIBC_2.27' not found (required by /__e/node20/bin/node)
, etc.
In order to insulate the node binary from containers it's running in, it should be fully statically linked.
This can be accomplished with --fully-static
argument to configure
when building node
(https://github.com/nodejs/node/blob/main/configure.py#L155-L160)
Platforms affected
- Azure DevOps
- GitHub Actions - Standard Runners
- GitHub Actions - Larger Runners
Runner images affected
- Ubuntu 20.04
- Ubuntu 22.04
- macOS 11
- macOS 12
- macOS 13
- Windows Server 2019
- Windows Server 2022
Image version and build link
Current runner version: '2.311.0'
Is it regression?
No
Expected behavior
node
binary can be invoked inside of alpine containers or other environments with different libc
Actual behavior
Crashes with various dynamic linking errors
Repro steps
- Set up a self-hosted arm64 runner
- Run an image such as
alpine
orpyca/cryptography-manylinux2014
that has a different libc (musl and old, respectively) - Attempt to use any node20 action, such as
actions/checkout@v4
- See it fail
Metadata
Metadata
Assignees
Labels
No labels