mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-05-13 17:39:41 +00:00
feat: implement self-hosted scripts and agent binary proxy with tar.gz conversion
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
#!/bin/sh
|
||||
|
||||
NZ_BASE_PATH="/opt/nezha"
|
||||
NZ_AGENT_PATH="${NZ_BASE_PATH}/agent"
|
||||
|
||||
red='\033[0;31m'
|
||||
green='\033[0;32m'
|
||||
yellow='\033[0;33m'
|
||||
plain='\033[0m'
|
||||
|
||||
err() {
|
||||
printf "${red}%s${plain}\n" "$*" >&2
|
||||
}
|
||||
|
||||
success() {
|
||||
printf "${green}%s${plain}\n" "$*"
|
||||
}
|
||||
|
||||
info() {
|
||||
printf "${yellow}%s${plain}\n" "$*"
|
||||
}
|
||||
|
||||
sudo() {
|
||||
myEUID=$(id -ru)
|
||||
if [ "$myEUID" -ne 0 ]; then
|
||||
if command -v sudo > /dev/null 2>&1; then
|
||||
command sudo "$@"
|
||||
else
|
||||
err "ERROR: sudo is not installed on the system, the action cannot be proceeded."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
deps_check() {
|
||||
local deps="curl tar grep"
|
||||
local _err=0
|
||||
local missing=""
|
||||
|
||||
for dep in $deps; do
|
||||
if ! command -v "$dep" >/dev/null 2>&1; then
|
||||
_err=1
|
||||
missing="${missing} $dep"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$_err" -ne 0 ]; then
|
||||
err "Missing dependencies:$missing. Please install them and try again."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
env_check() {
|
||||
mach=$(uname -m)
|
||||
case "$mach" in
|
||||
amd64|x86_64) os_arch="amd64" ;;
|
||||
i386|i686) os_arch="386" ;;
|
||||
aarch64|arm64) os_arch="arm64" ;;
|
||||
*arm*) os_arch="arm" ;;
|
||||
s390x) os_arch="s390x" ;;
|
||||
riscv64) os_arch="riscv64" ;;
|
||||
mips) os_arch="mips" ;;
|
||||
mipsel|mipsle) os_arch="mipsle" ;;
|
||||
loongarch64) os_arch="loong64" ;;
|
||||
*) err "Unknown architecture: $mach"; exit 1 ;;
|
||||
esac
|
||||
|
||||
system=$(uname)
|
||||
case "$system" in
|
||||
*Linux*) os="linux" ;;
|
||||
*Darwin*) os="darwin" ;;
|
||||
*FreeBSD*) os="freebsd" ;;
|
||||
*) err "Unknown architecture: $system"; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
init() {
|
||||
deps_check
|
||||
env_check
|
||||
}
|
||||
|
||||
install() {
|
||||
info "Installing nezha-agent..."
|
||||
|
||||
if [ -n "$NZ_DASHBOARD_URL" ]; then
|
||||
NZ_AGENT_URL="${NZ_DASHBOARD_URL}/script/bin/${os}/${os_arch}"
|
||||
FILE_EXT="tar.gz"
|
||||
else
|
||||
# Fallback to GitHub
|
||||
NZ_AGENT_URL="https://github.com/nezhahq/agent/releases/latest/download/nezha-agent_${os}_${os_arch}.zip"
|
||||
FILE_EXT="zip"
|
||||
info "NZ_DASHBOARD_URL not found, falling back to GitHub..."
|
||||
fi
|
||||
|
||||
_cmd="curl -fsSL \"$NZ_AGENT_URL\" -o /tmp/nezha-agent.${FILE_EXT}"
|
||||
|
||||
if ! eval "$_cmd"; then
|
||||
err "Download nezha-agent failed from $NZ_AGENT_URL, check your network connectivity"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo mkdir -p $NZ_AGENT_PATH
|
||||
|
||||
if [ "$FILE_EXT" = "tar.gz" ]; then
|
||||
sudo tar -zxf /tmp/nezha-agent.tar.gz -C $NZ_AGENT_PATH
|
||||
else
|
||||
if command -v unzip >/dev/null 2>&1; then
|
||||
sudo unzip -qo /tmp/nezha-agent.zip -d $NZ_AGENT_PATH
|
||||
else
|
||||
err "unzip not found, and could not use tar for zip file. Please install unzip or use a dashboard that supports tar.gz conversion."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
sudo rm -rf /tmp/nezha-agent.${FILE_EXT}
|
||||
|
||||
path="$NZ_AGENT_PATH/config.yml"
|
||||
if [ -f "$path" ]; then
|
||||
random=$(LC_ALL=C tr -dc a-z0-9 </dev/urandom | head -c 5)
|
||||
path=$(printf "%s" "$NZ_AGENT_PATH/config-$random.yml")
|
||||
fi
|
||||
|
||||
if [ -z "$NZ_SERVER" ]; then
|
||||
err "NZ_SERVER should not be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$NZ_CLIENT_SECRET" ]; then
|
||||
err "NZ_CLIENT_SECRET should not be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
env="NZ_UUID=$NZ_UUID NZ_SERVER=$NZ_SERVER NZ_CLIENT_SECRET=$NZ_CLIENT_SECRET NZ_TLS=$NZ_TLS NZ_DISABLE_AUTO_UPDATE=$NZ_DISABLE_AUTO_UPDATE NZ_DISABLE_FORCE_UPDATE=$DISABLE_FORCE_UPDATE NZ_DISABLE_COMMAND_EXECUTE=$NZ_DISABLE_COMMAND_EXECUTE NZ_SKIP_CONNECTION_COUNT=$NZ_SKIP_CONNECTION_COUNT"
|
||||
|
||||
sudo "${NZ_AGENT_PATH}"/nezha-agent service -c "$path" uninstall >/dev/null 2>&1
|
||||
_cmd="sudo env $env $NZ_AGENT_PATH/nezha-agent service -c $path install"
|
||||
if ! eval "$_cmd"; then
|
||||
err "Install nezha-agent service failed"
|
||||
sudo "${NZ_AGENT_PATH}"/nezha-agent service -c "$path" uninstall >/dev/null 2>&1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
success "nezha-agent successfully installed"
|
||||
}
|
||||
|
||||
uninstall() {
|
||||
find "$NZ_AGENT_PATH" -type f -name "*config*.yml" | while read -r file; do
|
||||
sudo "$NZ_AGENT_PATH/nezha-agent" service -c "$file" uninstall
|
||||
sudo rm "$file"
|
||||
done
|
||||
info "Uninstallation completed."
|
||||
}
|
||||
|
||||
if [ "$1" = "uninstall" ]; then
|
||||
uninstall
|
||||
exit
|
||||
fi
|
||||
|
||||
init
|
||||
install
|
||||
Reference in New Issue
Block a user