From eab9b6c02dc9f67827abe47a4bcca91ef309097a Mon Sep 17 00:00:00 2001 From: mei Date: Sat, 14 Dec 2024 17:23:01 +0800 Subject: [PATCH] update --- nezha.sh | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 nezha.sh diff --git a/nezha.sh b/nezha.sh new file mode 100644 index 0000000..7f81e2e --- /dev/null +++ b/nezha.sh @@ -0,0 +1,198 @@ +#!/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() { + deps="wget unzip grep" + set -- "$api_list" + for dep in $deps; do + if ! command -v "$dep" >/dev/null 2>&1; then + err "$dep not found, please install it first." + exit 1 + fi + done +} + +geo_check() { + api_list="https://blog.cloudflare.com/cdn-cgi/trace https://developers.cloudflare.com/cdn-cgi/trace" + ua="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0" + set -- "$api_list" + for url in $api_list; do + text="$(curl -A "$ua" -m 10 -s "$url")" + endpoint="$(echo "$text" | sed -n 's/.*h=\([^ ]*\).*/\1/p')" + if echo "$text" | grep -qw 'CN'; then + isCN=true + break + elif echo "$url" | grep -q "$endpoint"; then + break + fi + done +} + +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" + ;; + *) + err "Unknown architecture: $uname" + 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 + + ## China_IP + if [ -z "$CN" ]; then + geo_check + if [ -n "$isCN" ]; then + CN=true + fi + fi + + if [ -z "$CN" ]; then + GITHUB_URL="github.com" + else + GITHUB_URL="gitee.com" + fi +} + +install() { + echo "Installing..." + + if [ -z "$CN" ]; then + NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/latest/download/nezha-agent_${os}_${os_arch}.zip" + else + _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/agent/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') + NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_${os}_${os_arch}.zip" + fi + + _cmd="wget -t 2 -T 60 -O /tmp/nezha-agent_${os}_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" + if ! eval "$_cmd"; then + err "Download nezha-agent release failed, check your network connectivity" + exit 1 + fi + + sudo mkdir -p $NZ_AGENT_PATH + + sudo unzip -qo /tmp/nezha-agent_${os}_${os_arch}.zip -d $NZ_AGENT_PATH && + sudo rm -rf /tmp/nezha-agent_${os}_${os_arch}.zip + + 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 \ No newline at end of file