Merge pull request #842 from linuxserver/universal-cloudflared-multi

cloudflared: switch to multi-arch
This commit is contained in:
aptalca
2024-02-18 13:20:25 -05:00
committed by GitHub
3 changed files with 31 additions and 18 deletions
+4
View File
@@ -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 }}
+18 -8
View File
@@ -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/
@@ -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 \