diff --git a/DockerInit.sh b/DockerInit.sh index 8f8da48f9..ee8361f9b 100755 --- a/DockerInit.sh +++ b/DockerInit.sh @@ -1,29 +1,48 @@ #!/bin/sh set -e +# $1 is Docker's TARGETARCH and $2 its TARGETVARIANT (v6/v7 on arm). The +# platform names match the release archives and the mtg-multi packages. case $1 in - amd64) - ARCH="64" - FNAME="amd64" + amd64 | "") + PLATFORM="amd64" ;; - i386) - ARCH="32" - FNAME="i386" + arm64 | armv8 | aarch64) + PLATFORM="arm64" ;; - armv8 | arm64 | aarch64) - ARCH="arm64-v8a" - FNAME="arm64" - ;; - armv7 | arm | arm32) - ARCH="arm32-v7a" - FNAME="arm32" + arm | arm32 | armv7) + PLATFORM="armv7" + if [ "$2" = "v6" ]; then + PLATFORM="armv6" + fi ;; armv6) - ARCH="arm32-v6" - FNAME="armv6" + PLATFORM="armv6" + ;; + 386 | i386) + PLATFORM="386" ;; *) - ARCH="64" - FNAME="amd64" + echo "DockerInit: unsupported architecture '$1'" >&2 + exit 1 + ;; +esac +case $PLATFORM in + amd64) XRAY_ZIP="64" ;; + arm64) XRAY_ZIP="arm64-v8a" ;; + armv7) XRAY_ZIP="arm32-v7a" ;; + armv6) XRAY_ZIP="arm32-v6" ;; + 386) XRAY_ZIP="32" ;; +esac +# The panel looks binaries up by GOARCH; on arm Xray's is "arm32" +# (internal/xray/process.go) and mtg's plain "arm", as install.sh renames them. +case $PLATFORM in + armv7 | armv6) + XRAY_BIN="xray-linux-arm32" + MTG_BIN="mtg-linux-arm" + ;; + *) + XRAY_BIN="xray-linux-${PLATFORM}" + MTG_BIN="mtg-linux-${PLATFORM}" ;; esac MTG_MULTI_VER=$(curl -sfL "https://api.github.com/repos/mhsanaei/mtg-multi/releases/latest" | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p' | head -n 1) @@ -33,23 +52,18 @@ if [ -z "$MTG_MULTI_VER" ]; then fi mkdir -p build/bin cd build/bin -curl -sfLRO "https://github.com/XTLS/Xray-core/releases/download/v26.10.21/Xray-linux-${ARCH}.zip" -unzip "Xray-linux-${ARCH}.zip" -rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat -mv xray "xray-linux-${FNAME}" +curl -sfLRO "https://github.com/XTLS/Xray-core/releases/download/v26.10.21/Xray-linux-${XRAY_ZIP}.zip" +unzip "Xray-linux-${XRAY_ZIP}.zip" +rm -f "Xray-linux-${XRAY_ZIP}.zip" geoip.dat geosite.dat +mv xray "${XRAY_BIN}" # mtg-multi (MTProto sidecar) ships prebuilt release binaries for every target # we package, so download and unpack the matching one instead of compiling. -case $FNAME in - i386) MTGARCH="386" ;; - arm32) MTGARCH="armv7" ;; - *) MTGARCH="$FNAME" ;; -esac -MTG_PKG="mtg-multi-${MTG_MULTI_VER#v}-linux-${MTGARCH}" +MTG_PKG="mtg-multi-${MTG_MULTI_VER#v}-linux-${PLATFORM}" curl -sfLRO "https://github.com/mhsanaei/mtg-multi/releases/download/${MTG_MULTI_VER}/${MTG_PKG}.tar.gz" tar -xzf "${MTG_PKG}.tar.gz" -mv "${MTG_PKG}/mtg-multi" "mtg-linux-${FNAME}" +mv "${MTG_PKG}/mtg-multi" "${MTG_BIN}" rm -rf "${MTG_PKG}" "${MTG_PKG}.tar.gz" -chmod +x "mtg-linux-${FNAME}" +chmod +x "${MTG_BIN}" curl -sfLRO https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat curl -sfLRO https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat curl -sfLRo geoip_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat diff --git a/Dockerfile b/Dockerfile index aace5c411..97eaf45fa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,7 @@ RUN npm run build FROM golang:1.27-alpine AS builder WORKDIR /app ARG TARGETARCH +ARG TARGETVARIANT RUN apk --no-cache --update add \ build-base \ @@ -28,7 +29,7 @@ COPY --from=frontend /src/internal/web/dist ./internal/web/dist ENV CGO_ENABLED=1 ENV CGO_CFLAGS="-D_LARGEFILE64_SOURCE" RUN go build -ldflags "-w -s" -o build/x-ui main.go -RUN ./DockerInit.sh "$TARGETARCH" +RUN ./DockerInit.sh "$TARGETARCH" "$TARGETVARIANT" # ======================================================== # Stage: Final Image of 3x-ui