diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index aba919b..eff12ef 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: "cloudflared" #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. **** MOD_VERSION=$(curl -s https://api.github.com/repos/cloudflare/cloudflared/releases/latest | jq -rc ".tag_name") echo "MOD_VERSION=${MOD_VERSION}" >> $GITHUB_OUTPUT @@ -27,6 +29,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: @@ -42,4 +45,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 ef2cd12..9355eac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 # Build container -FROM ghcr.io/linuxserver/baseimage-alpine:3.18 AS buildstage +FROM ghcr.io/linuxserver/baseimage-alpine:3.19 AS buildstage ARG MOD_VERSION @@ -11,14 +11,24 @@ RUN \ MOD_VERSION=$(curl -s https://api.github.com/repos/cloudflare/cloudflared/releases/latest \ | jq -rc ".tag_name"); \ fi && \ - echo "**** grab binaries ****" && \ mkdir -p /root-layer/cloudflared && \ - curl -fo \ - /root-layer/cloudflared/cloudflared-amd64 -L \ - "https://github.com/cloudflare/cloudflared/releases/download/${MOD_VERSION}/cloudflared-linux-amd64" && \ - curl -fo \ - /root-layer/cloudflared/cloudflared-arm64 -L \ - "https://github.com/cloudflare/cloudflared/releases/download/${MOD_VERSION}/cloudflared-linux-arm64" && \ + if [ $(uname -m) = "x86_64" ]; then \ + echo "**** Downloading x86_64 binaries ****" && \ + curl -fo \ + /root-layer/cloudflared/cloudflared -L \ + "https://github.com/cloudflare/cloudflared/releases/download/${MOD_VERSION}/cloudflared-linux-amd64" && \ + curl -fo \ + /root-layer/cloudflared/yq -L \ + "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64"; \ + elif [ $(uname -m) = "aarch64" ]; then \ + echo "**** Downloading aarch64 binaries ****" && \ + curl -fo \ + /root-layer/cloudflared/cloudflared -L \ + "https://github.com/cloudflare/cloudflared/releases/download/${MOD_VERSION}/cloudflared-linux-arm64" && \ + curl -fo \ + /root-layer/cloudflared/yq -L \ + "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64"; \ + fi && \ chmod +x /root-layer/cloudflared/* COPY root/ /root-layer/ diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-cloudflared-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-cloudflared-setup/run index ce98ea6..176f6e0 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-cloudflared-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-cloudflared-setup/run @@ -17,16 +17,15 @@ else fi echo "**** Linux architecture found: ${ARCH} ****" -echo "**** Checking for cloudflared setup script dependencies... ****" -YQARCH="${ARCH}" -echo "**** Temporarily installing /tmp/yq... ****" -curl -sLo /tmp/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${YQARCH} -chmod +x /tmp/yq - echo "**** Installing cloudflared...****" if [ -d "/cloudflared/" ]; then - echo "**** Moving /cloudflared/cloudflared-${ARCH} to /usr/local/bin/cloudflared... ****" - mv /cloudflared/cloudflared-${ARCH} /usr/local/bin/cloudflared + if ! command -v yq || ! yq --help | grep -q 'mikefarah'; then + echo "**** Installing yq ****" + mv /cloudflared/yq /usr/local/bin/yq + fi + + echo "**** Moving /cloudflared/cloudflared to /usr/local/bin/cloudflared... ****" + mv /cloudflared/cloudflared /usr/local/bin/cloudflared echo "**** Deleting tmp /cloudflared dir... ****" rm -rf /cloudflared @@ -92,14 +91,14 @@ if [[ ${#CF_ZONE_ID} -gt 0 ]] && [[ ${#CF_ACCOUNT_ID} -gt 0 ]] && [[ ${#CF_API_T printf "credentials-file: /etc/cloudflared/${CF_TUNNEL_ID}.json\n" >> "/etc/cloudflared/config.yml" printf "no-autoupdate: true\n\n" >> "/etc/cloudflared/config.yml" printf "${CF_TUNNEL_CONFIG}" >> "/etc/cloudflared/config.yml" - /tmp/yq e /etc/cloudflared/config.yml + yq e /etc/cloudflared/config.yml echo "**** Config for cloudflare tunnel (${CF_TUNNEL_NAME}) saved to /etc/cloudflared/config.yml ****" echo "**** Validating cloudflared tunnel rules... ****" cloudflared tunnel ingress validate echo "**** Updating cloudflare zone... ****" - for HOSTNAME in $(/tmp/yq e ".ingress.[].hostname" /etc/cloudflared/config.yml); do + for HOSTNAME in $(yq e ".ingress.[].hostname" /etc/cloudflared/config.yml); do if [ ! "${HOSTNAME}" = "null" ]; then echo "**** Searching zone for hostname (${HOSTNAME}) via API... ****" JSON_RESULT=$(curl -sX \