Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alpine version #37

Open
ScottPierce opened this issue Oct 13, 2020 · 6 comments
Open

Alpine version #37

ScottPierce opened this issue Oct 13, 2020 · 6 comments

Comments

@ScottPierce
Copy link

An alpine version would be beneficial

@geek-at
Copy link

geek-at commented Nov 8, 2020

won't work because the github runner is not musl compatible. I tried on a barebone alpine installation

@williamdes
Copy link

I did try and here is the diff anyone can re-use

CLI output

williamdes@williamdes:/mnt/Dev/@williamdes/docker-github-runner$ make build
docker build -t "tcardonne/github-runner" docker
Sending build context to Docker daemon  10.24kB
Step 1/25 : ARG FROM=mcr.microsoft.com/dotnet/runtime-deps:3.1-alpine
Step 2/25 : FROM ${FROM}
 ---> d5d46b0ce104
Step 3/25 : ARG GH_RUNNER_VERSION
 ---> Using cache
 ---> 7eb23a0fda9a
Step 4/25 : ARG DOCKER_COMPOSE_VERSION="1.27.4"
 ---> Using cache
 ---> a3a0ea202236
Step 5/25 : ENV RUNNER_NAME=""
 ---> Using cache
 ---> c0d5891a37a5
Step 6/25 : ENV RUNNER_WORK_DIRECTORY="_work"
 ---> Using cache
 ---> 445bc09045d5
Step 7/25 : ENV RUNNER_TOKEN=""
 ---> Using cache
 ---> 6b4339cd633c
Step 8/25 : ENV RUNNER_REPOSITORY_URL=""
 ---> Using cache
 ---> 26573524de0b
Step 9/25 : ENV RUNNER_LABELS=""
 ---> Using cache
 ---> 5dbad0e0337f
Step 10/25 : ENV RUNNER_ALLOW_RUNASROOT=true
 ---> Using cache
 ---> 50cb04b4e046
Step 11/25 : ENV GITHUB_ACCESS_TOKEN=""
 ---> Using cache
 ---> af07cf7d158c
Step 12/25 : ENV AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache
 ---> Using cache
 ---> 919f89c7dd32
Step 13/25 : LABEL maintainer="[email protected]"     org.label-schema.schema-version="1.0"     org.label-schema.build-date=$BUILD_DATE     org.label-schema.vcs-ref=$VCS_REF     org.label-schema.name="tcardonne/github-runner"     org.label-schema.description="Dockerized GitHub Actions runner."     org.label-schema.url="https://github.com/tcardonne/docker-github-runner"     org.label-schema.vcs-url="https://github.com/tcardonne/docker-github-runner"     org.label-schema.vendor="Thomas Cardonne"     org.label-schema.docker.cmd="docker run -it tcardonne/github-runner:latest"
 ---> Using cache
 ---> 26479b26a18b
Step 14/25 : RUN apk add --update-cache --no-cache         curl         unzip         supervisor         jq         openssh-client         git-lfs         docker         git         tar         bash         nodejs         libc6-compat
 ---> Using cache
 ---> a0affb0af605
Step 15/25 : COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
 ---> Using cache
 ---> 17f91d7b13ad
Step 16/25 : RUN chmod 644 /etc/supervisor/conf.d/supervisord.conf
 ---> Using cache
 ---> f746452a489f
Step 17/25 : RUN curl -L -o /usr/local/bin/docker-compose     "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" &&     chmod +x /usr/local/bin/docker-compose
 ---> Using cache
 ---> 78f0d5f90839
Step 18/25 : RUN mkdir -p /home/runner ${AGENT_TOOLSDIRECTORY}
 ---> Using cache
 ---> eaaa8ddf0e19
Step 19/25 : WORKDIR /home/runner
 ---> Using cache
 ---> 58485604993f
Step 20/25 : RUN GH_RUNNER_VERSION=${GH_RUNNER_VERSION:-$(curl --silent "https://api.github.com/repos/actions/runner/releases/latest" | grep tag_name | sed -E 's/.*"v([^"]+)".*/\1/')}     && curl -L -O https://github.com/actions/runner/releases/download/v${GH_RUNNER_VERSION}/actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz     && tar -zxf actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz     && rm -f actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz     && chown -R root: /home/runner
 ---> Using cache
 ---> 3886c2db7e38
Step 21/25 : RUN ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
 ---> Running in e8f95fe53f95
Removing intermediate container e8f95fe53f95
 ---> f5df3afd3c3a
Step 22/25 : COPY entrypoint.sh /entrypoint.sh
 ---> 6526902cac18
Step 23/25 : RUN chmod +x /entrypoint.sh
 ---> Running in f6a5747b22bc
Removing intermediate container f6a5747b22bc
 ---> 4e998315684c
Step 24/25 : ENTRYPOINT ["/entrypoint.sh"]
 ---> Running in 4a0820581a32
Removing intermediate container 4a0820581a32
 ---> a2a309d0309f
Step 25/25 : CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
 ---> Running in ab9aa069a4ac
Removing intermediate container ab9aa069a4ac
 ---> 52d96648aa89
Successfully built 52d96648aa89
Successfully tagged tcardonne/github-runner:latest
williamdes@williamdes:/mnt/Dev/@williamdes/docker-github-runner$ docker-compose up
Recreating docker-github-runner_runner_1 ... done
Attaching to docker-github-runner_runner_1
runner_1  | Exchanging the GitHub Access Token with a Runner Token (scope: repos)...
runner_1  | Error relocating ./bin/libcoreclr.so: __finite: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: __isnan: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: __finitef: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: __isnanf: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: pthread_attr_setaffinity_np: symbol not found
runner_1  | Libicu's dependencies is missing for Dotnet Core 3.0
runner_1  | Execute sudo ./bin/installdependencies.sh to install any missing Dotnet Core 3.0 dependencies.
runner_1  | Error relocating ./externals/node12/bin/node: gnu_get_libc_version: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: __register_atfork: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: __strdup: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: setcontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: makecontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: backtrace: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: getcontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: gnu_get_libc_version: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: __register_atfork: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: __strdup: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: setcontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: makecontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: backtrace: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: getcontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: gnu_get_libc_version: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: __register_atfork: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: __strdup: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: setcontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: makecontext: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: backtrace: symbol not found
runner_1  | Error relocating ./externals/node12/bin/node: getcontext: symbol not found
^CGracefully stopping... (press Ctrl+C again to force)
Stopping docker-github-runner_runner_1   ... done

the patch

diff --git a/docker/Dockerfile b/docker/Dockerfile
index b3dfd01..956bca2 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,8 +1,6 @@
-ARG FROM=debian:buster-slim
+ARG FROM=mcr.microsoft.com/dotnet/runtime-deps:3.1-alpine
 FROM ${FROM}
 
-ARG DEBIAN_FRONTEND=noninteractive
-ARG GIT_VERSION="2.26.2"
 ARG GH_RUNNER_VERSION
 ARG DOCKER_COMPOSE_VERSION="1.27.4"
 
@@ -27,49 +25,30 @@ LABEL maintainer="[email protected]" \
     org.label-schema.vendor="Thomas Cardonne" \
     org.label-schema.docker.cmd="docker run -it tcardonne/github-runner:latest"
 
-RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
-    apt-get install -y \
+RUN apk add --update-cache --no-cache \
         curl \
         unzip \
-        apt-transport-https \
-        ca-certificates \
-        software-properties-common \
-        sudo \
         supervisor \
         jq \
-        iputils-ping \
-        build-essential \
-        zlib1g-dev \
-        gettext \
-        liblttng-ust0 \
-        libcurl4-openssl-dev \
-        openssh-client && \
-    rm -rf /var/lib/apt/lists/* && \
-    apt-get clean
+        openssh-client \
+        git-lfs \
+        docker \
+        git \
+        tar \
+        bash \
+        nodejs \
+        # Needed by the runner
+        libc6-compat \
+    && ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
 
 COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
 RUN chmod 644 /etc/supervisor/conf.d/supervisord.conf
 
-# Install Docker CLI
-RUN curl -fsSL https://get.docker.com -o- | sh && \
-    rm -rf /var/lib/apt/lists/* && \
-    apt-get clean
-
 # Install Docker-Compose
 RUN curl -L -o /usr/local/bin/docker-compose \
     "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" && \
     chmod +x /usr/local/bin/docker-compose
 
-RUN cd /tmp && \
-    curl -sL -o git.tgz \
-    https://www.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz && \
-    tar zxf git.tgz  && \
-    cd git-${GIT_VERSION}  && \
-    ./configure --prefix=/usr  && \
-    make && \
-    make install && \
-    rm -rf /tmp/*
-
 RUN mkdir -p /home/runner ${AGENT_TOOLSDIRECTORY}
 
 WORKDIR /home/runner
@@ -78,10 +57,7 @@ RUN GH_RUNNER_VERSION=${GH_RUNNER_VERSION:-$(curl --silent "https://api.github.c
     && curl -L -O https://github.com/actions/runner/releases/download/v${GH_RUNNER_VERSION}/actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz \
     && tar -zxf actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz \
     && rm -f actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz \
-    && ./bin/installdependencies.sh \
-    && chown -R root: /home/runner \
-    && rm -rf /var/lib/apt/lists/* \
-    && apt-get clean
+    && chown -R root: /home/runner
 
 COPY entrypoint.sh /entrypoint.sh
 RUN chmod +x /entrypoint.sh

@marcofranssen
Copy link

@williamdes so the diff you shared, does that work? Why not open a PR?

@williamdes
Copy link

@williamdes so the diff you shared, does that work? Why not open a PR?

Well as you can see on the output there is still 2 things I can not fix, if you find how to do I will open a pull-request :)

@geek-at
Copy link

geek-at commented Dec 2, 2020

Another approach would be to add libc. I saw it in a different project the other day: https://github.com/disaster37/alpine-minio/blob/master/Dockerfile#L38

Basically they're patching libc into alpine to be able to run minio. Could work with the runner too

@williamdes
Copy link

Still no success 😟

Recreating docker-github-runner_runner_1 ... done
Attaching to docker-github-runner_runner_1
runner_1  | Exchanging the GitHub Access Token with a Runner Token (scope: repos)...
runner_1  | Error relocating ./bin/libcoreclr.so: __finite: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: __isnan: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: __finitef: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: __isnanf: symbol not found
runner_1  | Error relocating ./bin/libcoreclr.so: pthread_attr_setaffinity_np: symbol not found
runner_1  | Libicu's dependencies is missing for Dotnet Core 3.0
runner_1  | Execute sudo ./bin/installdependencies.sh to install any missing Dotnet Core 3.0 dependencies.
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | ./externals/node12/bin/node: /usr/lib/libstdc++.so.6: no version information available (required by ./externals/node12/bin/node)
runner_1  | Starting Runner listener with startup type: service
runner_1  | Started listener process
runner_1  | Started running service
runner_1  | /home/runner/bin/Runner.Listener: /usr/lib/libstdc++.so.6: no version information available (required by /home/runner/bin/Runner.Listener)
runner_1  | /home/runner/bin/Runner.Listener: /usr/lib/libstdc++.so.6: no version information available (required by /home/runner/bin/Runner.Listener)
runner_1  | /home/runner/bin/Runner.Listener: /usr/lib/libstdc++.so.6: no version information available (required by /home/runner/bin/Runner.Listener)
runner_1  | /home/runner/bin/Runner.Listener: /usr/lib/libstdc++.so.6: no version information available (required by /home/runner/bin/Runner.Listener)
runner_1  | /home/runner/bin/Runner.Listener: /usr/lib/libstdc++.so.6: no version information available (required by /home/runner/bin/Runner.Listener)
runner_1  | An error occurred: Not configured
runner_1  | Runner listener exited with error code 2
runner_1  | Runner listener exit with retryable error, re-launch runner in 5 seconds.
^CGracefully stopping... (press Ctrl+C again to force)
Stopping docker-github-runner_runner_1   ... 
Killing docker-github-runner_runner_1    ... done

ARG FROM=mcr.microsoft.com/dotnet/runtime-deps:3.1-alpine
FROM ${FROM}

ARG GH_RUNNER_VERSION
ARG DOCKER_COMPOSE_VERSION="1.27.4"

ENV RUNNER_NAME=""
ENV RUNNER_WORK_DIRECTORY="_work"
ENV RUNNER_TOKEN=""
ENV RUNNER_REPOSITORY_URL=""
ENV RUNNER_LABELS=""
ENV RUNNER_ALLOW_RUNASROOT=true
ENV GITHUB_ACCESS_TOKEN=""
ENV AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache

# Labels.
LABEL maintainer="[email protected]" \
    org.label-schema.schema-version="1.0" \
    org.label-schema.build-date=$BUILD_DATE \
    org.label-schema.vcs-ref=$VCS_REF \
    org.label-schema.name="tcardonne/github-runner" \
    org.label-schema.description="Dockerized GitHub Actions runner." \
    org.label-schema.url="https://github.com/tcardonne/docker-github-runner" \
    org.label-schema.vcs-url="https://github.com/tcardonne/docker-github-runner" \
    org.label-schema.vendor="Thomas Cardonne" \
    org.label-schema.docker.cmd="docker run -it tcardonne/github-runner:latest"

RUN apk add --update --no-cache \
        curl \
        unzip \
        supervisor \
        jq \
        openssh-client \
        git-lfs \
        docker \
        git \
        tar \
        bash \
        # Needed by the runner
        # Does not work more that without
        libc6-compat \
        # https://github.com/sgerrand/alpine-pkg-glibc/issues/80#issuecomment-574885208
        # Does not work more that without
        libstdc++
    # && ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2 # not needed anymore with a newer glib version

ENV GLIBC_VERSION="2.32-r0"
RUN \
    apk add --update --no-cache -t deps ca-certificates &&\
    cd /tmp &&\
    curl -# -L -o /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&\
    curl -# -L -O https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk &&\
    curl -# -L -O https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk &&\
    apk add --force-overwrite glibc-${GLIBC_VERSION}.apk glibc-bin-${GLIBC_VERSION}.apk && rm *.apk &&\
    /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib/

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN chmod 644 /etc/supervisor/conf.d/supervisord.conf

# Install Docker-Compose
RUN curl -# -L -o /usr/local/bin/docker-compose \
    "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" && \
    chmod +x /usr/local/bin/docker-compose

RUN mkdir -p /home/runner ${AGENT_TOOLSDIRECTORY}

WORKDIR /home/runner

RUN GH_RUNNER_VERSION=${GH_RUNNER_VERSION:-$(curl --silent "https://api.github.com/repos/actions/runner/releases/latest" | grep tag_name | sed -E 's/.*"v([^"]+)".*/\1/')} \
    && curl -# -L -O https://github.com/actions/runner/releases/download/v${GH_RUNNER_VERSION}/actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz \
    && tar -zxf actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz \
    && rm -f actions-runner-linux-x64-${GH_RUNNER_VERSION}.tar.gz \
    && chown -R root: /home/runner

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants