diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 3803786..88e8148 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -7,6 +7,7 @@ env: ENDPOINT: "linuxserver/mods" #don't modify BASEIMAGE: "universal" #replace MODNAME: "docker" #replace + MULTI_ARCH: "true" #set to true if needed jobs: set-vars: @@ -19,6 +20,7 @@ jobs: echo "ENDPOINT=${{ env.ENDPOINT }}" >> $GITHUB_OUTPUT echo "BASEIMAGE=${{ env.BASEIMAGE }}" >> $GITHUB_OUTPUT echo "MODNAME=${{ env.MODNAME }}" >> $GITHUB_OUTPUT + echo "MULTI_ARCH=${{ env.MULTI_ARCH }}" >> $GITHUB_OUTPUT # **** If the mod needs to be versioned, set the versioning logic below. Otherwise leave as is. **** COMPOSE_RELEASE=$(curl -sX GET "https://api.github.com/repos/docker/compose/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||') DOCKER_RELEASE=$(curl -sX GET "https://api.github.com/repos/moby/moby/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||') @@ -29,6 +31,7 @@ jobs: ENDPOINT: ${{ steps.outputs.outputs.ENDPOINT }} BASEIMAGE: ${{ steps.outputs.outputs.BASEIMAGE }} MODNAME: ${{ steps.outputs.outputs.MODNAME }} + MULTI_ARCH: ${{ steps.outputs.outputs.MULTI_ARCH }} MOD_VERSION: ${{ steps.outputs.outputs.MOD_VERSION }} build: @@ -44,4 +47,5 @@ jobs: ENDPOINT: ${{ needs.set-vars.outputs.ENDPOINT }} BASEIMAGE: ${{ needs.set-vars.outputs.BASEIMAGE }} MODNAME: ${{ needs.set-vars.outputs.MODNAME }} + MULTI_ARCH: ${{ needs.set-vars.outputs.MULTI_ARCH }} MOD_VERSION: ${{ needs.set-vars.outputs.MOD_VERSION }} diff --git a/Dockerfile b/Dockerfile index 7ed7b62..042ba06 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine:3.17 as buildstage +FROM ghcr.io/linuxserver/baseimage-alpine:3.19 as buildstage ARG MOD_VERSION RUN \ - echo "**** retrieve latest version ****" && \ + echo "**** retrieve latest docker and compose versions ****" && \ if [[ -z "${MOD_VERSION+x}" ]]; then \ DOCKER_RELEASE=$(curl -sX GET "https://api.github.com/repos/moby/moby/releases/latest" \ | awk '/tag_name/{print $4;exit}' FS='[""]' \ @@ -17,57 +17,57 @@ RUN \ DOCKER_RELEASE=$(echo "${MOD_VERSION}" | sed 's|-.*||'); \ COMPOSE_RELEASE=$(echo "${MOD_VERSION}" | sed 's|.*-||'); \ fi && \ - echo "**** grab docker ****" && \ - mkdir -p \ - /root-layer/docker-bins \ - /tmp/docker_x86_64 \ - /tmp/docker_aarch64 && \ - curl -fo \ - /tmp/docker_x86_64.tgz -L \ - "https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_RELEASE}.tgz" && \ - tar xf \ - /tmp/docker_x86_64.tgz -C \ - /tmp/docker_x86_64 --strip-components=1 && \ - cp /tmp/docker_x86_64/docker /root-layer/docker-bins/docker_x86_64 && \ - curl -fo \ - /tmp/docker_aarch64.tgz -L \ - "https://download.docker.com/linux/static/stable/aarch64/docker-${DOCKER_RELEASE}.tgz" && \ - tar xf \ - /tmp/docker_aarch64.tgz -C \ - /tmp/docker_aarch64 --strip-components=1 && \ - cp /tmp/docker_aarch64/docker /root-layer/docker-bins/docker_aarch64 && \ - echo "**** grab compose ****" && \ - curl -fo \ - /root-layer/docker-bins/docker-compose_x86_64 -L \ - "https://github.com/docker/compose/releases/download/v${COMPOSE_RELEASE}/docker-compose-linux-x86_64" && \ - curl -fo \ - /root-layer/docker-bins/docker-compose_aarch64 -L \ - "https://github.com/docker/compose/releases/download/v${COMPOSE_RELEASE}/docker-compose-linux-aarch64" && \ echo "**** retrieve latest compose switch version ****" && \ if [ -z ${SWITCH_RELEASE+x} ]; then \ SWITCH_RELEASE=$(curl -sX GET "https://api.github.com/repos/docker/compose-switch/releases/latest" \ | awk '/tag_name/{print $4;exit}' FS='[""]' \ | sed 's|^v||'); \ fi && \ - echo "**** grab compose switch ****" && \ - curl -fo \ - /root-layer/docker-bins/compose-switch_x86_64 -L \ - "https://github.com/docker/compose-switch/releases/download/v${SWITCH_RELEASE}/docker-compose-linux-amd64" && \ - curl -fo \ - /root-layer/docker-bins/compose-switch_aarch64 -L \ - "https://github.com/docker/compose-switch/releases/download/v${SWITCH_RELEASE}/docker-compose-linux-arm64" && \ echo "**** retrieve latest buildx version ****" && \ if [ -z ${BUILDX_RELEASE+x} ]; then \ BUILDX_RELEASE=$(curl -sX GET "https://api.github.com/repos/docker/buildx/releases/latest" \ | awk '/tag_name/{print $4;exit}' FS='[""]'); \ fi && \ - echo "**** grab buildx plugin ****" && \ - curl -fo \ - /root-layer/docker-bins/docker-buildx_x86_64 -L \ - "https://github.com/docker/buildx/releases/download/${BUILDX_RELEASE}/buildx-${BUILDX_RELEASE}.linux-amd64" && \ - curl -fo \ - /root-layer/docker-bins/docker-buildx_aarch64 -L \ - "https://github.com/docker/buildx/releases/download/${BUILDX_RELEASE}/buildx-${BUILDX_RELEASE}.linux-arm64" && \ + mkdir -p \ + /root-layer/docker-bins \ + /tmp/docker && \ + if [[ $(uname -m) == "x86_64" ]]; then \ + echo "**** grab x86_64 tarballs and binaries ****" && \ + curl -fo \ + /tmp/docker.tgz -L \ + "https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_RELEASE}.tgz" && \ + tar xf \ + /tmp/docker.tgz -C \ + /tmp/docker --strip-components=1 && \ + cp /tmp/docker/docker /root-layer/docker-bins/docker && \ + curl -fo \ + /root-layer/docker-bins/docker-compose -L \ + "https://github.com/docker/compose/releases/download/v${COMPOSE_RELEASE}/docker-compose-linux-x86_64" && \ + curl -fo \ + /root-layer/docker-bins/compose-switch -L \ + "https://github.com/docker/compose-switch/releases/download/v${SWITCH_RELEASE}/docker-compose-linux-amd64" && \ + curl -fo \ + /root-layer/docker-bins/docker-buildx -L \ + "https://github.com/docker/buildx/releases/download/${BUILDX_RELEASE}/buildx-${BUILDX_RELEASE}.linux-amd64"; \ + elif [[ $(uname -m) == "aarch64" ]]; then \ + echo "**** grab aarch64 tarballs and binaries ****" && \ + curl -fo \ + /tmp/docker.tgz -L \ + "https://download.docker.com/linux/static/stable/aarch64/docker-${DOCKER_RELEASE}.tgz" && \ + tar xf \ + /tmp/docker.tgz -C \ + /tmp/docker --strip-components=1 && \ + cp /tmp/docker/docker /root-layer/docker-bins/docker && \ + curl -fo \ + /root-layer/docker-bins/docker-compose -L \ + "https://github.com/docker/compose/releases/download/v${COMPOSE_RELEASE}/docker-compose-linux-aarch64" && \ + curl -fo \ + /root-layer/docker-bins/compose-switch -L \ + "https://github.com/docker/compose-switch/releases/download/v${SWITCH_RELEASE}/docker-compose-linux-arm64" && \ + curl -fo \ + /root-layer/docker-bins/docker-buildx -L \ + "https://github.com/docker/buildx/releases/download/${BUILDX_RELEASE}/buildx-${BUILDX_RELEASE}.linux-arm64"; \ + fi && \ chmod +x /root-layer/docker-bins/* && \ rm -rf /tmp/* diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-docker-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-docker-setup/run index 0cee12c..7fea7ba 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-docker-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-docker-setup/run @@ -9,10 +9,10 @@ fi if [[ -d "/docker-bins" ]] ; then echo "Copying over docker and docker-compose binaries" mkdir -p /usr/local/lib/docker/cli-plugins - mv "/docker-bins/docker-compose_${ARCH}" /usr/local/lib/docker/cli-plugins/docker-compose - mv "/docker-bins/docker-buildx_${ARCH}" /usr/local/lib/docker/cli-plugins/docker-buildx - mv "/docker-bins/docker_${ARCH}" /usr/local/bin/docker - mv "/docker-bins/compose-switch_${ARCH}" /usr/local/bin/docker-compose + mv "/docker-bins/docker-compose" /usr/local/lib/docker/cli-plugins/docker-compose + mv "/docker-bins/docker-buildx" /usr/local/lib/docker/cli-plugins/docker-buildx + mv "/docker-bins/docker" /usr/local/bin/docker + mv "/docker-bins/compose-switch" /usr/local/bin/docker-compose rm -rf /docker-bins else echo "**** docker and docker-compose already installed, skipping ****"