#!/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/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