This commit is contained in:
robin
2026-03-13 14:25:13 +08:00
parent a25a474d6a
commit afbaaa869c
95 changed files with 4591 additions and 2578 deletions

View File

@@ -1,5 +1,138 @@
#!/usr/bin/env bash
function find-binary() {
local candidate
for candidate in "$@"; do
if [ -z "$candidate" ]; then
continue
fi
if [ -x "$candidate" ]; then
echo "$candidate"
return 0
fi
if command -v "$candidate" >/dev/null 2>&1; then
command -v "$candidate"
return 0
fi
done
return 1
}
function host-goarch() {
case "$(uname -m)" in
x86_64|amd64)
echo "amd64"
;;
aarch64|arm64)
echo "arm64"
;;
i386|i486|i586|i686)
echo "386"
;;
mips64)
echo "mips64"
;;
mips64el)
echo "mips64le"
;;
*)
echo ""
;;
esac
}
function find-linux-static-toolchain() {
local arch=$1
local cc_bin=""
local cxx_bin=""
local host_arch
host_arch=$(host-goarch)
case "$arch" in
amd64)
cc_bin=$(find-binary \
"/usr/local/gcc/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc" \
"/usr/local/opt/musl-cross/bin/x86_64-linux-musl-gcc" \
"x86_64-unknown-linux-gnu-gcc" \
"x86_64-linux-musl-gcc" \
"musl-gcc")
cxx_bin=$(find-binary \
"/usr/local/gcc/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-g++" \
"/usr/local/opt/musl-cross/bin/x86_64-linux-musl-g++" \
"x86_64-unknown-linux-gnu-g++" \
"x86_64-linux-musl-g++")
if [ -z "$cc_bin" ] && [ "$host_arch" = "amd64" ]; then
cc_bin=$(find-binary "gcc" "cc" "clang")
fi
if [ -z "$cxx_bin" ] && [ "$host_arch" = "amd64" ]; then
cxx_bin=$(find-binary "g++" "c++" "clang++")
fi
;;
386)
cc_bin=$(find-binary "/usr/local/opt/musl-cross/bin/i486-linux-musl-gcc" "i486-linux-musl-gcc")
cxx_bin=$(find-binary "/usr/local/opt/musl-cross/bin/i486-linux-musl-g++" "i486-linux-musl-g++")
if [ -z "$cc_bin" ] && [ "$host_arch" = "386" ]; then
cc_bin=$(find-binary "gcc" "cc" "clang")
fi
if [ -z "$cxx_bin" ] && [ "$host_arch" = "386" ]; then
cxx_bin=$(find-binary "g++" "c++" "clang++")
fi
;;
arm64)
cc_bin=$(find-binary \
"/usr/local/gcc/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc" \
"/usr/local/opt/musl-cross/bin/aarch64-linux-musl-gcc" \
"aarch64-unknown-linux-gnu-gcc" \
"aarch64-linux-musl-gcc")
cxx_bin=$(find-binary \
"/usr/local/gcc/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++" \
"/usr/local/opt/musl-cross/bin/aarch64-linux-musl-g++" \
"aarch64-unknown-linux-gnu-g++" \
"aarch64-linux-musl-g++")
if [ -z "$cc_bin" ] && [ "$host_arch" = "arm64" ]; then
cc_bin=$(find-binary "gcc" "cc" "clang")
fi
if [ -z "$cxx_bin" ] && [ "$host_arch" = "arm64" ]; then
cxx_bin=$(find-binary "g++" "c++" "clang++")
fi
;;
mips64)
cc_bin=$(find-binary "/usr/local/opt/musl-cross/bin/mips64-linux-musl-gcc" "mips64-linux-musl-gcc")
cxx_bin=$(find-binary "/usr/local/opt/musl-cross/bin/mips64-linux-musl-g++" "mips64-linux-musl-g++")
if [ -z "$cc_bin" ] && [ "$host_arch" = "mips64" ]; then
cc_bin=$(find-binary "gcc" "cc" "clang")
fi
if [ -z "$cxx_bin" ] && [ "$host_arch" = "mips64" ]; then
cxx_bin=$(find-binary "g++" "c++" "clang++")
fi
;;
mips64le)
cc_bin=$(find-binary "/usr/local/opt/musl-cross/bin/mips64el-linux-musl-gcc" "mips64el-linux-musl-gcc")
cxx_bin=$(find-binary "/usr/local/opt/musl-cross/bin/mips64el-linux-musl-g++" "mips64el-linux-musl-g++")
if [ -z "$cc_bin" ] && [ "$host_arch" = "mips64le" ]; then
cc_bin=$(find-binary "gcc" "cc" "clang")
fi
if [ -z "$cxx_bin" ] && [ "$host_arch" = "mips64le" ]; then
cxx_bin=$(find-binary "g++" "c++" "clang++")
fi
;;
*)
return 1
;;
esac
if [ -z "$cc_bin" ]; then
return 1
fi
if [ -z "$cxx_bin" ]; then
cxx_bin="$cc_bin"
fi
echo "$cc_bin|$cxx_bin"
return 0
}
function build() {
ROOT=$(dirname "$0")
NAME="edge-dns"
@@ -18,10 +151,9 @@ function build() {
fi
echo "checking ..."
ZIP_PATH=$(which zip)
if [ -z "$ZIP_PATH" ]; then
if ! command -v zip >/dev/null 2>&1; then
echo "we need 'zip' command to compress files"
exit
exit 1
fi
echo "building v${VERSION}/${OS}/${ARCH} ..."
@@ -37,38 +169,20 @@ function build() {
fi
cp "$ROOT"/configs/api_dns.template.yaml "$DIST"/configs
copy_fluent_bit_assets "$ROOT" "$DIST" "$OS" "$ARCH" || exit 1
echo "building ..."
MUSL_DIR="/usr/local/opt/musl-cross/bin"
CC_PATH=""
CXX_PATH=""
if [[ $(uname -a) == *"Darwin"* && "${OS}" == "linux" ]]; then
# /usr/local/opt/musl-cross/bin/
if [ "${ARCH}" == "amd64" ]; then
CC_PATH="x86_64-linux-musl-gcc"
CXX_PATH="x86_64-linux-musl-g++"
if [ "$OS" == "linux" ]; then
TOOLCHAIN=$(find-linux-static-toolchain "$ARCH")
if [ -z "$TOOLCHAIN" ]; then
echo "could not find a static Linux toolchain for ${ARCH}"
echo "install a musl toolchain before building edge-dns"
exit 1
fi
if [ "${ARCH}" == "386" ]; then
CC_PATH="i486-linux-musl-gcc"
CXX_PATH="i486-linux-musl-g++"
fi
if [ "${ARCH}" == "arm64" ]; then
CC_PATH="aarch64-linux-musl-gcc"
CXX_PATH="aarch64-linux-musl-g++"
fi
if [ "${ARCH}" == "mips64" ]; then
CC_PATH="mips64-linux-musl-gcc"
CXX_PATH="mips64-linux-musl-g++"
fi
if [ "${ARCH}" == "mips64le" ]; then
CC_PATH="mips64el-linux-musl-gcc"
CXX_PATH="mips64el-linux-musl-g++"
fi
fi
if [ ! -z $CC_PATH ]; then
env CC=$MUSL_DIR/$CC_PATH CXX=$MUSL_DIR/$CXX_PATH GOOS="${OS}" GOARCH="${ARCH}" CGO_ENABLED=1 go build -trimpath -tags="plus" -o "$DIST"/bin/${NAME} -ldflags "-linkmode external -extldflags -static -s -w" "$ROOT"/../cmd/edge-dns/main.go
CC_BIN=${TOOLCHAIN%|*}
CXX_BIN=${TOOLCHAIN#*|}
env CC="$CC_BIN" CXX="$CXX_BIN" GOOS="${OS}" GOARCH="${ARCH}" CGO_ENABLED=1 go build -trimpath -tags="plus" -o "$DIST"/bin/${NAME} -ldflags "-linkmode external -extldflags -static -s -w" "$ROOT"/../cmd/edge-dns/main.go
else
env GOOS="${OS}" GOARCH="${ARCH}" CGO_ENABLED=1 go build -trimpath -tags="plus" -o "$DIST"/bin/${NAME} -ldflags="-s -w" "$ROOT"/../cmd/edge-dns/main.go
fi
@@ -76,7 +190,7 @@ function build() {
# check build result
RESULT=$?
if [ "${RESULT}" != "0" ]; then
exit
exit 1
fi
# delete hidden files
@@ -95,81 +209,6 @@ function build() {
echo "OK"
}
function copy_fluent_bit_assets() {
ROOT=$1
DIST=$2
OS=$3
ARCH=$4
FLUENT_ROOT="$ROOT/../../deploy/fluent-bit"
FLUENT_DIST="$DIST/deploy/fluent-bit"
if [ ! -d "$FLUENT_ROOT" ]; then
echo "[error] fluent-bit source directory not found: $FLUENT_ROOT"
return 1
fi
verify_fluent_bit_package_matrix "$FLUENT_ROOT" "$ARCH" || return 1
rm -rf "$FLUENT_DIST"
mkdir -p "$FLUENT_DIST"
for file in fluent-bit.conf fluent-bit-dns.conf fluent-bit-https.conf fluent-bit-dns-https.conf fluent-bit-windows.conf fluent-bit-windows-https.conf parsers.conf clickhouse-upstream.conf clickhouse-upstream-windows.conf README.md; do
if [ -f "$FLUENT_ROOT/$file" ]; then
cp "$FLUENT_ROOT/$file" "$FLUENT_DIST/"
fi
done
if [ "$OS" = "linux" ]; then
PACKAGE_SRC="$FLUENT_ROOT/packages/linux-$ARCH"
PACKAGE_DST="$FLUENT_DIST/packages/linux-$ARCH"
if [ -d "$PACKAGE_SRC" ]; then
mkdir -p "$PACKAGE_DST"
cp -R "$PACKAGE_SRC/." "$PACKAGE_DST/"
else
echo "[error] fluent-bit package directory not found: $PACKAGE_SRC"
return 1
fi
fi
rm -f "$FLUENT_DIST/.gitignore"
rm -f "$FLUENT_DIST"/logs.db*
rm -rf "$FLUENT_DIST/storage"
return 0
}
function verify_fluent_bit_package_matrix() {
FLUENT_ROOT=$1
ARCH=$2
REQUIRED_FILES=()
if [ "$ARCH" = "amd64" ]; then
REQUIRED_FILES=(
"packages/linux-amd64/fluent-bit_4.2.2_amd64.deb"
"packages/linux-amd64/fluent-bit-4.2.2-1.x86_64.rpm"
)
elif [ "$ARCH" = "arm64" ]; then
REQUIRED_FILES=(
"packages/linux-arm64/fluent-bit_4.2.2_arm64.deb"
"packages/linux-arm64/fluent-bit-4.2.2-1.aarch64.rpm"
)
else
echo "[error] unsupported arch for fluent-bit package validation: $ARCH"
return 1
fi
MISSING=0
for FILE in "${REQUIRED_FILES[@]}"; do
if [ ! -f "$FLUENT_ROOT/$FILE" ]; then
echo "[error] fluent-bit matrix package missing: $FLUENT_ROOT/$FILE"
MISSING=1
fi
done
if [ "$MISSING" -ne 0 ]; then
return 1
fi
return 0
}
function lookup-version() {
FILE=$1
VERSION_DATA=$(cat "$FILE")
@@ -179,7 +218,7 @@ function lookup-version() {
echo "$VERSION"
else
echo "could not match version"
exit
exit 1
fi
}

View File

@@ -1,7 +1,7 @@
package teaconst
const (
Version = "1.4.9" //1.3.8.2
Version = "1.5.0" //1.3.8.2
ProductName = "Edge DNS"
ProcessName = "edge-dns"