runner icon indicating copy to clipboard operation
runner copied to clipboard

self-hosted: support Alpine

Open jcayzac opened this issue 5 years ago • 30 comments

Alpine Linux isn't mentioned in the list of supported distributions. Is there any plan to add support soon?

jcayzac avatar Nov 12 '20 05:11 jcayzac

Bump! :D

Korpics avatar Feb 19 '21 20:02 Korpics

Bumpedybump - Would PR for alpine support be welcomed? :D

baer95 avatar Mar 29 '21 13:03 baer95

This would be almost essential for getting proper docker-in-docker support (via this image: https://hub.docker.com/_/docker/ )

villesau avatar Mar 29 '21 15:03 villesau

there's an old POC PR which has rotted on the vine a bit which has the start of what alpine would look like https://github.com/actions/runner/pull/495

bryanmacfarlane avatar Mar 30 '21 14:03 bryanmacfarlane

Bump

bihiguti avatar Jul 06 '21 20:07 bihiguti

+1 I'd love to see alpine support as well. Went down a rabbit hole trying to make it work myself and couldn't get it working.

mathew-fleisch avatar Jul 24 '21 21:07 mathew-fleisch

Bump

unrooty-infinum avatar Sep 29 '21 16:09 unrooty-infinum

+1. A quick test worked. Is there a specific barrier to official support? Is it just a matter of testing?

rvollmarsb avatar Oct 20 '21 17:10 rvollmarsb

@hross since he's driving this area now. I imagine it's not hard technically but more of a matter of official support, building / dist, docs etc. etc. but I'm guessing here :)

bryanmacfarlane avatar Oct 20 '21 17:10 bryanmacfarlane

so far after installing .NET Core 6.0.100 using https://dot.net/v1/dotnet-install.sh and directly executing the Runner from the archive https://github.com/actions/runner/releases/download/v2.284.0/actions-runner-linux-x64-2.284.0.tar.gz

./bin/Runner.Listener configure

I end up with

bash-5.1$ ldd bin/Runner.Listener 
	/lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f7dfa728000)
	libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f7dfa70e000)
	libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by bin/Runner.Listener)	
bash-5.1$ ls -l /lib64/ld-linux-x86-64.so.2 
lrwxrwxrwx    1 root     root            26 Nov 12 22:00 /lib64/ld-linux-x86-64.so.2 -> /lib/libc.musl-x86_64.so.1

Seems like musl-friendly build of .NET Core should be sufficient for executing Runner.Listener, but it's not.

Did I miss anything?

so far after installing .NET Core 6.0.100 using https://dot.net/v1/dotnet-install.sh and directly executing the Runner from the archive https://github.com/actions/runner/releases/download/v2.284.0/actions-runner-linux-x64-2.284.0.tar.gz

./bin/Runner.Listener configure

I end up with

bash-5.1$ ldd bin/Runner.Listener 
	/lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f7dfa728000)
	libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f7dfa70e000)
	libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f7dfa8c9000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by bin/Runner.Listener)	
bash-5.1$ ls -l /lib64/ld-linux-x86-64.so.2 
lrwxrwxrwx    1 root     root            26 Nov 12 22:00 /lib64/ld-linux-x86-64.so.2 -> /lib/libc.musl-x86_64.so.1

Seems like musl-friendly build of .NET Core should be sufficient for executing Runner.Listener, but it's not.

Did I miss anything?

You might want to open a new issue for your problem. I don't think thats related to a alpine version of the runner image.

axe312ger avatar Nov 25 '21 08:11 axe312ger

any luck?

debragail avatar Dec 13 '21 18:12 debragail

Has anyone been able to get this working on alpine and can please share the steps on how they achieved it?

kabal2010 avatar Dec 20 '21 12:12 kabal2010

@maciejgwizdala Did you get this working here https://github.com/maciejgwizdala/alpine-runner ? Was there anything else necessary?

StevenACoffman avatar Feb 20 '22 22:02 StevenACoffman

Also got this error JavaScript Actions in Alpine containers are only supported on x64 Linux runners. Detected Linux Arm64 when using container: in workflow.

chunlea avatar Aug 28 '22 04:08 chunlea

The runner team should consider changing how it does Alpine detection because the glibc node runtime they use works fine if gcompat is installed in the container. So, for those who run into this issue you need to run the following as the first step before any JS actions and then everything will work fine:

      - run: |
          apk add gcompat
          sed -i "s:ID=alpine:ID=NotpineForGHA:" /etc/os-release

If you're only using the container for GHA then you could simply build it into your Dockerfile as well, but be wary of other software that may depend on alpine fingerprinting via /etc/os-release rather than musl libc detection.

reaperhulk avatar Jan 09 '23 00:01 reaperhulk

Also looking for better alpine support.

As a potential user of GHA; (coming from gitlab) -> I would prefer to specify a base image (alpine or whatever I need) as part of the job and let the runner use that via docker. (also using arm64 builds)

It seems like a work around might exist in GHA; but looking at LoE right now vs staying where I am.

randysecrist avatar Feb 24 '23 22:02 randysecrist

Bumpedybump

mattmutual avatar Apr 11 '23 09:04 mattmutual

Bump

ml4 avatar Jul 06 '23 18:07 ml4

Bump

cheempz avatar Jul 19 '23 16:07 cheempz

Working from the information posted by alex and reaper:

apk add gcompat aspnetcore6-runtime
./bin/Runner.Listener configure
./run.sh

I also required the following for my pipelines to do any valuable work:

apk add iptables ip6tables docker docker-compose go g++
usermod -aG docker yourusername
rc-update add docker boot
reboot

nekinie avatar Aug 02 '23 12:08 nekinie

FWIW, with actions/checkout@v4 the workaround @reaperhulk discovered no longer works. This is because 4.0.0 uses node20, which fails to run with:

Error relocating /__e/node20/bin/node: fcntl64: symbol not found

Presumably as time marches forward and node20 becomes more common, this error will become more omnipresent.

alex avatar Sep 04 '23 15:09 alex

We also get the error "JavaScript Actions in Alpine containers are only supported on x64 Linux runners. ..." running actions/checkout versions @v2, @v3 and @v4 on arm64. So this message is to support the feature request to support such uses.

maartenarnst avatar Sep 28 '23 16:09 maartenarnst

Combining all the knowledge of this issue and adding some more hacky workarounds, I was able to build some alpine runner images which "work" as of now. You can find the source at https://github.com/cynkra/runner/tree/main/images and the images at https://hub.docker.com/repository/docker/cynkra/actions-runner.

No warranty for updates and no idea how "stable" they are. We've used them in one private workflow so far and everything worked but there might surely be edge cases.

NOTE: Many Actions from the Marketplace don't support Alpine as the underlying OS so you're pretty much on your own with installing dependencies etc.

(we might also add ubuntu-based variants into the same repo which is why we went for a tagging scheme which includes the OS name)

pat-s avatar Nov 28 '23 16:11 pat-s

Bumpedybump

Bumpedybump bump

toots avatar Feb 15 '24 15:02 toots

We need alpine for docker in dockerrr

atakanhr avatar Mar 15 '24 19:03 atakanhr

waiting for alpine @Github

azataiot avatar Apr 04 '24 06:04 azataiot

waiting for alpine https://github.com/github

snowdream avatar Jun 26 '24 09:06 snowdream