From 7132b6d671d48eb9ace84831666b09377643f84a Mon Sep 17 00:00:00 2001 From: UUBulb <35923940+uubulb@users.noreply.github.com> Date: Sat, 30 Nov 2024 13:49:06 +0800 Subject: [PATCH] init v1 script (#8) * init v1 script * . * complete dashboard script * init agent script (posix) * complete agent script (posix) --- .gitignore | 2 + Makefile | 2 +- README.md | 22 +- {extras => agent}/install.ps1 | 0 agent/install.sh | 165 +++ cmd/scriptgen/main.go | 72 +- extras/config.yaml | 14 +- extras/docker-compose.yaml | 9 +- extras/install.command | 293 ------ go.mod | 2 + go.sum | 2 + install.sh | 796 +++++---------- install_en.sh | 800 +++++---------- locale.json | 218 ---- nezha/i18n.sh | 180 ++++ nezha/template.pot | 289 ++++++ nezha/template.sh | 617 ++++++++++++ nezha/translations/en_US/LC_MESSAGES/nezha.mo | Bin 0 -> 7353 bytes nezha/translations/en_US/LC_MESSAGES/nezha.po | 308 ++++++ nezha/translations/zh_CN/LC_MESSAGES/nezha.mo | Bin 0 -> 6953 bytes nezha/translations/zh_CN/LC_MESSAGES/nezha.po | 300 ++++++ template.sh | 941 ------------------ 22 files changed, 2394 insertions(+), 2638 deletions(-) create mode 100644 .gitignore rename {extras => agent}/install.ps1 (100%) create mode 100644 agent/install.sh delete mode 100644 extras/install.command create mode 100644 go.sum delete mode 100644 locale.json create mode 100644 nezha/i18n.sh create mode 100644 nezha/template.pot create mode 100644 nezha/template.sh create mode 100644 nezha/translations/en_US/LC_MESSAGES/nezha.mo create mode 100644 nezha/translations/en_US/LC_MESSAGES/nezha.po create mode 100644 nezha/translations/zh_CN/LC_MESSAGES/nezha.mo create mode 100644 nezha/translations/zh_CN/LC_MESSAGES/nezha.po delete mode 100644 template.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93bfd12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ +.DS_Store diff --git a/Makefile b/Makefile index 1b3a239..6e7c937 100644 --- a/Makefile +++ b/Makefile @@ -2,5 +2,5 @@ LOCALES := zh_CN en_US run: @for locale in $(LOCALES); do \ - go run ./cmd/scriptgen/main.go locale.json $$locale; \ + go run ./cmd/scriptgen/main.go nezha/translations $$locale; \ done diff --git a/README.md b/README.md index 3a132be..872edcc 100644 --- a/README.md +++ b/README.md @@ -1,21 +1 @@ -这里存放着所有关于哪吒监控官方安装脚本的文件。 - -如何贡献: -1. 仅更新 `template.sh`,不要编辑 `install.sh` 或者 `install_en.sh`,因为它们是生成的文件。如果你需要文本输出,请使用 Go 模板(比如 `{{.Placeholder}}`)。 -2. `template.sh` 必须兼容 POSIX sh,可以使用 确认。 -2. 如果你在 `template.sh` 添加了任何模板,请同步更新 `locale.json`。 -3. 运行 `make`。如果不能运行,请检查是否安装了 `go` 和 `make`。 - -对于其它没有本地化的脚本(比如 Windows 和 macOS 的),请直接更改。 - ---- - -Here lies everything related to the official Nezha installation script. - -How to contribute: -1. Update `template.sh` only. Do not edit `install.sh` or `install_en.sh`, for they're generated files. Use Go templates (e.g. `{{.Placeholder}}`) if printing text is needed. -2. `template.sh` must be POSIX-compliant. To confirm it, you can use . -3. Update `locale.json` if any template is added in `template.sh`. -4. Run `make`. Remember to have `go` and `make` installed. - -For other scripts that don't have localization (like the Windows or macOS one), edit them directly. +Nezha Installation scripts (updated for v1) diff --git a/extras/install.ps1 b/agent/install.ps1 similarity index 100% rename from extras/install.ps1 rename to agent/install.ps1 diff --git a/agent/install.sh b/agent/install.sh new file mode 100644 index 0000000..40ee88f --- /dev/null +++ b/agent/install.sh @@ -0,0 +1,165 @@ +#!/bin/sh + +NZ_BASE_PATH="/opt/nezha" +NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" + +red='\033[0;31m' +green='\033[0;32m' +plain='\033[0m' + +err() { + printf "${red}%s${plain}\n" "$*" >&2 +} + +success() { + printf "${green}%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) + 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_linux_${os_arch}.zip" + else + NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/latest/download/nezha-agent_linux_${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 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 0 { + orig := matches[0][0] + translated := fmt.Sprintf("\"%s\"", gettext.PGettext("", matches[0][1])) + newline = strings.ReplaceAll(line, orig, translated) + } else { + newline = line + } + + _, err := writer.WriteString(fmt.Sprintln(newline)) + if err != nil { + fmt.Println("Error writing to file:", err) + return err + } + } + + return nil } diff --git a/extras/config.yaml b/extras/config.yaml index b1f1cdf..cc25512 100644 --- a/extras/config.yaml +++ b/extras/config.yaml @@ -1,14 +1,4 @@ debug: false -httpport: 80 +listenport: nz_port language: nz_language -grpcport: nz_grpc_port -oauth2: - type: "nz_oauth2_type" #Oauth2 登录接入类型,github/gitlab/jihulab/gitee/gitea - admin: "nz_admin_logins" #管理员列表,半角逗号隔开 - clientid: "nz_github_oauth_client_id" # 在 https://github.com/settings/developers 创建,无需审核 Callback 填 http(s)://域名或IP/oauth2/callback - clientsecret: "nz_github_oauth_client_secret" - endpoint: "" # 如gitea自建需要设置 -site: - brand: "nz_site_title" - cookiename: "nezha-dashboard" #浏览器 Cookie 字段名,可不改 - theme: "default" +sitename: "nz_site_title" diff --git a/extras/docker-compose.yaml b/extras/docker-compose.yaml index 80de003..2f168aa 100644 --- a/extras/docker-compose.yaml +++ b/extras/docker-compose.yaml @@ -1,14 +1,9 @@ -version: "3.3" - services: dashboard: image: nz_image_url + container_name: nezha-dashboard restart: always volumes: - ./data:/dashboard/data - - ./static-custom/static:/dashboard/resource/static/custom:ro - - ./theme-custom/template:/dashboard/resource/template/theme-custom:ro - - ./dashboard-custom/template:/dashboard/resource/template/dashboard-custom:ro ports: - - nz_site_port:80 - - nz_grpc_port:nz_grpc_port + - nz_port:nz_port diff --git a/extras/install.command b/extras/install.command deleted file mode 100644 index 375b2a7..0000000 --- a/extras/install.command +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash - -#======================================================== -# System Required: macOS 10.13+ -# Description: Nezha Agent Install Script (macOS) -# Github: https://github.com/naiba/nezha -#======================================================== - -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' -export PATH=$PATH:/usr/local/bin - -pre_check() { - # check root - [[ $EUID -ne 0 ]] && echo -e "${red}ERROR: ${plain} This script must be run with the root user!\n" && exit 1 - - ## os_arch - if [[ $(uname -m | grep 'x86_64') != "" ]]; then - os_arch="amd64" - elif [[ $(uname -m | grep 'arm64\|arm64e') != "" ]]; then - os_arch="arm64" - fi - - ## China_IP - if [[ -z "${CN}" ]]; then - if [[ $(curl -m 10 -s http://ip-api.com/json |grep 'country' |grep -q 'China') != "" ]]; then - echo "According to the information provided by ip-api.com, the current IP may be in China" - read -e -r -p "Is the installation done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3):" input - case $input in - [yY][eE][sS] | [yY]) - echo "Use Chinese Mirror" - CN=true - ;; - - [nN][oO] | [nN]) - echo "No Use Chinese Mirror" - ;; - - [3]) - echo "Use Custom Mirror" - read -e -r -p "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io), leave blank to nouse: " input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - - ;; - *) - echo "No Use Chinese Mirror" - ;; - esac - fi - fi - - if [[ -n "${CUSTOM_MIRROR}" ]]; then - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL=$CUSTOM_MIRROR - else - if [[ -z "${CN}" ]]; then - GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master" - GITHUB_URL="github.com" - else - GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" - GITHUB_URL="gitee.com" - fi - fi -} - -before_show_menu() { - echo && echo -n -e "${yellow}* Press Enter to return to the main menu *${plain}" && read temp - show_menu -} - -install_agent() { - echo -e "> Install Nezha Agent" - - echo -e "Obtaining Agent version" - - local version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ ! -n "$version" ]; then - 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)}}}') - fi - if [ ! -n "$version" ]; then - version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - if [ ! -n "$version" ]; then - version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - - if [ ! -n "$version" ]; then - echo -e "Fail to obtaine agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest" - return 0 - else - echo -e "The current latest version is: ${version}" - fi - - # Nezha Agent Folder - mkdir -p $NZ_AGENT_PATH - chmod -R 777 $NZ_AGENT_PATH - - echo -e "Downloading Agent" - if [[ -z $CN ]]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${version}/nezha-agent_darwin_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${version}/nezha-agent_darwin_${os_arch}.zip" - fi - curl -o nezha-agent_darwin_${os_arch}.zip -L -f --retry 2 --retry-max-time 60 $NZ_AGENT_URL >/dev/null 2>&1 - if [[ $? != 0 ]]; then - echo -e "${red}Fail to download agent, please check if the network can link ${GITHUB_URL}${plain}" - return 0 - fi - - unzip -qo nezha-agent_darwin_${os_arch}.zip && - mv nezha-agent $NZ_AGENT_PATH && - rm -rf nezha-agent_darwin_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -modify_agent_config() { - echo -e "> Modify Agent Configuration" - - if [ $# -lt 3 ]; then - echo "Please add Agent in the admin panel first, record the secret" && - read -ep "Please enter a domain that resolves to the IP where the panel is located (no CDN sets): " nz_grpc_host && - read -ep "Please enter the panel RPC port (default 5555): " nz_grpc_port && - read -ep "Please enter the Agent secret: " nz_client_secret && - read -ep "Do you want to enable SSL/TLS encryption for the gRPC port (--tls)? Press [y] if yes, the default is not required, and users can press Enter to skip if you don't understand: " nz_grpc_proxy - grep -qiw 'Y' <<<"${nz_grpc_proxy}" && args='--tls' - if [[ -z "${nz_grpc_host}" || -z "${nz_client_secret}" ]]; then - echo -e "${red}All options cannot be empty${plain}" - before_show_menu - return 1 - fi - if [[ -z "${nz_grpc_port}" ]]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args=" $*" - fi - fi - - ${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 - - if [ $? -ne 0 ]; then - ${NZ_AGENT_PATH}/nezha-agent service uninstall >/dev/null 2>&1 - ${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 - fi - - echo -e "Agent configuration ${green} modified successfully, please wait for agent self-restart to take effect${plain}" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -show_agent_log() { - echo -e "> > View Agent Log" - - tail -n 10 /var/log/nezha-agent.err.log - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -uninstall_agent() { - echo -e "> Uninstall Agent" - - ${NZ_AGENT_PATH}/nezha-agent service uninstall - - rm -rf $NZ_AGENT_PATH - clean_all - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -restart_agent() { - echo -e "> Restart Agent" - - ${NZ_AGENT_PATH}/nezha-agent service restart - - if [[ $# == 0 ]]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - rm -rf ${NZ_BASE_PATH} - fi -} - -show_usage() { - echo "Nezha Agent Management Script Usage: " - echo "--------------------------------------------------------" - echo "./nezha.sh install_agent - Install Agent" - echo "./nezha.sh modify_agent_config - Modify Agent Configuration" - echo "./nezha.sh show_agent_log - View Agent Log" - echo "./nezha.sh uninstall_agent - Uninstall Agent" - echo "./nezha.sh restart_agent - Restart Agent" - echo "./nezha.sh update_script - Update Script" - echo "--------------------------------------------------------" -} - -show_menu() { - echo -e " - ${green}Nezha Agent Management Script${plain} ${red}macOS${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} Install Agent - ${green}2.${plain} Modify Agent Configuration - ${green}3.${plain} View Agent Log - ${green}4.${plain} Uninstall Agent - ${green}5.${plain} Restart Agent - ————————————————- - ${green}0.${plain} Exit Script - " - echo && read -ep "Please enter [0-5]: " num - case "${num}" in - 0) - exit 0 - ;; - 1) - install_agent - ;; - 2) - modify_agent_config - ;; - 3) - show_agent_log - ;; - 4) - uninstall_agent - ;; - 5) - restart_agent - ;; - *) - echo -e "${red}Please enter the correct number [0-5]${plain}" - ;; - esac -} - -pre_check - -if [[ $# > 0 ]]; then - case $1 in - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 - ;; - "restart_agent") - restart_agent 0 - ;; - *) show_usage ;; - esac -else - show_menu -fi diff --git a/go.mod b/go.mod index 63a6168..65f0087 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/nezhahq/scripts go 1.20 + +require github.com/chai2010/gettext-go v1.0.3 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..c6f92b9 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/chai2010/gettext-go v1.0.3 h1:9liNh8t+u26xl5ddmWLmsOsdNLwkdRTg5AG+JnTiM80= +github.com/chai2010/gettext-go v1.0.3/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= diff --git a/install.sh b/install.sh index 8e43ba5..e20dd42 100644 --- a/install.sh +++ b/install.sh @@ -1,9 +1,7 @@ #!/bin/sh -# Generated by nezhahq/scriptgen. DO NOT EDIT NZ_BASE_PATH="/opt/nezha" NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" -NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" @@ -11,10 +9,22 @@ red='\033[0;31m' green='\033[0;32m' yellow='\033[0;33m' plain='\033[0m' -export PATH="$PATH:/usr/local/bin" -os_arch="" -[ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1' +err() { + printf "${red}%s${plain}\n" "$*" >&2 +} + +success() { + printf "${green}%s${plain}\n" "$*" +} + +info() { + printf "${yellow}%s${plain}\n" "$*" +} + +println() { + printf "$*\n" +} sudo() { myEUID=$(id -ru) @@ -30,27 +40,44 @@ sudo() { fi } -check_systemd() { - if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then - echo "不支持此系统:未找到 systemctl 命令" +mustn() { + set -- "$@" + + if ! "$@" >/dev/null 2>&1; then + err "运行 '$*' 失败。" exit 1 fi } -err() { - printf "${red}%s${plain}\n" "$*" >&2 -} - -success() { - printf "${green}%s${plain}\n" "$*" +deps_check() { + deps="curl wget unzip grep" + set -- "$api_list" + for dep in $deps; do + if ! command -v "$dep" >/dev/null 2>&1; then + err "未找到依赖 $dep,请先安装。" + exit 1 + fi + done } -info() { - printf "${yellow}%s${plain}\n" "$*" +check_init() { + init=$(readlink /sbin/init) + case "$init" in + *systemd*) + INIT=systemd + ;; + *openrc-init*|*busybox*) + INIT=openrc + ;; + *) + err "Unknown init" + exit 1 + ;; + esac } geo_check() { - api_list="https://blog.cloudflare.com/cdn-cgi/trace https://dash.cloudflare.com/cdn-cgi/trace https://developers.cloudflare.com/cdn-cgi/trace" + 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 @@ -65,86 +92,40 @@ geo_check() { done } -pre_check() { - umask 077 - - ## os_arch - if uname -m | grep -q 'x86_64'; then - os_arch="amd64" - elif uname -m | grep -q 'i386\|i686'; then - os_arch="386" - elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then - os_arch="arm64" - elif uname -m | grep -q 'arm'; then - os_arch="arm" - elif uname -m | grep -q 's390x'; then - os_arch="s390x" - elif uname -m | grep -q 'riscv64'; then - os_arch="riscv64" - fi - - ## China_IP - if [ -z "$CN" ]; then - geo_check - if [ -n "$isCN" ]; then - echo "根据geoip api提供的信息,当前IP可能在中国" - printf "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "使用中国镜像" - CN=true - ;; - - [nN][oO] | [nN]) - echo "不使用中国镜像" - ;; - - [3]) - echo "使用自定义镜像" - printf "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用:" - read -r input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - ;; - *) - echo "不使用中国镜像" - ;; - esac - fi - fi - - if [ -n "$CUSTOM_MIRROR" ]; then - GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" - GITHUB_URL=$CUSTOM_MIRROR - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - else - if [ -z "$CN" ]; then - GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" - GITHUB_URL="github.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" " - Docker_IMG="ghcr.io\/naiba\/nezha-dashboard" - else - GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" - GITHUB_URL="gitee.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - fi - fi +env_check() { + uname=$(uname -m) + case "$uname" in + amd64) + 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" + ;; + *) + err "未知架构:$uname" + exit 1 + ;; + esac } + installation_check() { if docker compose version >/dev/null 2>&1; then DOCKER_COMPOSE_COMMAND="docker compose" if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") + NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}":"{{.Tag}}" | grep -w "nezha-dashboard") if [ -n "$NEZHA_IMAGES" ]; then echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" echo "$NEZHA_IMAGES" @@ -158,7 +139,7 @@ installation_check() { elif command -v docker-compose >/dev/null 2>&1; then DOCKER_COMPOSE_COMMAND="docker-compose" if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") + NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}":"{{.Tag}}" | grep -w "nezha-dashboard") if [ -n "$NEZHA_IMAGES" ]; then echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" echo "$NEZHA_IMAGES" @@ -179,7 +160,7 @@ installation_check() { select_version() { if [ -z "$IS_DOCKER_NEZHA" ]; then - info "请自行选择您的安装方式(如果你是安装Agent,输入哪个都是一样的):" + info "请自行选择您的安装方式:" info "1. Docker" info "2. 独立安装" while true; do @@ -202,10 +183,67 @@ select_version() { fi } +init() { + deps_check + check_init + env_check + installation_check + + ## China_IP + if [ -z "$CN" ]; then + geo_check + if [ -n "$isCN" ]; then + echo "根据geoip api提供的信息,当前IP可能在中国" + printf "否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" + read -r input + case $input in + [yY][eE][sS] | [yY]) + echo "使用中国镜像" + CN=true + ;; + + [nN][oO] | [nN]) + echo "不使用中国镜像" + ;; + + [3]) + echo "使用自定义镜像" + printf "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用:" + read -r input + case $input in + *) + CUSTOM_MIRROR=$input + ;; + esac + ;; + *) + echo "不使用中国镜像" + ;; + esac + fi + fi + + if [ -n "$CUSTOM_MIRROR" ]; then + GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" + GITHUB_URL=$CUSTOM_MIRROR + Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" + else + if [ -z "$CN" ]; then + GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" + GITHUB_URL="github.com" + Docker_IMG="ghcr.io\/nezhahq\/nezha" + else + GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" + GITHUB_URL="gitee.com" + Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" + fi + fi +} + update_script() { echo "> 更新脚本" - curl -sL https://${GITHUB_RAW_URL}/install.sh -o /tmp/nezha.sh + curl -sL "https://${GITHUB_RAW_URL}/install.sh" -o /tmp/nezha.sh mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh echo "3s后执行新脚本" @@ -220,55 +258,15 @@ before_show_menu() { show_menu } -install_base() { - (command -v curl >/dev/null 2>&1 && command -v wget >/dev/null 2>&1 && command -v unzip >/dev/null 2>&1 && command -v getenforce >/dev/null 2>&1) || - (install_soft curl wget unzip) -} - -install_arch() { - info "提示:Arch安装libselinux需添加nezha-agent用户,安装完会自动删除,建议手动检查一次" - read -r -p "是否安装libselinux? [Y/n] " input - case $input in - [yY][eE][sS] | [yY]) - useradd -m nezha-agent - sed -i "$ a\nezha-agent ALL=(ALL ) NOPASSWD:ALL" /etc/sudoers - sudo -iu nezha-agent bash -c 'gpg --keyserver keys.gnupg.net --recv-keys 4695881C254508D1; - cd /tmp; git clone https://aur.archlinux.org/libsepol.git; cd libsepol; makepkg -si --noconfirm --asdeps; cd ..; - git clone https://aur.archlinux.org/libselinux.git; cd libselinux; makepkg -si --noconfirm; cd ..; - rm -rf libsepol libselinux' - sed -i '/nezha-agent/d' /etc/sudoers && sleep 30s && killall -u nezha-agent && userdel -r nezha-agent - info "提示: 已删除用户nezha-agent,请务必手动核查一遍!" - ;; - [nN][oO] | [nN]) - echo "不安装libselinux" - ;; - *) - echo "不安装libselinux" - exit 0 - ;; - esac -} - -install_soft() { - (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install "$@" selinux-policy -y) || - (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install "$@" selinux-utils -y) || - (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu "$@" base-devel --noconfirm && install_arch) || - (command -v apt-get >/dev/null 2>&1 && sudo apt-get update && sudo apt-get install "$@" selinux-utils -y) || - (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add "$@" -f) -} - -install_dashboard() { - check_systemd - install_base - - echo "> 安装面板" +install() { + echo "> 安装" # Nezha Monitoring Folder if [ ! "$FRESH_INSTALL" = 0 ]; then sudo mkdir -p $NZ_DASHBOARD_PATH else echo "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。" - printf "是否退出安装? [Y/n] " + printf "是否退出安装? [Y/n]" read -r input case $input in [yY][eE][sS] | [yY]) @@ -277,6 +275,7 @@ install_dashboard() { ;; [nN][oO] | [nN]) echo "继续安装" + exit 0 ;; *) echo "退出安装" @@ -285,165 +284,15 @@ install_dashboard() { esac fi - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - install_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - install_dashboard_standalone - fi - - modify_dashboard_config 0 - - if [ $# = 0 ]; then - before_show_menu - fi -} - -install_dashboard_docker() { - if [ ! "$FRESH_INSTALL" = 0 ]; then - if ! command -v docker >/dev/null 2>&1; then - echo "正在安装 Docker" - if [ "$os_alpine" != 1 ]; then - if ! curl -sL https://${Get_Docker_URL} | sudo bash -s "${Get_Docker_Argu}"; then - err "脚本获取失败,请检查本机能否链接 ${Get_Docker_URL}" - return 0 - fi - sudo systemctl enable docker.service - sudo systemctl start docker.service - else - sudo apk add docker docker-compose - sudo rc-update add docker - sudo rc-service docker start - fi - success "Docker 安装成功" - installation_check - fi - fi -} - -install_dashboard_standalone() { - if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then - sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 - fi -} - -selinux() { - #Check SELinux - if command -v getenforce >/dev/null 2>&1; then - if getenforce | grep '[Ee]nfor'; then - echo "SELinux是开启状态,正在关闭!" - sudo setenforce 0 >/dev/null 2>&1 - find_key="SELINUX=" - sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config - fi - fi -} - -install_agent() { - install_base - selinux - - echo "> 安装监控Agent" - - echo "正在获取监控Agent版本号" - - - _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - - if [ -z "$_version" ]; then - err "获取 Agent 版本号失败,请检查本机能否链接 https://api.github.com/repos/nezhahq/agent/releases/latest" - return 1 - else - echo "当前最新版本为: ${_version}" - fi - - # Nezha Monitoring Folder - sudo mkdir -p $NZ_AGENT_PATH - - echo "正在下载监控端" - if [ -z "$CN" ]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - fi - - _cmd="wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "Release 下载失败,请检查本机能否连接 ${GITHUB_URL}" - return 1 - fi - - sudo unzip -qo nezha-agent_linux_${os_arch}.zip && - sudo mv nezha-agent $NZ_AGENT_PATH && - sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi + modify_config 0 if [ $# = 0 ]; then before_show_menu fi } -modify_agent_config() { - echo "> 修改 Agent 配置" - - if [ $# -lt 3 ]; then - echo "请先在管理面板上添加Agent,记录下密钥" - printf "请输入一个解析到面板所在IP的域名(不可套CDN): " - read -r nz_grpc_host - printf "请输入面板RPC端口 (默认值 5555): " - read -r nz_grpc_port - printf "请输入Agent 密钥: " - read -r nz_client_secret - printf "是否启用针对 gRPC 端口的 SSL/TLS加密 (--tls),需要请按 [y],默认是不需要,不理解用户可回车跳过: " - read -r nz_grpc_proxy - echo "${nz_grpc_proxy}" | grep -qiw 'Y' && args='--tls' - if [ -z "$nz_grpc_host" ] || [ -z "$nz_client_secret" ]; then - err "所有选项都不能为空" - before_show_menu - return 1 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args="$*" - fi - fi - - _cmd="sudo ${NZ_AGENT_PATH}/nezha-agent service install -s $nz_grpc_host:$nz_grpc_port -p $nz_client_secret $args >/dev/null 2>&1" - - if ! eval "$_cmd"; then - sudo "${NZ_AGENT_PATH}"/nezha-agent service uninstall >/dev/null 2>&1 - sudo "${NZ_AGENT_PATH}"/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p "$nz_client_secret" "$args" >/dev/null 2>&1 - fi - - success "Agent 配置 修改成功,请稍等 Agent 重启生效" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -modify_dashboard_config() { - echo "> 修改 Dashboard 配置" +modify_config() { + echo "> 修改配置" if [ "$IS_DOCKER_NEZHA" = 1 ]; then if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then @@ -465,52 +314,53 @@ modify_dashboard_config() { return 0 fi - echo "关于 GitHub Oauth2 应用:在 https://github.com/settings/developers 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback" - echo "关于 Gitee Oauth2 应用:在 https://gitee.com/oauth/applications 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback" - printf "请输入 OAuth2 提供商(github/gitlab/jihulab/gitee,默认 github): " - read -r nz_oauth2_type - printf "请输入 Oauth2 应用的 Client ID: " - read -r nz_github_oauth_client_id - printf "请输入 Oauth2 应用的 Client Secret: " - read -r nz_github_oauth_client_secret - printf "请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开: " - read -r nz_admin_logins - printf "请输入站点标题: " - read -r nz_site_title - printf "请输入站点访问端口: (默认 8008)" - read -r nz_site_port - printf "请输入用于 Agent 接入的 RPC 端口: (默认 5555)" - read -r nz_grpc_port - - if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then - err "所有选项都不能为空" + + printf "请输入站点标题: " + read -r nz_site_title + printf "请输入暴露端口: (默认 8008)" + read -r nz_port + info "请指定后台语言" + info "1. 中文(简体)" + info "2. 中文(台灣)" + info "3. English" + while true; do + printf "请输入选项 [1-3]" + read -r option + case "${option}" in + 1) + nz_lang=zh_CN + break + ;; + 2) + nz_lang=zh_TW + break + ;; + 3) + nz_lang=en_US + break + ;; + *) + err "请输入正确的选项 [1-3]" + ;; + esac + done + + if [ -z "$nz_lang" ] || [ -z "$nz_site_title" ]; then + err ""所有选项都不能为空"" before_show_menu return 1 fi - if [ -z "$nz_site_port" ]; then - nz_site_port=8008 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - if [ -z "$nz_oauth2_type" ]; then - nz_oauth2_type=github + if [ -z "$nz_port" ]; then + nz_port=8008 fi - sed -i "s/nz_oauth2_type/${nz_oauth2_type}/" /tmp/nezha-config.yaml - sed -i "s/nz_admin_logins/${nz_admin_logins}/" /tmp/nezha-config.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_id/${nz_github_oauth_client_id}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /tmp/nezha-config.yaml - sed -i "s/nz_language/zh-CN/" /tmp/nezha-config.yaml + sed -i "s/nz_port/${nz_port}/" /tmp/nezha-config.yaml + sed -i "s/nz_language/${nz_lang}/" /tmp/nezha-config.yaml sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml + sed -i "s/nz_port/${nz_port}/g" /tmp/nezha-docker-compose.yaml sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml fi sudo mkdir -p $NZ_DASHBOARD_PATH/data @@ -521,13 +371,13 @@ modify_dashboard_config() { if [ "$IS_DOCKER_NEZHA" = 0 ]; then echo "正在下载服务文件" - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/services/nezha-dashboard.service >/dev/null 2>&1" if ! eval "$_download"; then err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" return 0 fi - else + elif [ "$INIT" = "openrc" ]; then _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/services/nezha-dashboard >/dev/null 2>&1" if ! eval "$_download"; then err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" @@ -537,6 +387,7 @@ modify_dashboard_config() { fi fi + success "Dashboard 配置 修改成功,请稍等 Dashboard 重启生效" restart_and_update @@ -547,7 +398,7 @@ modify_dashboard_config() { } restart_and_update() { - echo "> 重启并更新面板" + echo "> 重启并更新" if [ "$IS_DOCKER_NEZHA" = 1 ]; then _cmd="restart_and_update_docker" @@ -557,7 +408,7 @@ restart_and_update() { if eval "$_cmd"; then success "哪吒监控 重启成功" - info "默认管理面板地址:域名:站点访问端口" + info "默认地址:域名:站点访问端口" else err "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息" fi @@ -574,33 +425,33 @@ restart_and_update_docker() { } restart_and_update_standalone() { - _version=$(curl -m 10 -sL "https://api.github.com/repos/naiba/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') + _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/naiba\/nezha@/v/g') + _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/nezha@/v/g') fi if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/naiba\/nezha@/v/g') + _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/nezha@/v/g') fi if [ -z "$_version" ]; then _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/nezha/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') fi if [ -z "$_version" ]; then - err "获取 Dashboard 版本号失败,请检查本机能否链接 https://api.github.com/repos/naiba/nezha/releases/latest" + err "获取 Dashboard 版本号失败,请检查本机能否链接 https://api.github.com/repos/nezhahq/nezha/releases/latest" return 1 else echo "当前最新版本为: ${_version}" fi - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo systemctl daemon-reload sudo systemctl stop nezha-dashboard - else + elif [ "$INIT" = "openrc" ]; then sudo rc-service nezha-dashboard stop fi if [ -z "$CN" ]; then - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" + NZ_DASHBOARD_URL="https://${GITHUB_URL}/nezhahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" else NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" fi @@ -608,81 +459,17 @@ restart_and_update_standalone() { sudo wget -qO $NZ_DASHBOARD_PATH/app.zip "$NZ_DASHBOARD_URL" >/dev/null 2>&1 && sudo unzip -qq -o $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm $NZ_DASHBOARD_PATH/app.zip sudo chmod +x $NZ_DASHBOARD_PATH/app - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo systemctl enable nezha-dashboard sudo systemctl restart nezha-dashboard - else + elif [ "$INIT" = "openrc" ]; then sudo rc-update add nezha-dashboard sudo rc-service nezha-dashboard restart fi } -start_dashboard() { - echo "> 启动面板" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="start_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="start_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "哪吒监控 启动成功" - else - err "启动失败,请稍后查看日志信息" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -start_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -start_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl start nezha-dashboard - else - sudo rc-service nezha-dashboard start - fi -} - -stop_dashboard() { - echo "> 停止面板" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="stop_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="stop_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "哪吒监控 停止成功" - else - err "停止失败,请稍后查看日志信息" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -stop_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down -} - -stop_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi -} - -show_dashboard_log() { - echo "> 获取 Dashboard 日志" +show_log() { + echo "> 获取日志" if [ "$IS_DOCKER_NEZHA" = 1 ]; then show_dashboard_log_docker @@ -700,15 +487,15 @@ show_dashboard_log_docker() { } show_dashboard_log_standalone() { - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo journalctl -xf -u nezha-dashboard.service - else + elif [ "$INIT" = "openrc" ]; then sudo tail -n 10 /var/log/nezha-dashboard.err fi } -uninstall_dashboard() { - echo "> 卸载 Dashboard" +uninstall() { + echo "> 卸载" if [ "$IS_DOCKER_NEZHA" = 1 ]; then uninstall_dashboard_docker @@ -716,8 +503,6 @@ uninstall_dashboard() { uninstall_dashboard_standalone fi - clean_all - if [ $# = 0 ]; then before_show_menu fi @@ -726,209 +511,100 @@ uninstall_dashboard() { uninstall_dashboard_docker() { sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down sudo rm -rf $NZ_DASHBOARD_PATH - sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 + sudo docker rmi -f ghcr.io/nezhahq/nezha >/dev/null 2>&1 sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 } uninstall_dashboard_standalone() { sudo rm -rf $NZ_DASHBOARD_PATH - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo systemctl disable nezha-dashboard sudo systemctl stop nezha-dashboard - else + elif [ "$INIT" = "openrc" ]; then sudo rc-update del nezha-dashboard sudo rc-service nezha-dashboard stop fi - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo rm $NZ_DASHBOARD_SERVICE - else + elif [ "$INIT" = "openrc" ]; then sudo rm $NZ_DASHBOARD_SERVICERC fi } -show_agent_log() { - echo "> 获取 Agent 日志" - - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-agent.service - else - sudo tail -n 10 /var/log/nezha-agent.err - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_agent() { - echo "> 卸载 Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall - - sudo rm -rf $NZ_AGENT_PATH - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_agent() { - echo "> 重启 Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service restart - - if [ $# = 0 ]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - sudo rm -rf ${NZ_BASE_PATH} - fi -} - show_usage() { echo "哪吒监控 管理脚本使用方法: " echo "--------------------------------------------------------" - echo "./nezha.sh - 显示管理菜单" - echo "./nezha.sh install_dashboard - 安装面板端" - echo "./nezha.sh modify_dashboard_config - 修改面板配置" - echo "./nezha.sh start_dashboard - 启动面板" - echo "./nezha.sh stop_dashboard - 停止面板" - echo "./nezha.sh restart_and_update - 重启并更新面板" - echo "./nezha.sh show_dashboard_log - 查看面板日志" - echo "./nezha.sh uninstall_dashboard - 卸载管理面板" - echo "--------------------------------------------------------" - echo "./nezha.sh install_agent - 安装监控Agent" - echo "./nezha.sh modify_agent_config - 修改Agent配置" - echo "./nezha.sh show_agent_log - 查看Agent日志" - echo "./nezha.sh uninstall_agent - 卸载Agent" - echo "./nezha.sh restart_agent - 重启Agent" - echo "./nezha.sh update_script - 更新脚本" + echo "./nezha.sh - 显示管理菜单" + echo "./nezha.sh install - 安装面板端" + echo "./nezha.sh modify_config - 修改面板配置" + echo "./nezha.sh restart_and_update - 重启并更新面板" + echo "./nezha.sh show_log - 查看面板日志" + echo "./nezha.sh uninstall - 卸载管理面板" echo "--------------------------------------------------------" } show_menu() { - printf " - ${green}哪吒监控管理脚本${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} 安装面板端 - ${green}2.${plain} 修改面板配置 - ${green}3.${plain} 启动面板 - ${green}4.${plain} 停止面板 - ${green}5.${plain} 重启并更新面板 - ${green}6.${plain} 查看面板日志 - ${green}7.${plain} 卸载管理面板 - ————————————————- - ${green}8.${plain} 安装监控Agent - ${green}9.${plain} 修改Agent配置 - ${green}10.${plain} 查看Agent日志 - ${green}11.${plain} 卸载Agent - ${green}12.${plain} 重启Agent - ————————————————- - ${green}13.${plain} 更新脚本 - ————————————————- - ${green}0.${plain} 退出脚本 - " - echo && printf "请输入选择 [0-13]: " && read -r num + println "${green}哪吒监控管理脚本${plain}" + echo "--- https://github.com/nezhahq/nezha ---" + println "${green}1.${plain} 安装面板端" + println "${green}2.${plain} 修改面板配置" + println "${green}3.${plain} 重启并更新面板" + println "${green}4.${plain} 查看面板日志" + println "${green}5.${plain} 卸载管理面板" + echo "————————————————-" + println "${green}6.${plain} 更新脚本" + echo "————————————————-" + println "${green}0.${plain} 退出脚本" + + echo && printf "请输入选择 [0-6]: " && read -r num case "${num}" in 0) exit 0 ;; 1) - install_dashboard + install ;; 2) - modify_dashboard_config + modify_config ;; 3) - start_dashboard + restart_and_update ;; 4) - stop_dashboard + show_log ;; 5) - restart_and_update + uninstall ;; 6) - show_dashboard_log - ;; - 7) - uninstall_dashboard - ;; - 8) - install_agent - ;; - 9) - modify_agent_config - ;; - 10) - show_agent_log - ;; - 11) - uninstall_agent - ;; - 12) - restart_agent - ;; - 13) update_script ;; *) - err "请输入正确的数字 [0-13]" + err "请输入正确的数字 [0-6]" ;; esac } -pre_check -installation_check +init if [ $# -gt 0 ]; then case $1 in - "install_dashboard") - install_dashboard 0 - ;; - "modify_dashboard_config") - modify_dashboard_config 0 - ;; - "start_dashboard") - start_dashboard 0 + "install") + install 0 ;; - "stop_dashboard") - stop_dashboard 0 + "modify_config") + modify_config 0 ;; "restart_and_update") restart_and_update 0 ;; - "show_dashboard_log") - show_dashboard_log 0 - ;; - "uninstall_dashboard") - uninstall_dashboard 0 - ;; - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 + "show_log") + show_log 0 ;; - "restart_agent") - restart_agent 0 + "uninstall") + uninstall 0 ;; "update_script") update_script 0 diff --git a/install_en.sh b/install_en.sh index 09da9af..4782f33 100644 --- a/install_en.sh +++ b/install_en.sh @@ -1,9 +1,7 @@ #!/bin/sh -# Generated by nezhahq/scriptgen. DO NOT EDIT NZ_BASE_PATH="/opt/nezha" NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" -NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" @@ -11,10 +9,22 @@ red='\033[0;31m' green='\033[0;32m' yellow='\033[0;33m' plain='\033[0m' -export PATH="$PATH:/usr/local/bin" -os_arch="" -[ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1' +err() { + printf "${red}%s${plain}\n" "$*" >&2 +} + +success() { + printf "${green}%s${plain}\n" "$*" +} + +info() { + printf "${yellow}%s${plain}\n" "$*" +} + +println() { + printf "$*\n" +} sudo() { myEUID=$(id -ru) @@ -30,27 +40,44 @@ sudo() { fi } -check_systemd() { - if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then - echo "System not supported: systemctl not found" +mustn() { + set -- "$@" + + if ! "$@" >/dev/null 2>&1; then + err "Run '$*' failed." exit 1 fi } -err() { - printf "${red}%s${plain}\n" "$*" >&2 -} - -success() { - printf "${green}%s${plain}\n" "$*" +deps_check() { + deps="curl 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 } -info() { - printf "${yellow}%s${plain}\n" "$*" +check_init() { + init=$(readlink /sbin/init) + case "$init" in + *systemd*) + INIT=systemd + ;; + *openrc-init*|*busybox*) + INIT=openrc + ;; + *) + err "Unknown init" + exit 1 + ;; + esac } geo_check() { - api_list="https://blog.cloudflare.com/cdn-cgi/trace https://dash.cloudflare.com/cdn-cgi/trace https://developers.cloudflare.com/cdn-cgi/trace" + 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 @@ -65,86 +92,40 @@ geo_check() { done } -pre_check() { - umask 077 - - ## os_arch - if uname -m | grep -q 'x86_64'; then - os_arch="amd64" - elif uname -m | grep -q 'i386\|i686'; then - os_arch="386" - elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then - os_arch="arm64" - elif uname -m | grep -q 'arm'; then - os_arch="arm" - elif uname -m | grep -q 's390x'; then - os_arch="s390x" - elif uname -m | grep -q 'riscv64'; then - os_arch="riscv64" - fi - - ## China_IP - if [ -z "$CN" ]; then - geo_check - if [ -n "$isCN" ]; then - echo "According to the information provided by various geoip api, the current IP may be in China" - printf "Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3): " - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "Use Chinese Mirror" - CN=true - ;; - - [nN][oO] | [nN]) - echo "Do Not Use Chinese Mirror" - ;; - - [3]) - echo "Use Custom Mirror" - printf "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If left blank, it won't be used: " - read -r input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - ;; - *) - echo "Do Not Use Chinese Mirror" - ;; - esac - fi - fi - - if [ -n "$CUSTOM_MIRROR" ]; then - GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" - GITHUB_URL=$CUSTOM_MIRROR - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - else - if [ -z "$CN" ]; then - GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" - GITHUB_URL="github.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" " - Docker_IMG="ghcr.io\/naiba\/nezha-dashboard" - else - GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" - GITHUB_URL="gitee.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - fi - fi +env_check() { + uname=$(uname -m) + case "$uname" in + amd64) + 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" + ;; + *) + err "Unknown architecture: $uname" + exit 1 + ;; + esac } + installation_check() { if docker compose version >/dev/null 2>&1; then DOCKER_COMPOSE_COMMAND="docker compose" if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") + NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}":"{{.Tag}}" | grep -w "nezha-dashboard") if [ -n "$NEZHA_IMAGES" ]; then echo "Docker image with nezha-dashboard repository exists:" echo "$NEZHA_IMAGES" @@ -158,7 +139,7 @@ installation_check() { elif command -v docker-compose >/dev/null 2>&1; then DOCKER_COMPOSE_COMMAND="docker-compose" if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") + NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}":"{{.Tag}}" | grep -w "nezha-dashboard") if [ -n "$NEZHA_IMAGES" ]; then echo "Docker image with nezha-dashboard repository exists:" echo "$NEZHA_IMAGES" @@ -179,7 +160,7 @@ installation_check() { select_version() { if [ -z "$IS_DOCKER_NEZHA" ]; then - info "Select your installation method(Input anything is ok if you are installing agent):" + info "Select your installation method:" info "1. Docker" info "2. Standalone" while true; do @@ -202,10 +183,67 @@ select_version() { fi } +init() { + deps_check + check_init + env_check + installation_check + + ## China_IP + if [ -z "$CN" ]; then + geo_check + if [ -n "$isCN" ]; then + echo "According to the information provided by various geoip api, the current IP may be in China" + printf "Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3): " + read -r input + case $input in + [yY][eE][sS] | [yY]) + echo "Use Chinese Mirror" + CN=true + ;; + + [nN][oO] | [nN]) + echo "Do Not Use Chinese Mirror" + ;; + + [3]) + echo "Use Custom Mirror" + printf "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If left blank, it won't be used: " + read -r input + case $input in + *) + CUSTOM_MIRROR=$input + ;; + esac + ;; + *) + echo "Do Not Use Chinese Mirror" + ;; + esac + fi + fi + + if [ -n "$CUSTOM_MIRROR" ]; then + GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" + GITHUB_URL=$CUSTOM_MIRROR + Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" + else + if [ -z "$CN" ]; then + GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" + GITHUB_URL="github.com" + Docker_IMG="ghcr.io\/nezhahq\/nezha" + else + GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" + GITHUB_URL="gitee.com" + Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" + fi + fi +} + update_script() { echo "> Update Script" - curl -sL https://${GITHUB_RAW_URL}/install_en.sh -o /tmp/nezha.sh + curl -sL "https://${GITHUB_RAW_URL}/install_en.sh" -o /tmp/nezha.sh mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh echo "Execute new script after 3s" @@ -220,230 +258,41 @@ before_show_menu() { show_menu } -install_base() { - (command -v curl >/dev/null 2>&1 && command -v wget >/dev/null 2>&1 && command -v unzip >/dev/null 2>&1 && command -v getenforce >/dev/null 2>&1) || - (install_soft curl wget unzip) -} - -install_arch() { - info "Archlinux needs to add nezha-agent user to install libselinux. It will be deleted automatically after installation. It is recommended to check manually" - read -r -p "Do you need to install libselinux? [Y/n] " input - case $input in - [yY][eE][sS] | [yY]) - useradd -m nezha-agent - sed -i "$ a\nezha-agent ALL=(ALL ) NOPASSWD:ALL" /etc/sudoers - sudo -iu nezha-agent bash -c 'gpg --keyserver keys.gnupg.net --recv-keys 4695881C254508D1; - cd /tmp; git clone https://aur.archlinux.org/libsepol.git; cd libsepol; makepkg -si --noconfirm --asdeps; cd ..; - git clone https://aur.archlinux.org/libselinux.git; cd libselinux; makepkg -si --noconfirm; cd ..; - rm -rf libsepol libselinux' - sed -i '/nezha-agent/d' /etc/sudoers && sleep 30s && killall -u nezha-agent && userdel -r nezha-agent - info "Info: user nezha-agent has been deleted, Be sure to check it manually!" - ;; - [nN][oO] | [nN]) - echo "Libselinux will not be installed" - ;; - *) - echo "Libselinux will not be installed" - exit 0 - ;; - esac -} - -install_soft() { - (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install "$@" selinux-policy -y) || - (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install "$@" selinux-utils -y) || - (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu "$@" base-devel --noconfirm && install_arch) || - (command -v apt-get >/dev/null 2>&1 && sudo apt-get update && sudo apt-get install "$@" selinux-utils -y) || - (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add "$@" -f) -} - -install_dashboard() { - check_systemd - install_base - - echo "> Install Dashboard" +install() { + echo "> Install" # Nezha Monitoring Folder if [ ! "$FRESH_INSTALL" = 0 ]; then sudo mkdir -p $NZ_DASHBOARD_PATH else echo "You may have already installed the dashboard, repeated installation will overwrite the data, please pay attention to backup." - printf "Exit the installation? [Y/n] " + printf "Exit the installation? [Y/n]" read -r input case $input in [yY][eE][sS] | [yY]) - echo "Exit the installation." + echo "Exit the installation" exit 0 ;; [nN][oO] | [nN]) - echo "Continue." + echo "Continue" + exit 0 ;; *) - echo "Exit the installation." + echo "Exit the installation" exit 0 ;; esac fi - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - install_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - install_dashboard_standalone - fi - - modify_dashboard_config 0 - - if [ $# = 0 ]; then - before_show_menu - fi -} - -install_dashboard_docker() { - if [ ! "$FRESH_INSTALL" = 0 ]; then - if ! command -v docker >/dev/null 2>&1; then - echo "Installing Docker" - if [ "$os_alpine" != 1 ]; then - if ! curl -sL https://${Get_Docker_URL} | sudo bash -s "${Get_Docker_Argu}"; then - err "Script failed to get, please check if the network can link ${Get_Docker_URL}" - return 0 - fi - sudo systemctl enable docker.service - sudo systemctl start docker.service - else - sudo apk add docker docker-compose - sudo rc-update add docker - sudo rc-service docker start - fi - success "Docker installed successfully" - installation_check - fi - fi -} - -install_dashboard_standalone() { - if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then - sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 - fi -} - -selinux() { - #Check SELinux - if command -v getenforce >/dev/null 2>&1; then - if getenforce | grep '[Ee]nfor'; then - echo "SELinux running, closing now!" - sudo setenforce 0 >/dev/null 2>&1 - find_key="SELINUX=" - sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config - fi - fi -} - -install_agent() { - install_base - selinux - - echo "> Install Agent" - - echo "Obtaining Agent version number" - - - _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - - if [ -z "$_version" ]; then - err "Fail to obtain Agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest" - return 1 - else - echo "The current latest version is: ${_version}" - fi - - # Nezha Monitoring Folder - sudo mkdir -p $NZ_AGENT_PATH - - echo "Downloading Agent" - if [ -z "$CN" ]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - fi - - _cmd="wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "Fail to download agent, please check if the network can link ${GITHUB_URL}" - return 1 - fi - - sudo unzip -qo nezha-agent_linux_${os_arch}.zip && - sudo mv nezha-agent $NZ_AGENT_PATH && - sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi + modify_config 0 if [ $# = 0 ]; then before_show_menu fi } -modify_agent_config() { - echo "> Modify Agent Configuration" - - if [ $# -lt 3 ]; then - echo "Please add Agent in the Dashboard first, record the secret" - printf "Please enter a domain that resolves to the IP where Dashboard is located (no CDN): " - read -r nz_grpc_host - printf "Please enter Dashboard RPC port (default 5555): " - read -r nz_grpc_port - printf "Please enter the Agent secret: " - read -r nz_client_secret - printf "Do you want to enable SSL/TLS encryption for the gRPC port (--tls)? Press [y] if yes, the default is not required, and users can press Enter to skip if you don't understand: " - read -r nz_grpc_proxy - echo "${nz_grpc_proxy}" | grep -qiw 'Y' && args='--tls' - if [ -z "$nz_grpc_host" ] || [ -z "$nz_client_secret" ]; then - err "All options cannot be empty" - before_show_menu - return 1 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args="$*" - fi - fi - - _cmd="sudo ${NZ_AGENT_PATH}/nezha-agent service install -s $nz_grpc_host:$nz_grpc_port -p $nz_client_secret $args >/dev/null 2>&1" - - if ! eval "$_cmd"; then - sudo "${NZ_AGENT_PATH}"/nezha-agent service uninstall >/dev/null 2>&1 - sudo "${NZ_AGENT_PATH}"/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p "$nz_client_secret" "$args" >/dev/null 2>&1 - fi - - success "Agent configuration modified successfully, please wait for Agent self-restart to take effect" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -modify_dashboard_config() { - echo "> Modify Dashboard Configuration" +modify_config() { + echo "Modify Configuration" if [ "$IS_DOCKER_NEZHA" = 1 ]; then if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then @@ -465,52 +314,53 @@ modify_dashboard_config() { return 0 fi - echo "About the GitHub Oauth2 application: create it at https://github.com/settings/developers, no review required, and fill in the http(s)://domain_or_IP/oauth2/callback" - echo "(Not recommended) About the Gitee Oauth2 application: create it at https://gitee.com/oauth/applications, no auditing required, and fill in the http(s)://domain_or_IP/oauth2/callback" - printf "Please enter the OAuth2 provider (github/gitlab/jihulab/gitee, default github): " - read -r nz_oauth2_type - printf "Please enter the Client ID of the Oauth2 application: " - read -r nz_github_oauth_client_id - printf "Please enter the Client Secret of the Oauth2 application: " - read -r nz_github_oauth_client_secret - printf "Please enter your GitHub/Gitee login name as the administrator, separated by commas: " - read -r nz_admin_logins - printf "Please enter the site title: " - read -r nz_site_title - printf "Please enter the site access port: (default 8008)" - read -r nz_site_port - printf "Please enter the RPC port to be used for Agent access: (default 5555)" - read -r nz_grpc_port - - if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then + + printf "Please enter the site title: " + read -r nz_site_title + printf "Please enter the exposed port: (default 8008)" + read -r nz_port + info "Please specify the backend locale" + info "1. 中文(简体)" + info "2. 中文(台灣)" + info "3. English" + while true; do + printf "Please enter [1-3]: " + read -r option + case "${option}" in + 1) + nz_lang=zh_CN + break + ;; + 2) + nz_lang=zh_TW + break + ;; + 3) + nz_lang=en_US + break + ;; + *) + err "Please enter the correct number [1-3]" + ;; + esac + done + + if [ -z "$nz_lang" ] || [ -z "$nz_site_title" ]; then err "All options cannot be empty" before_show_menu return 1 fi - if [ -z "$nz_site_port" ]; then - nz_site_port=8008 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - if [ -z "$nz_oauth2_type" ]; then - nz_oauth2_type=github + if [ -z "$nz_port" ]; then + nz_port=8008 fi - sed -i "s/nz_oauth2_type/${nz_oauth2_type}/" /tmp/nezha-config.yaml - sed -i "s/nz_admin_logins/${nz_admin_logins}/" /tmp/nezha-config.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_id/${nz_github_oauth_client_id}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /tmp/nezha-config.yaml - sed -i "s/nz_language/zh-CN/" /tmp/nezha-config.yaml + sed -i "s/nz_port/${nz_port}/" /tmp/nezha-config.yaml + sed -i "s/nz_language/${nz_lang}/" /tmp/nezha-config.yaml sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml + sed -i "s/nz_port/${nz_port}/g" /tmp/nezha-docker-compose.yaml sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml fi sudo mkdir -p $NZ_DASHBOARD_PATH/data @@ -521,13 +371,13 @@ modify_dashboard_config() { if [ "$IS_DOCKER_NEZHA" = 0 ]; then echo "Downloading service file" - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/services/nezha-dashboard.service >/dev/null 2>&1" if ! eval "$_download"; then err "File failed to get, please check if the network can link ${GITHUB_RAW_URL}" return 0 fi - else + elif [ "$INIT" = "openrc" ]; then _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/services/nezha-dashboard >/dev/null 2>&1" if ! eval "$_download"; then err "File failed to get, please check if the network can link ${GITHUB_RAW_URL}" @@ -537,6 +387,7 @@ modify_dashboard_config() { fi fi + success "Dashboard configuration modified successfully, please wait for Dashboard self-restart to take effect" restart_and_update @@ -547,7 +398,7 @@ modify_dashboard_config() { } restart_and_update() { - echo "> Restart and Update Dashboard" + echo "> Restart and Update" if [ "$IS_DOCKER_NEZHA" = 1 ]; then _cmd="restart_and_update_docker" @@ -557,7 +408,7 @@ restart_and_update() { if eval "$_cmd"; then success "Nezha Monitoring Restart Successful" - info "Default Dashboard address: domain:site_access_port" + info "Default address: domain:site_access_port" else err "The restart failed, probably because the boot time exceeded two seconds, please check the log information later" fi @@ -574,33 +425,33 @@ restart_and_update_docker() { } restart_and_update_standalone() { - _version=$(curl -m 10 -sL "https://api.github.com/repos/naiba/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') + _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/naiba\/nezha@/v/g') + _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/nezha@/v/g') fi if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/naiba\/nezha@/v/g') + _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/nezha@/v/g') fi if [ -z "$_version" ]; then _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/nezha/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') fi if [ -z "$_version" ]; then - err "Fail to obtain Dashboard version, please check if the network can link https://api.github.com/repos/naiba/nezha/releases/latest" + err "Fail to obtain Dashboard version, please check if the network can link https://api.github.com/repos/nezhahq/nezha/releases/latest" return 1 else echo "The current latest version is: ${_version}" fi - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo systemctl daemon-reload sudo systemctl stop nezha-dashboard - else + elif [ "$INIT" = "openrc" ]; then sudo rc-service nezha-dashboard stop fi if [ -z "$CN" ]; then - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" + NZ_DASHBOARD_URL="https://${GITHUB_URL}/nezhahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" else NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" fi @@ -608,81 +459,17 @@ restart_and_update_standalone() { sudo wget -qO $NZ_DASHBOARD_PATH/app.zip "$NZ_DASHBOARD_URL" >/dev/null 2>&1 && sudo unzip -qq -o $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm $NZ_DASHBOARD_PATH/app.zip sudo chmod +x $NZ_DASHBOARD_PATH/app - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo systemctl enable nezha-dashboard sudo systemctl restart nezha-dashboard - else + elif [ "$INIT" = "openrc" ]; then sudo rc-update add nezha-dashboard sudo rc-service nezha-dashboard restart fi } -start_dashboard() { - echo "> Start Dashboard" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="start_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="start_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "Nezha Monitoring Start Successful" - else - err "Failed to start, please check the log message later" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -start_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -start_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl start nezha-dashboard - else - sudo rc-service nezha-dashboard start - fi -} - -stop_dashboard() { - echo "> Stop Dashboard" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="stop_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="stop_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "Nezha Monitoring Stop Successful" - else - err "Failed to stop, please check the log message later" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -stop_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down -} - -stop_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi -} - -show_dashboard_log() { - echo "> View Dashboard Log" +show_log() { + echo "> View Log" if [ "$IS_DOCKER_NEZHA" = 1 ]; then show_dashboard_log_docker @@ -700,15 +487,15 @@ show_dashboard_log_docker() { } show_dashboard_log_standalone() { - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo journalctl -xf -u nezha-dashboard.service - else + elif [ "$INIT" = "openrc" ]; then sudo tail -n 10 /var/log/nezha-dashboard.err fi } -uninstall_dashboard() { - echo "> Uninstall Dashboard" +uninstall() { + echo "> Uninstall" if [ "$IS_DOCKER_NEZHA" = 1 ]; then uninstall_dashboard_docker @@ -716,8 +503,6 @@ uninstall_dashboard() { uninstall_dashboard_standalone fi - clean_all - if [ $# = 0 ]; then before_show_menu fi @@ -726,209 +511,100 @@ uninstall_dashboard() { uninstall_dashboard_docker() { sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down sudo rm -rf $NZ_DASHBOARD_PATH - sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 + sudo docker rmi -f ghcr.io/nezhahq/nezha >/dev/null 2>&1 sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 } uninstall_dashboard_standalone() { sudo rm -rf $NZ_DASHBOARD_PATH - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo systemctl disable nezha-dashboard sudo systemctl stop nezha-dashboard - else + elif [ "$INIT" = "openrc" ]; then sudo rc-update del nezha-dashboard sudo rc-service nezha-dashboard stop fi - if [ "$os_alpine" != 1 ]; then + if [ "$INIT" = "systemd" ]; then sudo rm $NZ_DASHBOARD_SERVICE - else + elif [ "$INIT" = "openrc" ]; then sudo rm $NZ_DASHBOARD_SERVICERC fi } -show_agent_log() { - echo "> View Agent Log" - - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-agent.service - else - sudo tail -n 10 /var/log/nezha-agent.err - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_agent() { - echo "> Uninstall Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall - - sudo rm -rf $NZ_AGENT_PATH - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_agent() { - echo "> Restart Agent" - - sudo ${NZ_AGENT_PATH}/nezha-agent service restart - - if [ $# = 0 ]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - sudo rm -rf ${NZ_BASE_PATH} - fi -} - show_usage() { echo "Nezha Monitor Management Script Usage: " echo "--------------------------------------------------------" - echo "./nezha.sh - Show Menu" - echo "./nezha.sh install_dashboard - Install Dashboard" - echo "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration" - echo "./nezha.sh start_dashboard - Start Dashboard" - echo "./nezha.sh stop_dashboard - Stop Dashboard" - echo "./nezha.sh restart_and_update - Restart and Update the Dashboard" - echo "./nezha.sh show_dashboard_log - View Dashboard Log" - echo "./nezha.sh uninstall_dashboard - Uninstall Dashboard" - echo "--------------------------------------------------------" - echo "./nezha.sh install_agent - Install Agent" - echo "./nezha.sh modify_agent_config - Modify Agent Configuration" - echo "./nezha.sh show_agent_log - View Agent Log" - echo "./nezha.sh uninstall_agent - Uninstall Agent" - echo "./nezha.sh restart_agent - Restart Agent" - echo "./nezha.sh update_script - Update Script" + echo "./nezha.sh - Show Menu" + echo "./nezha.sh install - Install Dashboard" + echo "./nezha.sh modify_config - Modify Dashboard Configuration" + echo "./nezha.sh restart_and_update - Restart and Update the Dashboard" + echo "./nezha.sh show_log - View Dashboard Log" + echo "./nezha.sh uninstall - Uninstall Dashboard" echo "--------------------------------------------------------" } show_menu() { - printf " - ${green}Nezha Monitor Management Script${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} Install Dashboard - ${green}2.${plain} Modify Dashbaord Configuration - ${green}3.${plain} Start Dashboard - ${green}4.${plain} Stop Dashboard - ${green}5.${plain} Restart and Update Dashboard - ${green}6.${plain} View Dashboard Log - ${green}7.${plain} Uninstall Dashboard - ————————————————- - ${green}8.${plain} Install Agent - ${green}9.${plain} Modify Agent Configuration - ${green}10.${plain} View Agent Log - ${green}11.${plain} Uninstall Agent - ${green}12.${plain} Restart Agent - ————————————————- - ${green}13.${plain} Update Script - ————————————————- - ${green}0.${plain} Exit Script - " - echo && printf "Please enter [0-13]: " && read -r num + println "${green}Nezha Monitor Management Script${plain}" + echo "--- https://github.com/nezhahq/nezha ---" + println "${green}1.${plain} Install Dashboard" + println "${green}2.${plain} Modify Dashboard Configuration" + println "${green}3.${plain} Restart and Update Dashboard" + println "${green}4.${plain} View Dashboard Log" + println "${green}5.${plain} Uninstall Dashboard" + echo "————————————————-" + println "${green}6.${plain} Update Script" + echo "————————————————-" + println "${green}0.${plain} Exit Script" + + echo && printf "Please enter [0-6]: " && read -r num case "${num}" in 0) exit 0 ;; 1) - install_dashboard + install ;; 2) - modify_dashboard_config + modify_config ;; 3) - start_dashboard + restart_and_update ;; 4) - stop_dashboard + show_log ;; 5) - restart_and_update + uninstall ;; 6) - show_dashboard_log - ;; - 7) - uninstall_dashboard - ;; - 8) - install_agent - ;; - 9) - modify_agent_config - ;; - 10) - show_agent_log - ;; - 11) - uninstall_agent - ;; - 12) - restart_agent - ;; - 13) update_script ;; *) - err "Please enter the correct number [0-13]" + err "Please enter the correct number [0-6]" ;; esac } -pre_check -installation_check +init if [ $# -gt 0 ]; then case $1 in - "install_dashboard") - install_dashboard 0 - ;; - "modify_dashboard_config") - modify_dashboard_config 0 - ;; - "start_dashboard") - start_dashboard 0 + "install") + install 0 ;; - "stop_dashboard") - stop_dashboard 0 + "modify_config") + modify_config 0 ;; "restart_and_update") restart_and_update 0 ;; - "show_dashboard_log") - show_dashboard_log 0 - ;; - "uninstall_dashboard") - uninstall_dashboard 0 - ;; - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 + "show_log") + show_log 0 ;; - "restart_agent") - restart_agent 0 + "uninstall") + uninstall 0 ;; "update_script") update_script 0 diff --git a/locale.json b/locale.json deleted file mode 100644 index b9fb065..0000000 --- a/locale.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "zh_CN": { - "locale": "zh_CN", - "script": "install.sh", - "ErrorFetchFile": "文件下载失败,请检查本机能否连接", - "ErrorFetchScript": "脚本获取失败,请检查本机能否链接 ", - "ErrorObtainVersion": "获取 %s 版本号失败,请检查本机能否链接", - "ErrorModifyConfig": "所有选项都不能为空", - "DoNotEdit": "# Generated by nezhahq/scriptgen. DO NOT EDIT", - "SudoError": "错误: 您的系统未安装 sudo,因此无法进行该项操作。", - "SystemdCheckError": "不支持此系统:未找到 systemctl 命令", - "GeoInfo": "根据geoip api提供的信息,当前IP可能在中国", - "PromptMirror": "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):", - "UseCustomMirror": "使用自定义镜像", - "PromptCustomImage": "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用:", - "UseChineseMirror": "使用中国镜像", - "NoUseChineseMirror": "不使用中国镜像", - "DockerImageFound": "存在带有 nezha-dashboard 仓库的 Docker 镜像:", - "DockerImageNotFound": "未找到带有 nezha-dashboard 仓库的 Docker 镜像。", - "SelectInstallMethod": "请自行选择您的安装方式(如果你是安装Agent,输入哪个都是一样的):", - "PromptSelectVersion": "请输入选择 [1-2]:", - "StandaloneInstall": "独立安装", - "ErrorSelectVersion": "请输入正确的选择 [1-2]", - "UpdateScript": "更新脚本", - "ExecuteScriptInfo": "3s后执行新脚本", - "BeforeShowMenu": "按回车返回主菜单", - "InstallDashboard": "安装面板", - "InstallDashboardInfo": "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。", - "PromptInstallDashboard": "是否退出安装? [Y/n] ", - "ContinueInstallation": "继续安装", - "ExitInstallation": "退出安装", - "InstallDockerInfo": "正在安装 Docker", - "InstallDockerSuccess": "Docker 安装成功", - "SELinuxInfo": "SELinux是开启状态,正在关闭!", - "InstallAgent": "安装监控Agent", - "ObtainAgentVersion": "正在获取监控Agent版本号", - "CurrentVersionInfo": "当前最新版本为:", - "DownloadAgent": "正在下载监控端", - "ErrorDownloadAgent": "Release 下载失败,请检查本机能否连接", - "ModifyConfiguration": "修改 %s 配置", - "SuccessModifyConfig": "%[1]s 配置 修改成功,请稍等 %[1]s 重启生效", - "ModifyAgentConfInfo": "请先在管理面板上添加Agent,记录下密钥", - "PromptModifyAgent_1": "请输入一个解析到面板所在IP的域名(不可套CDN): ", - "PromptModifyAgent_2": "请输入面板RPC端口 (默认值 5555): ", - "PromptModifyAgent_3": "请输入Agent 密钥: ", - "PromptModifyAgent_4": "是否启用针对 gRPC 端口的 SSL/TLS加密 (--tls),需要请按 [y],默认是不需要,不理解用户可回车跳过: ", - "DownloadDockerScript": "正在下载 Docker 脚本", - "ErrorCheckDocker": "请手动安装 docker-compose。", - "PromptModifyDashboard_1": "关于 GitHub Oauth2 应用:在 https://github.com/settings/developers 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback", - "PromptModifyDashboard_2": "关于 Gitee Oauth2 应用:在 https://gitee.com/oauth/applications 创建,无需审核,Callback 填 http(s)://域名或IP/oauth2/callback", - "PromptModifyDashboard_3": "请输入 OAuth2 提供商(github/gitlab/jihulab/gitee,默认 github): ", - "PromptModifyDashboard_4": "请输入 Oauth2 应用的 Client ID: ", - "PromptModifyDashboard_5": "请输入 Oauth2 应用的 Client Secret: ", - "PromptModifyDashboard_6": "请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开: ", - "PromptModifyDashboard_7": "请输入站点标题: ", - "PromptModifyDashboard_8": "请输入站点访问端口: (默认 8008)", - "PromptModifyDashboard_9": "请输入用于 Agent 接入的 RPC 端口: (默认 5555)", - "DownloadServiceScript": "正在下载服务文件", - "RestartAndUpdate": "重启并更新面板", - "SuccessRestartDashboard": "哪吒监控 重启成功", - "SuccessStartDashboard": "哪吒监控 启动成功", - "DashboardInfo": "默认管理面板地址:域名:站点访问端口", - "ErrorRestartDashboard": "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息", - "StartDashboard": "启动面板", - "ErrorFailedToStart": "启动失败,请稍后查看日志信息", - "ErrorFailedToStop": "停止失败,请稍后查看日志信息", - "StopDashboard": "停止面板", - "SuccessStopDashboard": "哪吒监控 停止成功", - "ViewLog": "获取 %s 日志", - "UninstallDashboard": "卸载 Dashboard", - "UninstallAgent": "卸载 Agent", - "RestartAgent": "重启 Agent", - "Usage1": "哪吒监控 管理脚本使用方法: ", - "Usage2": "./nezha.sh - 显示管理菜单", - "Usage3": "./nezha.sh install_dashboard - 安装面板端", - "Usage4": "./nezha.sh modify_dashboard_config - 修改面板配置", - "Usage5": "./nezha.sh start_dashboard - 启动面板", - "Usage6": "./nezha.sh stop_dashboard - 停止面板", - "Usage7": "./nezha.sh restart_and_update - 重启并更新面板", - "Usage8": "./nezha.sh show_dashboard_log - 查看面板日志", - "Usage9": "./nezha.sh uninstall_dashboard - 卸载管理面板", - "Usage10": "./nezha.sh install_agent - 安装监控Agent", - "Usage11": "./nezha.sh modify_agent_config - 修改Agent配置", - "Usage12": "./nezha.sh show_agent_log - 查看Agent日志", - "Usage13": "./nezha.sh uninstall_agent - 卸载Agent", - "Usage14": "./nezha.sh restart_agent - 重启Agent", - "Usage15": "./nezha.sh update_script - 更新脚本", - "MenuInfo": "哪吒监控管理脚本", - "Menu0": "退出脚本", - "Menu1": "安装面板端", - "Menu2": "修改面板配置", - "Menu3": "启动面板", - "Menu4": "停止面板", - "Menu5": "重启并更新面板", - "Menu6": "查看面板日志", - "Menu7": "卸载管理面板", - "Menu8": "安装监控Agent", - "Menu9": "修改Agent配置", - "Menu10": "查看Agent日志", - "Menu11": "卸载Agent", - "Menu12": "重启Agent", - "Menu13": "更新脚本", - "PromptMenu": "请输入选择 [0-13]: ", - "ErrorPromptMenu": "请输入正确的数字 [0-13]", - "InstallArchPrompt1": "提示:Arch安装libselinux需添加nezha-agent用户,安装完会自动删除,建议手动检查一次", - "InstallArchPrompt2": "是否安装libselinux? [Y/n] ", - "InstallArchPrompt3": "提示: 已删除用户nezha-agent,请务必手动核查一遍!", - "InstallArchPrompt4": "不安装libselinux" - }, - "en_US": { - "locale": "en_US", - "script": "install_en.sh", - "ErrorFetchFile": "File failed to get, please check if the network can link", - "ErrorFetchScript": "Script failed to get, please check if the network can link", - "ErrorObtainVersion": "Fail to obtain %s version, please check if the network can link", - "ErrorModifyConfig": "All options cannot be empty", - "DoNotEdit": "# Generated by nezhahq/scriptgen. DO NOT EDIT", - "SudoError": "ERROR: sudo is not installed on the system, the action cannot be proceeded.", - "SystemdCheckError": "System not supported: systemctl not found", - "GeoInfo": "According to the information provided by various geoip api, the current IP may be in China", - "PromptMirror": "Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3): ", - "UseCustomMirror": "Use Custom Mirror", - "PromptCustomImage": "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If left blank, it won't be used: ", - "UseChineseMirror": "Use Chinese Mirror", - "NoUseChineseMirror": "Do Not Use Chinese Mirror", - "DockerImageFound": "Docker image with nezha-dashboard repository exists:", - "DockerImageNotFound": "No Docker images with the nezha-dashboard repository were found.", - "SelectInstallMethod": "Select your installation method(Input anything is ok if you are installing agent):", - "PromptSelectVersion": "Please enter [1-2]: ", - "StandaloneInstall": "Standalone", - "ErrorSelectVersion": "Please enter the correct number [1-2]", - "UpdateScript": "Update Script", - "ExecuteScriptInfo": "Execute new script after 3s", - "BeforeShowMenu": "Press Enter to return to the main menu", - "InstallDashboard": "Install Dashboard", - "InstallDashboardInfo": "You may have already installed the dashboard, repeated installation will overwrite the data, please pay attention to backup.", - "PromptInstallDashboard": "Exit the installation? [Y/n] ", - "ContinueInstallation": "Continue.", - "ExitInstallation": "Exit the installation.", - "InstallDockerInfo": "Installing Docker", - "InstallDockerSuccess": "Docker installed successfully", - "SELinuxInfo": "SELinux running, closing now!", - "InstallAgent": "Install Agent", - "ObtainAgentVersion": "Obtaining Agent version number", - "CurrentVersionInfo": "The current latest version is:", - "DownloadAgent": "Downloading Agent", - "ErrorDownloadAgent": "Fail to download agent, please check if the network can link", - "ModifyConfiguration": "Modify %s Configuration", - "SuccessModifyConfig": "%[1]s configuration modified successfully, please wait for %[1]s self-restart to take effect", - "ModifyAgentConfInfo": "Please add Agent in the Dashboard first, record the secret", - "PromptModifyAgent_1": "Please enter a domain that resolves to the IP where Dashboard is located (no CDN): ", - "PromptModifyAgent_2": "Please enter Dashboard RPC port (default 5555): ", - "PromptModifyAgent_3": "Please enter the Agent secret: ", - "PromptModifyAgent_4": "Do you want to enable SSL/TLS encryption for the gRPC port (--tls)? Press [y] if yes, the default is not required, and users can press Enter to skip if you don't understand: ", - "DownloadDockerScript": "Download Docker Script", - "ErrorCheckDocker": "Please install docker-compose manually.", - "PromptModifyDashboard_1": "About the GitHub Oauth2 application: create it at https://github.com/settings/developers, no review required, and fill in the http(s)://domain_or_IP/oauth2/callback", - "PromptModifyDashboard_2": "(Not recommended) About the Gitee Oauth2 application: create it at https://gitee.com/oauth/applications, no auditing required, and fill in the http(s)://domain_or_IP/oauth2/callback", - "PromptModifyDashboard_3": "Please enter the OAuth2 provider (github/gitlab/jihulab/gitee, default github): ", - "PromptModifyDashboard_4": "Please enter the Client ID of the Oauth2 application: ", - "PromptModifyDashboard_5": "Please enter the Client Secret of the Oauth2 application: ", - "PromptModifyDashboard_6": "Please enter your GitHub/Gitee login name as the administrator, separated by commas: ", - "PromptModifyDashboard_7": "Please enter the site title: ", - "PromptModifyDashboard_8": "Please enter the site access port: (default 8008)", - "PromptModifyDashboard_9": "Please enter the RPC port to be used for Agent access: (default 5555)", - "DownloadServiceScript": "Downloading service file", - "RestartAndUpdate": "Restart and Update Dashboard", - "SuccessRestartDashboard": "Nezha Monitoring Restart Successful", - "SuccessStartDashboard": "Nezha Monitoring Start Successful", - "DashboardInfo": "Default Dashboard address: domain:site_access_port", - "ErrorRestartDashboard": "The restart failed, probably because the boot time exceeded two seconds, please check the log information later", - "StartDashboard": "Start Dashboard", - "ErrorFailedToStart": "Failed to start, please check the log message later", - "ErrorFailedToStop": "Failed to stop, please check the log message later", - "StopDashboard": "Stop Dashboard", - "SuccessStopDashboard": "Nezha Monitoring Stop Successful", - "ViewLog": "View %s Log", - "UninstallDashboard": "Uninstall Dashboard", - "UninstallAgent": "Uninstall Agent", - "RestartAgent": "Restart Agent", - "Usage1": "Nezha Monitor Management Script Usage: ", - "Usage2": "./nezha.sh - Show Menu", - "Usage3": "./nezha.sh install_dashboard - Install Dashboard", - "Usage4": "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration", - "Usage5": "./nezha.sh start_dashboard - Start Dashboard", - "Usage6": "./nezha.sh stop_dashboard - Stop Dashboard", - "Usage7": "./nezha.sh restart_and_update - Restart and Update the Dashboard", - "Usage8": "./nezha.sh show_dashboard_log - View Dashboard Log", - "Usage9": "./nezha.sh uninstall_dashboard - Uninstall Dashboard", - "Usage10": "./nezha.sh install_agent - Install Agent", - "Usage11": "./nezha.sh modify_agent_config - Modify Agent Configuration", - "Usage12": "./nezha.sh show_agent_log - View Agent Log", - "Usage13": "./nezha.sh uninstall_agent - Uninstall Agent", - "Usage14": "./nezha.sh restart_agent - Restart Agent", - "Usage15": "./nezha.sh update_script - Update Script", - "MenuInfo": "Nezha Monitor Management Script", - "Menu0": "Exit Script", - "Menu1": "Install Dashboard", - "Menu2": "Modify Dashbaord Configuration", - "Menu3": "Start Dashboard", - "Menu4": "Stop Dashboard", - "Menu5": "Restart and Update Dashboard", - "Menu6": "View Dashboard Log", - "Menu7": "Uninstall Dashboard", - "Menu8": "Install Agent", - "Menu9": "Modify Agent Configuration", - "Menu10": "View Agent Log", - "Menu11": "Uninstall Agent", - "Menu12": "Restart Agent", - "Menu13": "Update Script", - "PromptMenu": "Please enter [0-13]: ", - "ErrorPromptMenu": "Please enter the correct number [0-13]", - "InstallArchPrompt1": "Archlinux needs to add nezha-agent user to install libselinux. It will be deleted automatically after installation. It is recommended to check manually", - "InstallArchPrompt2": "Do you need to install libselinux? [Y/n] ", - "InstallArchPrompt3": "Info: user nezha-agent has been deleted, Be sure to check it manually!", - "InstallArchPrompt4": "Libselinux will not be installed" - } -} \ No newline at end of file diff --git a/nezha/i18n.sh b/nezha/i18n.sh new file mode 100644 index 0000000..f9e5504 --- /dev/null +++ b/nezha/i18n.sh @@ -0,0 +1,180 @@ +#!/bin/bash + +mapfile -t LANG < <(ls nezha/translations) +TEMPLATE="nezha/template.pot" +PODIR="nezha/translations/%s/LC_MESSAGES" +GIT_ROOT=$(git rev-parse --show-toplevel) + +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" "$*" +} + +generate() { + case $1 in + "template") + generate_template + ;; + "en") + generate_en + ;; + *) + err "invalid argument" + ;; + esac +} + +generate_template() { + xgettext -C --add-comments=TRANSLATORS: -k_ --from-code=UTF-8 -o $TEMPLATE ./nezha/template.sh +} + +generate_en() { + local po_file + po_file=$(printf "$PODIR/nezha.po" "en_US") + local mo_file + mo_file=$(printf "$PODIR/nezha.mo" "en_US") + msginit --input=$TEMPLATE --locale=en_US.UTF-8 --output-file="$po_file" --no-translator + msgfmt "$po_file" -o "$mo_file" +} + +compile() { + if [[ $# != 0 && "$1" != "" ]]; then + compile_single "$1" + else + compile_all + fi +} + +compile_single() { + local param="$1" + local found=0 + + for lang in "${LANG[@]}"; do + if [[ "$lang" == "$param" ]]; then + found=1 + break + fi + done + + if [[ $found == 0 ]]; then + err "the language does not exist." + return + fi + + local po_file + po_file=$(printf "$PODIR/nezha.po" "$param") + local mo_file + mo_file=$(printf "$PODIR/nezha.mo" "$param") + + msgfmt "$po_file" -o "$mo_file" +} + +compile_all() { + local po_file + local mo_file + for lang in "${LANG[@]}"; do + po_file=$(printf "$PODIR/nezha.po" "$lang") + mo_file=$(printf "$PODIR/nezha.mo" "$lang") + + msgfmt "$po_file" -o "$mo_file" + done +} + +update() { + if [[ $# != 0 && "$1" != "" ]]; then + update_single "$1" + else + update_all + fi +} + +update_single() { + local param="$1" + local found=0 + + for lang in "${LANG[@]}"; do + if [[ "$lang" == "$param" ]]; then + found=1 + break + fi + done + + if [[ $found == 0 ]]; then + err "the language does not exist." + return + fi + + local po_file + po_file=$(printf "$PODIR/nezha.po" "$param") + msgmerge -U "$po_file" $TEMPLATE +} + +update_all() { + for lang in "${LANG[@]}"; do + local po_file + po_file=$(printf "$PODIR/nezha.po" "$lang") + msgmerge -U "$po_file" $TEMPLATE + done +} + +show_help() { + echo "Usage: $0 [command] args" + echo "" + echo "Available commands:" + echo " update Update .po from .pot" + echo " compile Compile .mo from .po" + echo " generate Generate template or en_US locale" + echo "" + echo "Examples:" + echo " $0 update # Update all locales" + echo " $0 update zh_CN # Update zh_CN locale" + echo " $0 compile # Compile all locales" + echo " $0 compile zh_CN # Compile zh_CN locale" + echo " $0 generate template # Generate template" + echo " $0 generate en # Generate en_US locale" +} + +version() { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; } + +main() { + if [[ $(version "$BASH_VERSION") < $(version "4.0") ]]; then + err "This version of bash does not support mapfile" + exit 1 + fi + + if [[ $PWD != "$GIT_ROOT" ]]; then + err "Must execute in the project root" + exit 1 + fi + + case "$1" in + "update") + update "$2" + ;; + "compile") + compile "$2" + ;; + "generate") + generate "$2" + ;; + *) + echo "Error: Unknown command '$1'" + show_help + exit 1 + ;; + esac +} + +main "$@" diff --git a/nezha/template.pot b/nezha/template.pot new file mode 100644 index 0000000..abc628d --- /dev/null +++ b/nezha/template.pot @@ -0,0 +1,289 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-29 21:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: nezha/template.sh:35 +msgid "" +"ERROR: sudo is not installed on the system, the action cannot be proceeded." +msgstr "" + +#: nezha/template.sh:47 +msgid "Run '$*' failed." +msgstr "" + +#: nezha/template.sh:57 +msgid "$dep not found, please install it first." +msgstr "" + +#: nezha/template.sh:117 +msgid "Unknown architecture: $uname" +msgstr "" + +#: nezha/template.sh:130 nezha/template.sh:144 +msgid "Docker image with nezha-dashboard repository exists:" +msgstr "" + +#: nezha/template.sh:136 nezha/template.sh:150 +msgid "No Docker images with the nezha-dashboard repository were found." +msgstr "" + +#: nezha/template.sh:163 +msgid "Select your installation method:" +msgstr "" + +#: nezha/template.sh:165 +msgid "2. Standalone" +msgstr "" + +#: nezha/template.sh:167 +msgid "Please enter [1-2]: " +msgstr "" + +#: nezha/template.sh:179 +msgid "Please enter the correct number [1-2]" +msgstr "" + +#: nezha/template.sh:196 +msgid "" +"According to the information provided by various geoip api, the current IP " +"may be in China" +msgstr "" + +#: nezha/template.sh:197 +msgid "" +"Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror " +"Input 3): " +msgstr "" + +#: nezha/template.sh:201 +msgid "Use Chinese Mirror" +msgstr "" + +#: nezha/template.sh:206 nezha/template.sh:220 +msgid "Do Not Use Chinese Mirror" +msgstr "" + +#: nezha/template.sh:210 +msgid "Use Custom Mirror" +msgstr "" + +#: nezha/template.sh:211 +msgid "" +"Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If " +"left blank, it won't be used: " +msgstr "" + +#: nezha/template.sh:244 +msgid "> Update Script" +msgstr "" + +#: nezha/template.sh:246 +msgid "https://${GITHUB_RAW_URL}/install_en.sh" +msgstr "" + +#: nezha/template.sh:249 +msgid "Execute new script after 3s" +msgstr "" + +#: nezha/template.sh:257 +msgid "* Press Enter to return to the main menu *" +msgstr "" + +#: nezha/template.sh:262 +msgid "> Install" +msgstr "" + +#: nezha/template.sh:268 +msgid "" +"You may have already installed the dashboard, repeated installation will " +"overwrite the data, please pay attention to backup." +msgstr "" + +#: nezha/template.sh:269 +msgid "Exit the installation? [Y/n]" +msgstr "" + +#: nezha/template.sh:273 nezha/template.sh:281 +msgid "Exit the installation" +msgstr "" + +#: nezha/template.sh:277 +msgid "Continue" +msgstr "" + +#: nezha/template.sh:295 +msgid "Modify Configuration" +msgstr "" + +#: nezha/template.sh:299 +msgid "Download Docker Script" +msgstr "" + +#: nezha/template.sh:302 nezha/template.sh:313 +msgid "" +"Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "" + +#: nezha/template.sh:306 +msgid "" +"Please install docker-compose manually. https://docs.docker.com/compose/" +"install/linux/" +msgstr "" + +#: nezha/template.sh:318 +msgid "Please enter the site title: " +msgstr "" + +#: nezha/template.sh:320 +msgid "Please enter the exposed port: (default 8008)" +msgstr "" + +#: nezha/template.sh:322 +msgid "Please specify the backend locale" +msgstr "" + +#: nezha/template.sh:327 +msgid "Please enter [1-3]: " +msgstr "" + +#: nezha/template.sh:343 +msgid "Please enter the correct number [1-3]" +msgstr "" + +#: nezha/template.sh:349 +msgid "All options cannot be empty" +msgstr "" + +#: nezha/template.sh:373 +msgid "Downloading service file" +msgstr "" + +#: nezha/template.sh:377 nezha/template.sh:383 +msgid "" +"File failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "" + +#: nezha/template.sh:391 +msgid "" +"Dashboard configuration modified successfully, please wait for Dashboard " +"self-restart to take effect" +msgstr "" + +#: nezha/template.sh:401 +msgid "> Restart and Update" +msgstr "" + +#: nezha/template.sh:410 +msgid "Nezha Monitoring Restart Successful" +msgstr "" + +#: nezha/template.sh:411 +msgid "Default address: domain:site_access_port" +msgstr "" + +#: nezha/template.sh:413 +msgid "" +"The restart failed, probably because the boot time exceeded two seconds, " +"please check the log information later" +msgstr "" + +#: nezha/template.sh:440 +msgid "" +"Fail to obtain Dashboard version, please check if the network can link " +"https://api.github.com/repos/nezhahq/nezha/releases/latest" +msgstr "" + +#: nezha/template.sh:443 +msgid "The current latest version is: ${_version}" +msgstr "" + +#: nezha/template.sh:472 +msgid "> View Log" +msgstr "" + +#: nezha/template.sh:498 +msgid "> Uninstall" +msgstr "" + +#: nezha/template.sh:537 +msgid "Nezha Monitor Management Script Usage: " +msgstr "" + +#: nezha/template.sh:539 +msgid "./nezha.sh - Show Menu" +msgstr "" + +#: nezha/template.sh:540 +msgid "./nezha.sh install - Install Dashboard" +msgstr "" + +#: nezha/template.sh:541 +msgid "./nezha.sh modify_config - Modify Dashboard Configuration" +msgstr "" + +#: nezha/template.sh:542 +msgid "./nezha.sh restart_and_update - Restart and Update the Dashboard" +msgstr "" + +#: nezha/template.sh:543 +msgid "./nezha.sh show_log - View Dashboard Log" +msgstr "" + +#: nezha/template.sh:544 +msgid "./nezha.sh uninstall - Uninstall Dashboard" +msgstr "" + +#: nezha/template.sh:549 +msgid "${green}Nezha Monitor Management Script${plain}" +msgstr "" + +#: nezha/template.sh:551 +msgid "${green}1.${plain} Install Dashboard" +msgstr "" + +#: nezha/template.sh:552 +msgid "${green}2.${plain} Modify Dashboard Configuration" +msgstr "" + +#: nezha/template.sh:553 +msgid "${green}3.${plain} Restart and Update Dashboard" +msgstr "" + +#: nezha/template.sh:554 +msgid "${green}4.${plain} View Dashboard Log" +msgstr "" + +#: nezha/template.sh:555 +msgid "${green}5.${plain} Uninstall Dashboard" +msgstr "" + +#: nezha/template.sh:557 +msgid "${green}6.${plain} Update Script" +msgstr "" + +#: nezha/template.sh:559 +msgid "${green}0.${plain} Exit Script" +msgstr "" + +#: nezha/template.sh:561 +msgid "Please enter [0-6]: " +msgstr "" + +#: nezha/template.sh:585 +msgid "Please enter the correct number [0-6]" +msgstr "" diff --git a/nezha/template.sh b/nezha/template.sh new file mode 100644 index 0000000..5a81630 --- /dev/null +++ b/nezha/template.sh @@ -0,0 +1,617 @@ +#!/bin/sh + +NZ_BASE_PATH="/opt/nezha" +NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" +NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" +NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" + +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" "$*" +} + +println() { + printf "$*\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 +} + +mustn() { + set -- "$@" + + if ! "$@" >/dev/null 2>&1; then + err _("Run '$*' failed.") + exit 1 + fi +} + +deps_check() { + deps="curl 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 +} + +check_init() { + init=$(readlink /sbin/init) + case "$init" in + *systemd*) + INIT=systemd + ;; + *openrc-init*|*busybox*) + INIT=openrc + ;; + *) + err "Unknown init" + exit 1 + ;; + esac +} + +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() { + uname=$(uname -m) + case "$uname" in + amd64) + 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" + ;; + *) + err _("Unknown architecture: $uname") + exit 1 + ;; + esac +} + + +installation_check() { + if docker compose version >/dev/null 2>&1; then + DOCKER_COMPOSE_COMMAND="docker compose" + if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then + NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}":"{{.Tag}}" | grep -w "nezha-dashboard") + if [ -n "$NEZHA_IMAGES" ]; then + echo _("Docker image with nezha-dashboard repository exists:") + echo "$NEZHA_IMAGES" + IS_DOCKER_NEZHA=1 + FRESH_INSTALL=0 + return + else + echo _("No Docker images with the nezha-dashboard repository were found.") + fi + fi + elif command -v docker-compose >/dev/null 2>&1; then + DOCKER_COMPOSE_COMMAND="docker-compose" + if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then + NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}":"{{.Tag}}" | grep -w "nezha-dashboard") + if [ -n "$NEZHA_IMAGES" ]; then + echo _("Docker image with nezha-dashboard repository exists:") + echo "$NEZHA_IMAGES" + IS_DOCKER_NEZHA=1 + FRESH_INSTALL=0 + return + else + echo _("No Docker images with the nezha-dashboard repository were found.") + fi + fi + fi + + if [ -f "$NZ_DASHBOARD_PATH/app" ]; then + IS_DOCKER_NEZHA=0 + FRESH_INSTALL=0 + fi +} + +select_version() { + if [ -z "$IS_DOCKER_NEZHA" ]; then + info _("Select your installation method:") + info "1. Docker" + info _("2. Standalone") + while true; do + printf _("Please enter [1-2]: ") + read -r option + case "${option}" in + 1) + IS_DOCKER_NEZHA=1 + break + ;; + 2) + IS_DOCKER_NEZHA=0 + break + ;; + *) + err _("Please enter the correct number [1-2]") + ;; + esac + done + fi +} + +init() { + deps_check + check_init + env_check + installation_check + + ## China_IP + if [ -z "$CN" ]; then + geo_check + if [ -n "$isCN" ]; then + echo _("According to the information provided by various geoip api, the current IP may be in China") + printf _("Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3): ") + read -r input + case $input in + [yY][eE][sS] | [yY]) + echo _("Use Chinese Mirror") + CN=true + ;; + + [nN][oO] | [nN]) + echo _("Do Not Use Chinese Mirror") + ;; + + [3]) + echo _("Use Custom Mirror") + printf _("Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If left blank, it won't be used: ") + read -r input + case $input in + *) + CUSTOM_MIRROR=$input + ;; + esac + ;; + *) + echo _("Do Not Use Chinese Mirror") + ;; + esac + fi + fi + + if [ -n "$CUSTOM_MIRROR" ]; then + GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" + GITHUB_URL=$CUSTOM_MIRROR + Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" + else + if [ -z "$CN" ]; then + GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" + GITHUB_URL="github.com" + Docker_IMG="ghcr.io\/nezhahq\/nezha" + else + GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" + GITHUB_URL="gitee.com" + Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" + fi + fi +} + +update_script() { + echo _("> Update Script") + + curl -sL _("https://${GITHUB_RAW_URL}/install_en.sh") -o /tmp/nezha.sh + mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh + + echo _("Execute new script after 3s") + sleep 3s + clear + exec ./nezha.sh + exit 0 +} + +before_show_menu() { + echo && info _("* Press Enter to return to the main menu *") && read temp + show_menu +} + +install() { + echo _("> Install") + + # Nezha Monitoring Folder + if [ ! "$FRESH_INSTALL" = 0 ]; then + sudo mkdir -p $NZ_DASHBOARD_PATH + else + echo _("You may have already installed the dashboard, repeated installation will overwrite the data, please pay attention to backup.") + printf _("Exit the installation? [Y/n]") + read -r input + case $input in + [yY][eE][sS] | [yY]) + echo _("Exit the installation") + exit 0 + ;; + [nN][oO] | [nN]) + echo _("Continue") + exit 0 + ;; + *) + echo _("Exit the installation") + exit 0 + ;; + esac + fi + + modify_config 0 + + if [ $# = 0 ]; then + before_show_menu + fi +} + +modify_config() { + echo _("Modify Configuration") + + if [ "$IS_DOCKER_NEZHA" = 1 ]; then + if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then + echo _("Download Docker Script") + _cmd="wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/extras/docker-compose.yaml >/dev/null 2>&1" + if ! eval "$_cmd"; then + err _("Script failed to get, please check if the network can link ${GITHUB_RAW_URL}") + return 0 + fi + else + err _("Please install docker-compose manually. https://docs.docker.com/compose/install/linux/") + before_show_menu + fi + fi + + _cmd="wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/extras/config.yaml >/dev/null 2>&1" + if ! eval "$_cmd"; then + err _("Script failed to get, please check if the network can link ${GITHUB_RAW_URL}") + return 0 + fi + + + printf _("Please enter the site title: ") + read -r nz_site_title + printf _("Please enter the exposed port: (default 8008)") + read -r nz_port + info _("Please specify the backend locale") + info "1. 中文(简体)" + info "2. 中文(台灣)" + info "3. English" + while true; do + printf _("Please enter [1-3]: ") + read -r option + case "${option}" in + 1) + nz_lang=zh_CN + break + ;; + 2) + nz_lang=zh_TW + break + ;; + 3) + nz_lang=en_US + break + ;; + *) + err _("Please enter the correct number [1-3]") + ;; + esac + done + + if [ -z "$nz_lang" ] || [ -z "$nz_site_title" ]; then + err _("All options cannot be empty") + before_show_menu + return 1 + fi + + if [ -z "$nz_port" ]; then + nz_port=8008 + fi + + sed -i "s/nz_port/${nz_port}/" /tmp/nezha-config.yaml + sed -i "s/nz_language/${nz_lang}/" /tmp/nezha-config.yaml + sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml + if [ "$IS_DOCKER_NEZHA" = 1 ]; then + sed -i "s/nz_port/${nz_port}/g" /tmp/nezha-docker-compose.yaml + sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml + fi + + sudo mkdir -p $NZ_DASHBOARD_PATH/data + sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml + if [ "$IS_DOCKER_NEZHA" = 1 ]; then + sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml + fi + + if [ "$IS_DOCKER_NEZHA" = 0 ]; then + echo _("Downloading service file") + if [ "$INIT" = "systemd" ]; then + _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/services/nezha-dashboard.service >/dev/null 2>&1" + if ! eval "$_download"; then + err _("File failed to get, please check if the network can link ${GITHUB_RAW_URL}") + return 0 + fi + elif [ "$INIT" = "openrc" ]; then + _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/services/nezha-dashboard >/dev/null 2>&1" + if ! eval "$_download"; then + err _("File failed to get, please check if the network can link ${GITHUB_RAW_URL}") + return 0 + fi + sudo chmod +x $NZ_DASHBOARD_SERVICERC + fi + fi + + + success _("Dashboard configuration modified successfully, please wait for Dashboard self-restart to take effect") + + restart_and_update + + if [ $# = 0 ]; then + before_show_menu + fi +} + +restart_and_update() { + echo _("> Restart and Update") + + if [ "$IS_DOCKER_NEZHA" = 1 ]; then + _cmd="restart_and_update_docker" + elif [ "$IS_DOCKER_NEZHA" = 0 ]; then + _cmd="restart_and_update_standalone" + fi + + if eval "$_cmd"; then + success _("Nezha Monitoring Restart Successful") + info _("Default address: domain:site_access_port") + else + err _("The restart failed, probably because the boot time exceeded two seconds, please check the log information later") + fi + + if [ $# = 0 ]; then + before_show_menu + fi +} + +restart_and_update_docker() { + sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull + sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down + sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d +} + +restart_and_update_standalone() { + _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') + if [ -z "$_version" ]; then + _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/nezha@/v/g') + fi + if [ -z "$_version" ]; then + _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/nezha@/v/g') + fi + if [ -z "$_version" ]; then + _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/nezha/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') + fi + + if [ -z "$_version" ]; then + err _("Fail to obtain Dashboard version, please check if the network can link https://api.github.com/repos/nezhahq/nezha/releases/latest") + return 1 + else + echo _("The current latest version is: ${_version}") + fi + + if [ "$INIT" = "systemd" ]; then + sudo systemctl daemon-reload + sudo systemctl stop nezha-dashboard + elif [ "$INIT" = "openrc" ]; then + sudo rc-service nezha-dashboard stop + fi + + if [ -z "$CN" ]; then + NZ_DASHBOARD_URL="https://${GITHUB_URL}/nezhahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" + else + NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" + fi + + sudo wget -qO $NZ_DASHBOARD_PATH/app.zip "$NZ_DASHBOARD_URL" >/dev/null 2>&1 && sudo unzip -qq -o $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm $NZ_DASHBOARD_PATH/app.zip + sudo chmod +x $NZ_DASHBOARD_PATH/app + + if [ "$INIT" = "systemd" ]; then + sudo systemctl enable nezha-dashboard + sudo systemctl restart nezha-dashboard + elif [ "$INIT" = "openrc" ]; then + sudo rc-update add nezha-dashboard + sudo rc-service nezha-dashboard restart + fi +} + +show_log() { + echo _("> View Log") + + if [ "$IS_DOCKER_NEZHA" = 1 ]; then + show_dashboard_log_docker + elif [ "$IS_DOCKER_NEZHA" = 0 ]; then + show_dashboard_log_standalone + fi + + if [ $# = 0 ]; then + before_show_menu + fi +} + +show_dashboard_log_docker() { + sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f +} + +show_dashboard_log_standalone() { + if [ "$INIT" = "systemd" ]; then + sudo journalctl -xf -u nezha-dashboard.service + elif [ "$INIT" = "openrc" ]; then + sudo tail -n 10 /var/log/nezha-dashboard.err + fi +} + +uninstall() { + echo _("> Uninstall") + + if [ "$IS_DOCKER_NEZHA" = 1 ]; then + uninstall_dashboard_docker + elif [ "$IS_DOCKER_NEZHA" = 0 ]; then + uninstall_dashboard_standalone + fi + + if [ $# = 0 ]; then + before_show_menu + fi +} + +uninstall_dashboard_docker() { + sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down + sudo rm -rf $NZ_DASHBOARD_PATH + sudo docker rmi -f ghcr.io/nezhahq/nezha >/dev/null 2>&1 + sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 +} + +uninstall_dashboard_standalone() { + sudo rm -rf $NZ_DASHBOARD_PATH + + if [ "$INIT" = "systemd" ]; then + sudo systemctl disable nezha-dashboard + sudo systemctl stop nezha-dashboard + elif [ "$INIT" = "openrc" ]; then + sudo rc-update del nezha-dashboard + sudo rc-service nezha-dashboard stop + fi + + if [ "$INIT" = "systemd" ]; then + sudo rm $NZ_DASHBOARD_SERVICE + elif [ "$INIT" = "openrc" ]; then + sudo rm $NZ_DASHBOARD_SERVICERC + fi +} + +show_usage() { + echo _("Nezha Monitor Management Script Usage: ") + echo "--------------------------------------------------------" + echo _("./nezha.sh - Show Menu") + echo _("./nezha.sh install - Install Dashboard") + echo _("./nezha.sh modify_config - Modify Dashboard Configuration") + echo _("./nezha.sh restart_and_update - Restart and Update the Dashboard") + echo _("./nezha.sh show_log - View Dashboard Log") + echo _("./nezha.sh uninstall - Uninstall Dashboard") + echo "--------------------------------------------------------" +} + +show_menu() { + println _("${green}Nezha Monitor Management Script${plain}") + echo "--- https://github.com/nezhahq/nezha ---" + println _("${green}1.${plain} Install Dashboard") + println _("${green}2.${plain} Modify Dashboard Configuration") + println _("${green}3.${plain} Restart and Update Dashboard") + println _("${green}4.${plain} View Dashboard Log") + println _("${green}5.${plain} Uninstall Dashboard") + echo "————————————————-" + println _("${green}6.${plain} Update Script") + echo "————————————————-" + println _("${green}0.${plain} Exit Script") + + echo && printf _("Please enter [0-6]: ") && read -r num + case "${num}" in + 0) + exit 0 + ;; + 1) + install + ;; + 2) + modify_config + ;; + 3) + restart_and_update + ;; + 4) + show_log + ;; + 5) + uninstall + ;; + 6) + update_script + ;; + *) + err _("Please enter the correct number [0-6]") + ;; + esac +} + +init + +if [ $# -gt 0 ]; then + case $1 in + "install") + install 0 + ;; + "modify_config") + modify_config 0 + ;; + "restart_and_update") + restart_and_update 0 + ;; + "show_log") + show_log 0 + ;; + "uninstall") + uninstall 0 + ;; + "update_script") + update_script 0 + ;; + *) show_usage ;; + esac +else + select_version + show_menu +fi diff --git a/nezha/translations/en_US/LC_MESSAGES/nezha.mo b/nezha/translations/en_US/LC_MESSAGES/nezha.mo new file mode 100644 index 0000000000000000000000000000000000000000..7af985ac02bc652360dbe46d86aeeb5ca5626420 GIT binary patch literal 7353 zcmeI0U2Ggz6~}K%OTiF6LI@w_mTS>u_zyMt%v zZs)`H;zlA!NQerlJXAta#S1S8f{@w=ka$2vRFx2Km3Tmc3i1RG2q9GhDG&V4%xw1opaCsoO5UVr$hI@tY}jlpOfQ0rLGC@=Y#f*2b3CyH{loIkKvc$ zZ{Y;|2ONWsykDtD;SwBzTkv7{Ls*4xz@zXTI0E&9N{z#3;1lo#I0b(RW!}4R5>`K; z)IsRM55ni+VYmf91Yd$5g|EN?cpF}aKZg&&Lk!}psz4t;28ZD*@H6lYcpSbBkHEuB z@@aSsUV!JI%<~fbB)kp9PrrsY;oI;T=wgi6bsG-B*Wn}ZuW$+;{BUvoQc17mCTwv1 zyHNc4PRWN@wEUii4s5{B!eg__fKYQ| z!H>grxCFlqUx0svV*hm}J#j#(Z$k0cFX$}#{~3y12be^38iJz#b@(WJ5z6>iq1g8a zScP|?*faWxLjS8!^uGy3|JUFY{3o1%lQ?q{)*(w(w;&R!A3^@qt9;;E^(Mq*^%g`5 zbq9+6e}|&mETW1228#X>l=Zv?MgP0-I6Q**qW=XxME_NI0d7H==S@ggbq9(c{|#@# zBcCet|32iF>JF6k{|k!#n#rc%IVjh^Rq|HJpFz?8H&FaKic!LalAF-s_Ya`x|2udE z{tb$Mr$1Zh??KT&g&MvN#ovE{79L~~V)qS*6zUcf{eKFV;IE+Qf0#~U|M%bl_#}sv zf)gC#Z@T3TnezFVKA%st62EraeS8r;q~VIZeTh$5gWOlznF8v4u*M;}e}RJ($bAPC zVVk#8e2UI2TRp&`IV9fhZG)UZnqGU1Z^z1C5~re}#9gNy()sg3oV8@UbB zGEvt>UB9WLdOkKuqGzJi#5%P)Hfa_|@-1x|-NLz=ahX1b4!*H$lQO zRzlm@VeuZC^$p2-QuPKodN2JZDta-+GB>o5QBQOo!MEKOa9frsa@90hXWJ6_iT2z`Qj^Q3)lNH##7KiEGpgrAT}W2uiq3TmxOI|w9wAoG!m!gz z>J3-Ynb6!Go|v%il=9_kao4z6y>7fzoilYe3rRBHr$vD9NW!=-_^~A*MfoG^qp;0pn3zrvaEZMg@Nb+J2F z2<91sVih&BX}pYT5>YOays&AvE?GL6a1Hm#WaaEddD`>rlls|f)#y2O-VH)=t6fbc zski;UZsG(ZdeV4JALVxbO$XiYcMw4KzdRpO`8z>C>x#j~wy?z^Hu zG@mcXxx9cU)sUi?r0P5#(sj(h7Z}no>3h8A;MUW#OJ7}nYGq;i>dNxM#T%-u2Rp0t zf2nx{1=82F+R;xW>?Yr0FH+Sd+m$>In52jp@%Xz$&4!6tpln_hHD7FAWEP4&JLa5x zjyvx>IqppCb#ijoNmqMWlG;`oyu+r_sOXv>5xdqYL~vSplvg<8g*NjmfgP#n*}4u* zovaPrXl+z>&$US^ZDBP1k$ zYkJr(Q~lJ~*r}1-b4teRG)O~Hvh-(nlkxKucZf%sk#ZJgJUDbJy`ZH-QYm`nQCs$` zmJ?Ko@NBc%oi=G3Po4&3!K*ISgB?D!o=cuDWRV^kJUUc{b43+};eQm}izE&bbZkbw zDxO=4a^5m&)A}{FBtn&SyGSlwW-(Q#rU$oH%AYs#uHB+qE+f{cplw$9>1VXVw zOWjO^7BzRXC_$Rkr@T?t{p6lZ6_>~!*}vC_A+cJH)*_0gc4M!JR31+gC^eWxZp)}W z%5r|Hi0-mbUk%uH0t-c#Jm8mEWP_Rqxj+RjovIYOjdvsu2qHQjZi z-7q$;-|5~!$`QBgZ3LsT6Bt(GcY74x-w?wrp52J^Ak4?4ZqGGswof-rNqMR1R5%Hm ztX)yvnz^fvbpvn3L_Aih`PhC9k2$lxbEPQCH9bFl_QLejGy2NR!s6`ZO9KmRQgQ0c zC5^y$p2`}Dvt(;}VE(eRVAcaEViTSvm7_W^@9vdU01}?fu>MX@> zlpvRlYkE4Pu&_SDnt*7S$ndOdd^$#rjC$!T8MjqqCyPw)Tuqy3WqEO6Zgy^F+tTsM z*nm70uzqK$)5e6 Update Script" +msgstr "> Update Script" + +#: nezha/template.sh:246 +msgid "https://${GITHUB_RAW_URL}/install_en.sh" +msgstr "https://${GITHUB_RAW_URL}/install_en.sh" + +#: nezha/template.sh:249 +msgid "Execute new script after 3s" +msgstr "Execute new script after 3s" + +#: nezha/template.sh:257 +msgid "* Press Enter to return to the main menu *" +msgstr "* Press Enter to return to the main menu *" + +#: nezha/template.sh:262 +msgid "> Install" +msgstr "> Install" + +#: nezha/template.sh:268 +msgid "" +"You may have already installed the dashboard, repeated installation will " +"overwrite the data, please pay attention to backup." +msgstr "" +"You may have already installed the dashboard, repeated installation will " +"overwrite the data, please pay attention to backup." + +#: nezha/template.sh:269 +msgid "Exit the installation? [Y/n]" +msgstr "Exit the installation? [Y/n]" + +#: nezha/template.sh:273 nezha/template.sh:281 +msgid "Exit the installation" +msgstr "Exit the installation" + +#: nezha/template.sh:277 +msgid "Continue" +msgstr "Continue" + +#: nezha/template.sh:295 +msgid "Modify Configuration" +msgstr "Modify Configuration" + +#: nezha/template.sh:299 +msgid "Download Docker Script" +msgstr "Download Docker Script" + +#: nezha/template.sh:302 nezha/template.sh:313 +msgid "" +"Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "" +"Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" + +#: nezha/template.sh:306 +msgid "" +"Please install docker-compose manually. https://docs.docker.com/compose/" +"install/linux/" +msgstr "" +"Please install docker-compose manually. https://docs.docker.com/compose/" +"install/linux/" + +#: nezha/template.sh:318 +msgid "Please enter the site title: " +msgstr "Please enter the site title: " + +#: nezha/template.sh:320 +msgid "Please enter the exposed port: (default 8008)" +msgstr "Please enter the exposed port: (default 8008)" + +#: nezha/template.sh:322 +msgid "Please specify the backend locale" +msgstr "Please specify the backend locale" + +#: nezha/template.sh:327 +msgid "Please enter [1-3]: " +msgstr "Please enter [1-3]: " + +#: nezha/template.sh:343 +msgid "Please enter the correct number [1-3]" +msgstr "Please enter the correct number [1-3]" + +#: nezha/template.sh:349 +msgid "All options cannot be empty" +msgstr "All options cannot be empty" + +#: nezha/template.sh:373 +msgid "Downloading service file" +msgstr "Downloading service file" + +#: nezha/template.sh:377 nezha/template.sh:383 +msgid "" +"File failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "" +"File failed to get, please check if the network can link ${GITHUB_RAW_URL}" + +#: nezha/template.sh:391 +msgid "" +"Dashboard configuration modified successfully, please wait for Dashboard " +"self-restart to take effect" +msgstr "" +"Dashboard configuration modified successfully, please wait for Dashboard " +"self-restart to take effect" + +#: nezha/template.sh:401 +msgid "> Restart and Update" +msgstr "> Restart and Update" + +#: nezha/template.sh:410 +msgid "Nezha Monitoring Restart Successful" +msgstr "Nezha Monitoring Restart Successful" + +#: nezha/template.sh:411 +msgid "Default address: domain:site_access_port" +msgstr "Default address: domain:site_access_port" + +#: nezha/template.sh:413 +msgid "" +"The restart failed, probably because the boot time exceeded two seconds, " +"please check the log information later" +msgstr "" +"The restart failed, probably because the boot time exceeded two seconds, " +"please check the log information later" + +#: nezha/template.sh:440 +msgid "" +"Fail to obtain Dashboard version, please check if the network can link " +"https://api.github.com/repos/nezhahq/nezha/releases/latest" +msgstr "" +"Fail to obtain Dashboard version, please check if the network can link " +"https://api.github.com/repos/nezhahq/nezha/releases/latest" + +#: nezha/template.sh:443 +msgid "The current latest version is: ${_version}" +msgstr "The current latest version is: ${_version}" + +#: nezha/template.sh:472 +msgid "> View Log" +msgstr "> View Log" + +#: nezha/template.sh:498 +msgid "> Uninstall" +msgstr "> Uninstall" + +#: nezha/template.sh:537 +msgid "Nezha Monitor Management Script Usage: " +msgstr "Nezha Monitor Management Script Usage: " + +#: nezha/template.sh:539 +msgid "./nezha.sh - Show Menu" +msgstr "./nezha.sh - Show Menu" + +#: nezha/template.sh:540 +msgid "./nezha.sh install - Install Dashboard" +msgstr "./nezha.sh install - Install Dashboard" + +#: nezha/template.sh:541 +msgid "./nezha.sh modify_config - Modify Dashboard Configuration" +msgstr "./nezha.sh modify_config - Modify Dashboard Configuration" + +#: nezha/template.sh:542 +msgid "./nezha.sh restart_and_update - Restart and Update the Dashboard" +msgstr "./nezha.sh restart_and_update - Restart and Update the Dashboard" + +#: nezha/template.sh:543 +msgid "./nezha.sh show_log - View Dashboard Log" +msgstr "./nezha.sh show_log - View Dashboard Log" + +#: nezha/template.sh:544 +msgid "./nezha.sh uninstall - Uninstall Dashboard" +msgstr "./nezha.sh uninstall - Uninstall Dashboard" + +#: nezha/template.sh:549 +msgid "${green}Nezha Monitor Management Script${plain}" +msgstr "${green}Nezha Monitor Management Script${plain}" + +#: nezha/template.sh:551 +msgid "${green}1.${plain} Install Dashboard" +msgstr "${green}1.${plain} Install Dashboard" + +#: nezha/template.sh:552 +msgid "${green}2.${plain} Modify Dashboard Configuration" +msgstr "${green}2.${plain} Modify Dashboard Configuration" + +#: nezha/template.sh:553 +msgid "${green}3.${plain} Restart and Update Dashboard" +msgstr "${green}3.${plain} Restart and Update Dashboard" + +#: nezha/template.sh:554 +msgid "${green}4.${plain} View Dashboard Log" +msgstr "${green}4.${plain} View Dashboard Log" + +#: nezha/template.sh:555 +msgid "${green}5.${plain} Uninstall Dashboard" +msgstr "${green}5.${plain} Uninstall Dashboard" + +#: nezha/template.sh:557 +msgid "${green}6.${plain} Update Script" +msgstr "${green}6.${plain} Update Script" + +#: nezha/template.sh:559 +msgid "${green}0.${plain} Exit Script" +msgstr "${green}0.${plain} Exit Script" + +#: nezha/template.sh:561 +msgid "Please enter [0-6]: " +msgstr "Please enter [0-6]: " + +#: nezha/template.sh:585 +msgid "Please enter the correct number [0-6]" +msgstr "Please enter the correct number [0-6]" diff --git a/nezha/translations/zh_CN/LC_MESSAGES/nezha.mo b/nezha/translations/zh_CN/LC_MESSAGES/nezha.mo new file mode 100644 index 0000000000000000000000000000000000000000..412250e91a8e69d0426a2aad50de6ac268801794 GIT binary patch literal 6953 zcmb`KTX5Xe8OH^sK;1$qrIeOZ4&agt(fXEvSxQLAg@(q#@yILfuIgQBk+iW* z$c)L&b`r-fiIWg-ZscZ?*iK2B*l}zR?J({1sncou*7DGmc6X*7`oc^f`q2NUqm^ZQ zCrLZiSo@Q7zH|F-=ks6hzhgkawF37K=)PSL-XPwAA6%VZ6@-Q0`{1MCIq*l|@4#yC zpI{~U#GQihB-jWp05^k=fhWNV@H22R_$9aqWOoTd75Fl^9DEO40ZxE4?!Unru;Ok( zxCe}YUjyF(9{@LlUkCfaZ-N=H47>oo30?&s2Jc5FJPILD2A=^Jf*J68;Ah}c@N@7% z@Bs|+5cm}MQ*bp%$(6g06ztv01My>@Sbn*_6;5* z9^1hf+IvCL>z5uM#-{0gB`AV1@DXqTd=f1CE$ASd60p-z{TKsPzV1E z(z@3|S@(kx@LS*}uo3JA-vj>w()!=Tp#K85f=_~*An53mAc-{$Z2;4-{#^WMij{vE`Ugh!!VvSS5^DTP|^{bdka z6E=Em0c-L84oLbs2STO7Z^0GdpFmpAgD@u9^9B4o12%!*2YW%X{}8wq{1ikN;chqw zjq?adezO?t09S)Af>R)^(E{tsaiVhCIXt_DfI+v70!8s7f^lH6i!5~>$gfb_l*Tm!0L zBRC3D|2yFHw}CIvGwx-$;mU3-00PY7+7sgLcr_sDwRqi*2ZV-u(Yon+95>m7>_^x0 z9Ku(?FmCb-+B@l)e2gyADP6U=$q%p%0V&7zE%LXy7p)zp@ULg^^py8j3DTacymtcm zZV2~M+~kks`xG|_FW28F=g~#6cqi^3(+e)73pa1kGeX4m5qd6OOYk7#ehl~1xL4r5 z3-`0QVLIVC-0oE_D=DVw7K`d>O}8 z@j2&geS`9DTw-;)rdqne>Lg8yDM>{us;H?yyqvi!BHvjViRgx`YO$itR4u9-N!MXn%Fs8dvLdsV4z@`$ zR6T97n4+sGCZ*IRu8AXQ!yw04R}X7DsCO%{2e4JpSu^S6_Z7y zO2iUYD^V$(K#<8YB+M|Ab#l$Hsai_2cRns!V=+veqbV+7jZ!gM@Y1Q$(1ifNV@^$!e9|afyF|?nsz0UMmEuq zE=)JEF)2z>T4SOO>Z8HD(Rq3*`Sk_%)*BVt+rnB&O^{mk7K?&*x!^9$d(?sG* zq?M^rcYIB;+H|9pR>%^n*2?0Rl`_K>74V->3|dULgd%#f!qpv55b<|7@y$)(W<>%? z(X@oM&=8Aa8PEk55>u>OoU?rMOY0hc()40;!^+p1n;O<{5xjgbJ3HSb=fNpp`Y;n_ z$&m?*!MD-(RAGZ&G`Z_ACifW9_zk?KO);=RI=n(cJwLnL#nlU0dKraoSYmxhtaWA( zURzmNyJ-HH6!FYbtpr)p(`WIJk=+m%;g2*T(wUY<;m{HCofZOSh)cO%>q%C41607n z)9n?-Va=2hp=y9O+#(@+;Dk@;5eaeLkk;6O^2G~0cMb_WG5nvrdm{n|Cg{-9$XC2> z;psf7SaDqr3yowbFK_eUVqO#@>x5bP=4S78iz`}8syy}(bcWs{wInFnM7t4uuF)bW+_YGj)wZZs+3VsFb^;jz-~xft z-r3V*4<5}=p2<(|$3u2(BHx#>dk1czn0F3MHDIX>?6j`-!c)7PJ!8q6Kuo}E77ygv&6w62s z$DK<9`RT#@31pemP@}UC%g<1jsWI*Ty-v?rG$F{nNqL&_ln4-f8!SaCW?hyBJ%To!V`m*?RLLdP#2JLxdHA%Xjcu z)4>~aCr03J&cH=`_#j{C%)EYcaUX7_>@O?WTw>ME;md{0Cp^GV8uM6WyfXI3;IZf& z?<#zB2wDQPR>L&lo-Sw)VPW@O%#RM|hdPD)bUy-w7s1@$ zT(i07Fpq*8d!gs?CESoU)^!epbCvOE=9_`f+1L9>|2#E1nNEZ#k1<#X4H$2x_Vw~| zG4gmCrQjVr4rw~dcMUlQuM`em&R^M)pYF, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-29 21:03+0800\n" +"PO-Revision-Date: 2024-11-29 21:05+0800\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.5\n" + +#: nezha/template.sh:35 +msgid "" +"ERROR: sudo is not installed on the system, the action cannot be proceeded." +msgstr "错误: 您的系统未安装 sudo,因此无法进行该项操作。" + +#: nezha/template.sh:47 +msgid "Run '$*' failed." +msgstr "运行 '$*' 失败。" + +#: nezha/template.sh:57 +msgid "$dep not found, please install it first." +msgstr "未找到依赖 $dep,请先安装。" + +#: nezha/template.sh:117 +msgid "Unknown architecture: $uname" +msgstr "未知架构:$uname" + +#: nezha/template.sh:130 nezha/template.sh:144 +msgid "Docker image with nezha-dashboard repository exists:" +msgstr "存在带有 nezha-dashboard 仓库的 Docker 镜像:" + +#: nezha/template.sh:136 nezha/template.sh:150 +msgid "No Docker images with the nezha-dashboard repository were found." +msgstr "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" + +#: nezha/template.sh:163 +msgid "Select your installation method:" +msgstr "请自行选择您的安装方式:" + +#: nezha/template.sh:165 +msgid "2. Standalone" +msgstr "2. 独立安装" + +#: nezha/template.sh:167 +msgid "Please enter [1-2]: " +msgstr "请输入选择 [1-2]:" + +#: nezha/template.sh:179 +msgid "Please enter the correct number [1-2]" +msgstr "请输入正确的选择 [1-2]" + +#: nezha/template.sh:196 +msgid "" +"According to the information provided by various geoip api, the current IP " +"may be in China" +msgstr "根据geoip api提供的信息,当前IP可能在中国" + +#: nezha/template.sh:197 +msgid "" +"Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror " +"Input 3): " +msgstr "否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" + +#: nezha/template.sh:201 +msgid "Use Chinese Mirror" +msgstr "使用中国镜像" + +#: nezha/template.sh:206 nezha/template.sh:220 +msgid "Do Not Use Chinese Mirror" +msgstr "不使用中国镜像" + +#: nezha/template.sh:210 +msgid "Use Custom Mirror" +msgstr "使用自定义镜像" + +#: nezha/template.sh:211 +msgid "" +"Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io). If " +"left blank, it won't be used: " +msgstr "" +"请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用:" + +#: nezha/template.sh:244 +msgid "> Update Script" +msgstr "> 更新脚本" + +#: nezha/template.sh:246 +msgid "https://${GITHUB_RAW_URL}/install_en.sh" +msgstr "https://${GITHUB_RAW_URL}/install.sh" + +#: nezha/template.sh:249 +msgid "Execute new script after 3s" +msgstr "3s后执行新脚本" + +#: nezha/template.sh:257 +msgid "* Press Enter to return to the main menu *" +msgstr "* 按回车返回主菜单 *" + +#: nezha/template.sh:262 +msgid "> Install" +msgstr "> 安装" + +#: nezha/template.sh:268 +msgid "" +"You may have already installed the dashboard, repeated installation will " +"overwrite the data, please pay attention to backup." +msgstr "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。" + +#: nezha/template.sh:269 +msgid "Exit the installation? [Y/n]" +msgstr "是否退出安装? [Y/n]" + +#: nezha/template.sh:273 nezha/template.sh:281 +msgid "Exit the installation" +msgstr "退出安装" + +#: nezha/template.sh:277 +msgid "Continue" +msgstr "继续安装" + +#: nezha/template.sh:295 +msgid "Modify Configuration" +msgstr "> 修改配置" + +#: nezha/template.sh:299 +msgid "Download Docker Script" +msgstr "正在下载 Docker 脚本" + +#: nezha/template.sh:302 nezha/template.sh:313 +msgid "" +"Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "脚本获取失败,请检查本机能否链接 ${GITHUB_RAW_URL}" + +#: nezha/template.sh:306 +msgid "" +"Please install docker-compose manually. https://docs.docker.com/compose/" +"install/linux/" +msgstr "" +"请手动安装 docker-compose。 https://docs.docker.com/compose/install/linux/" + +#: nezha/template.sh:318 +msgid "Please enter the site title: " +msgstr "请输入站点标题: " + +#: nezha/template.sh:320 +msgid "Please enter the exposed port: (default 8008)" +msgstr "请输入暴露端口: (默认 8008)" + +#: nezha/template.sh:322 +msgid "Please specify the backend locale" +msgstr "请指定后台语言" + +#: nezha/template.sh:327 +msgid "Please enter [1-3]: " +msgstr "请输入选项 [1-3]" + +#: nezha/template.sh:343 +msgid "Please enter the correct number [1-3]" +msgstr "请输入正确的选项 [1-3]" + +#: nezha/template.sh:349 +msgid "All options cannot be empty" +msgstr "\"所有选项都不能为空\"" + +#: nezha/template.sh:373 +msgid "Downloading service file" +msgstr "正在下载服务文件" + +#: nezha/template.sh:377 nezha/template.sh:383 +msgid "" +"File failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" + +#: nezha/template.sh:391 +msgid "" +"Dashboard configuration modified successfully, please wait for Dashboard " +"self-restart to take effect" +msgstr "Dashboard 配置 修改成功,请稍等 Dashboard 重启生效" + +#: nezha/template.sh:401 +msgid "> Restart and Update" +msgstr "> 重启并更新" + +#: nezha/template.sh:410 +msgid "Nezha Monitoring Restart Successful" +msgstr "哪吒监控 重启成功" + +#: nezha/template.sh:411 +msgid "Default address: domain:site_access_port" +msgstr "默认地址:域名:站点访问端口" + +#: nezha/template.sh:413 +msgid "" +"The restart failed, probably because the boot time exceeded two seconds, " +"please check the log information later" +msgstr "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息" + +#: nezha/template.sh:440 +msgid "" +"Fail to obtain Dashboard version, please check if the network can link " +"https://api.github.com/repos/nezhahq/nezha/releases/latest" +msgstr "" +"获取 Dashboard 版本号失败,请检查本机能否链接 https://api.github.com/repos/" +"nezhahq/nezha/releases/latest" + +#: nezha/template.sh:443 +msgid "The current latest version is: ${_version}" +msgstr "当前最新版本为: ${_version}" + +#: nezha/template.sh:472 +msgid "> View Log" +msgstr "> 获取日志" + +#: nezha/template.sh:498 +msgid "> Uninstall" +msgstr "> 卸载" + +#: nezha/template.sh:537 +msgid "Nezha Monitor Management Script Usage: " +msgstr "哪吒监控 管理脚本使用方法: " + +#: nezha/template.sh:539 +msgid "./nezha.sh - Show Menu" +msgstr "./nezha.sh - 显示管理菜单" + +#: nezha/template.sh:540 +msgid "./nezha.sh install - Install Dashboard" +msgstr "./nezha.sh install - 安装面板端" + +#: nezha/template.sh:541 +msgid "./nezha.sh modify_config - Modify Dashboard Configuration" +msgstr "./nezha.sh modify_config - 修改面板配置" + +#: nezha/template.sh:542 +msgid "./nezha.sh restart_and_update - Restart and Update the Dashboard" +msgstr "./nezha.sh restart_and_update - 重启并更新面板" + +#: nezha/template.sh:543 +msgid "./nezha.sh show_log - View Dashboard Log" +msgstr "./nezha.sh show_log - 查看面板日志" + +#: nezha/template.sh:544 +msgid "./nezha.sh uninstall - Uninstall Dashboard" +msgstr "./nezha.sh uninstall - 卸载管理面板" + +#: nezha/template.sh:549 +msgid "${green}Nezha Monitor Management Script${plain}" +msgstr "${green}哪吒监控管理脚本${plain}" + +#: nezha/template.sh:551 +msgid "${green}1.${plain} Install Dashboard" +msgstr "${green}1.${plain} 安装面板端" + +#: nezha/template.sh:552 +msgid "${green}2.${plain} Modify Dashboard Configuration" +msgstr "${green}2.${plain} 修改面板配置" + +#: nezha/template.sh:553 +msgid "${green}3.${plain} Restart and Update Dashboard" +msgstr "${green}3.${plain} 重启并更新面板" + +#: nezha/template.sh:554 +msgid "${green}4.${plain} View Dashboard Log" +msgstr "${green}4.${plain} 查看面板日志" + +#: nezha/template.sh:555 +msgid "${green}5.${plain} Uninstall Dashboard" +msgstr "${green}5.${plain} 卸载管理面板" + +#: nezha/template.sh:557 +msgid "${green}6.${plain} Update Script" +msgstr "${green}6.${plain} 更新脚本" + +#: nezha/template.sh:559 +msgid "${green}0.${plain} Exit Script" +msgstr "${green}0.${plain} 退出脚本" + +#: nezha/template.sh:561 +msgid "Please enter [0-6]: " +msgstr "请输入选择 [0-6]: " + +#: nezha/template.sh:585 +msgid "Please enter the correct number [0-6]" +msgstr "请输入正确的数字 [0-6]" + +#~ msgid "Installing Docker" +#~ msgstr "正在安装 Docker" + +#~ msgid "Docker installed successfully" +#~ msgstr "Docker 安装成功" diff --git a/template.sh b/template.sh deleted file mode 100644 index d68cb09..0000000 --- a/template.sh +++ /dev/null @@ -1,941 +0,0 @@ -#!/bin/sh -{{.DoNotEdit}} - -NZ_BASE_PATH="/opt/nezha" -NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard" -NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" -NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" -NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" - -red='\033[0;31m' -green='\033[0;32m' -yellow='\033[0;33m' -plain='\033[0m' -export PATH="$PATH:/usr/local/bin" - -os_arch="" -[ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1' - -sudo() { - myEUID=$(id -ru) - if [ "$myEUID" -ne 0 ]; then - if command -v sudo > /dev/null 2>&1; then - command sudo "$@" - else - err "{{.SudoError}}" - exit 1 - fi - else - "$@" - fi -} - -check_systemd() { - if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then - echo "{{.SystemdCheckError}}" - exit 1 - fi -} - -err() { - printf "${red}%s${plain}\n" "$*" >&2 -} - -success() { - printf "${green}%s${plain}\n" "$*" -} - -info() { - printf "${yellow}%s${plain}\n" "$*" -} - -geo_check() { - api_list="https://blog.cloudflare.com/cdn-cgi/trace https://dash.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 -} - -pre_check() { - umask 077 - - ## os_arch - if uname -m | grep -q 'x86_64'; then - os_arch="amd64" - elif uname -m | grep -q 'i386\|i686'; then - os_arch="386" - elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then - os_arch="arm64" - elif uname -m | grep -q 'arm'; then - os_arch="arm" - elif uname -m | grep -q 's390x'; then - os_arch="s390x" - elif uname -m | grep -q 'riscv64'; then - os_arch="riscv64" - fi - - ## China_IP - if [ -z "$CN" ]; then - geo_check - if [ -n "$isCN" ]; then - echo "{{.GeoInfo}}" - printf "{{.PromptMirror}}" - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "{{.UseChineseMirror}}" - CN=true - ;; - - [nN][oO] | [nN]) - echo "{{.NoUseChineseMirror}}" - ;; - - [3]) - echo "{{.UseCustomMirror}}" - printf "{{.PromptCustomImage}}" - read -r input - case $input in - *) - CUSTOM_MIRROR=$input - ;; - esac - ;; - *) - echo "{{.NoUseChineseMirror}}" - ;; - esac - fi - fi - - if [ -n "$CUSTOM_MIRROR" ]; then - GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" - GITHUB_URL=$CUSTOM_MIRROR - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - else - if [ -z "$CN" ]; then - GITHUB_RAW_URL="raw.githubusercontent.com/nezhahq/scripts/main" - GITHUB_URL="github.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" " - Docker_IMG="ghcr.io\/naiba\/nezha-dashboard" - else - GITHUB_RAW_URL="gitee.com/naibahq/scripts/raw/main" - GITHUB_URL="gitee.com" - Get_Docker_URL="get.docker.com" - Get_Docker_Argu=" -s docker --mirror Aliyun" - Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" - fi - fi -} - -installation_check() { - if docker compose version >/dev/null 2>&1; then - DOCKER_COMPOSE_COMMAND="docker compose" - if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{"{{.Repository}}"}}:{{"{{.Tag}}"}}" | grep -w "nezha-dashboard") - if [ -n "$NEZHA_IMAGES" ]; then - echo "{{.DockerImageFound}}" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "{{.DockerImageNotFound}}" - fi - fi - elif command -v docker-compose >/dev/null 2>&1; then - DOCKER_COMPOSE_COMMAND="docker-compose" - if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then - NEZHA_IMAGES=$(sudo docker images --format "{{"{{.Repository}}"}}:{{"{{.Tag}}"}}" | grep -w "nezha-dashboard") - if [ -n "$NEZHA_IMAGES" ]; then - echo "{{.DockerImageFound}}" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "{{.DockerImageNotFound}}" - fi - fi - fi - - if [ -f "$NZ_DASHBOARD_PATH/app" ]; then - IS_DOCKER_NEZHA=0 - FRESH_INSTALL=0 - fi -} - -select_version() { - if [ -z "$IS_DOCKER_NEZHA" ]; then - info "{{.SelectInstallMethod}}" - info "1. Docker" - info "2. {{.StandaloneInstall}}" - while true; do - printf "{{.PromptSelectVersion}}" - read -r option - case "${option}" in - 1) - IS_DOCKER_NEZHA=1 - break - ;; - 2) - IS_DOCKER_NEZHA=0 - break - ;; - *) - err "{{.ErrorSelectVersion}}" - ;; - esac - done - fi -} - -update_script() { - echo "> {{.UpdateScript}}" - - curl -sL https://${GITHUB_RAW_URL}/{{.script}} -o /tmp/nezha.sh - mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh - - echo "{{.ExecuteScriptInfo}}" - sleep 3s - clear - exec ./nezha.sh - exit 0 -} - -before_show_menu() { - echo && info "* {{.BeforeShowMenu}} *" && read temp - show_menu -} - -install_base() { - (command -v curl >/dev/null 2>&1 && command -v wget >/dev/null 2>&1 && command -v unzip >/dev/null 2>&1 && command -v getenforce >/dev/null 2>&1) || - (install_soft curl wget unzip) -} - -install_arch() { - info "{{.InstallArchPrompt1}}" - read -r -p "{{.InstallArchPrompt2}}" input - case $input in - [yY][eE][sS] | [yY]) - useradd -m nezha-agent - sed -i "$ a\nezha-agent ALL=(ALL ) NOPASSWD:ALL" /etc/sudoers - sudo -iu nezha-agent bash -c 'gpg --keyserver keys.gnupg.net --recv-keys 4695881C254508D1; - cd /tmp; git clone https://aur.archlinux.org/libsepol.git; cd libsepol; makepkg -si --noconfirm --asdeps; cd ..; - git clone https://aur.archlinux.org/libselinux.git; cd libselinux; makepkg -si --noconfirm; cd ..; - rm -rf libsepol libselinux' - sed -i '/nezha-agent/d' /etc/sudoers && sleep 30s && killall -u nezha-agent && userdel -r nezha-agent - info "{{.InstallArchPrompt3}}" - ;; - [nN][oO] | [nN]) - echo "{{.InstallArchPrompt4}}" - ;; - *) - echo "{{.InstallArchPrompt4}}" - exit 0 - ;; - esac -} - -install_soft() { - (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install "$@" selinux-policy -y) || - (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install "$@" selinux-utils -y) || - (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu "$@" base-devel --noconfirm && install_arch) || - (command -v apt-get >/dev/null 2>&1 && sudo apt-get update && sudo apt-get install "$@" selinux-utils -y) || - (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add "$@" -f) -} - -install_dashboard() { - check_systemd - install_base - - echo "> {{.InstallDashboard}}" - - # Nezha Monitoring Folder - if [ ! "$FRESH_INSTALL" = 0 ]; then - sudo mkdir -p $NZ_DASHBOARD_PATH - else - echo "{{.InstallDashboardInfo}}" - printf "{{.PromptInstallDashboard}}" - read -r input - case $input in - [yY][eE][sS] | [yY]) - echo "{{.ExitInstallation}}" - exit 0 - ;; - [nN][oO] | [nN]) - echo "{{.ContinueInstallation}}" - ;; - *) - echo "{{.ExitInstallation}}" - exit 0 - ;; - esac - fi - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - install_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - install_dashboard_standalone - fi - - modify_dashboard_config 0 - - if [ $# = 0 ]; then - before_show_menu - fi -} - -install_dashboard_docker() { - if [ ! "$FRESH_INSTALL" = 0 ]; then - if ! command -v docker >/dev/null 2>&1; then - echo "{{.InstallDockerInfo}}" - if [ "$os_alpine" != 1 ]; then - if ! curl -sL https://${Get_Docker_URL} | sudo bash -s "${Get_Docker_Argu}"; then - err "{{.ErrorFetchScript}} ${Get_Docker_URL}" - return 0 - fi - sudo systemctl enable docker.service - sudo systemctl start docker.service - else - sudo apk add docker docker-compose - sudo rc-update add docker - sudo rc-service docker start - fi - success "{{.InstallDockerSuccess}}" - installation_check - fi - fi -} - -install_dashboard_standalone() { - if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then - sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 - fi -} - -selinux() { - #Check SELinux - if command -v getenforce >/dev/null 2>&1; then - if getenforce | grep '[Ee]nfor'; then - echo "{{.SELinuxInfo}}" - sudo setenforce 0 >/dev/null 2>&1 - find_key="SELINUX=" - sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config - fi - fi -} - -install_agent() { - install_base - selinux - - echo "> {{.InstallAgent}}" - - echo "{{.ObtainAgentVersion}}" - - - _version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ -z "$_version" ]; then - _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)}}}') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/nezhahq/agent/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/nezhahq\/agent@/v/g') - fi - - if [ -z "$_version" ]; then - err "{{printf .ErrorObtainVersion "Agent"}} https://api.github.com/repos/nezhahq/agent/releases/latest" - return 1 - else - echo "{{.CurrentVersionInfo}} ${_version}" - fi - - # Nezha Monitoring Folder - sudo mkdir -p $NZ_AGENT_PATH - - echo "{{.DownloadAgent}}" - if [ -z "$CN" ]; then - NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - else - NZ_AGENT_URL="https://${GITHUB_URL}/naibahq/agent/releases/download/${_version}/nezha-agent_linux_${os_arch}.zip" - fi - - _cmd="wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip $NZ_AGENT_URL >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "{{.ErrorDownloadAgent}} ${GITHUB_URL}" - return 1 - fi - - sudo unzip -qo nezha-agent_linux_${os_arch}.zip && - sudo mv nezha-agent $NZ_AGENT_PATH && - sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md - - if [ $# -ge 3 ]; then - modify_agent_config "$@" - else - modify_agent_config 0 - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -modify_agent_config() { - echo "> {{printf .ModifyConfiguration "Agent"}}" - - if [ $# -lt 3 ]; then - echo "{{.ModifyAgentConfInfo}}" - printf "{{.PromptModifyAgent_1}}" - read -r nz_grpc_host - printf "{{.PromptModifyAgent_2}}" - read -r nz_grpc_port - printf "{{.PromptModifyAgent_3}}" - read -r nz_client_secret - printf "{{.PromptModifyAgent_4}}" - read -r nz_grpc_proxy - echo "${nz_grpc_proxy}" | grep -qiw 'Y' && args='--tls' - if [ -z "$nz_grpc_host" ] || [ -z "$nz_client_secret" ]; then - err "{{.ErrorModifyConfig}}" - before_show_menu - return 1 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - else - nz_grpc_host=$1 - nz_grpc_port=$2 - nz_client_secret=$3 - shift 3 - if [ $# -gt 0 ]; then - args="$*" - fi - fi - - _cmd="sudo ${NZ_AGENT_PATH}/nezha-agent service install -s $nz_grpc_host:$nz_grpc_port -p $nz_client_secret $args >/dev/null 2>&1" - - if ! eval "$_cmd"; then - sudo "${NZ_AGENT_PATH}"/nezha-agent service uninstall >/dev/null 2>&1 - sudo "${NZ_AGENT_PATH}"/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p "$nz_client_secret" "$args" >/dev/null 2>&1 - fi - - success "{{printf .SuccessModifyConfig "Agent"}}" - - #if [[ $# == 0 ]]; then - # before_show_menu - #fi -} - -modify_dashboard_config() { - echo "> {{printf .ModifyConfiguration "Dashboard"}}" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - if [ -n "$DOCKER_COMPOSE_COMMAND" ]; then - echo "{{.DownloadDockerScript}}" - _cmd="wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/extras/docker-compose.yaml >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "{{.ErrorFetchScript}} ${GITHUB_RAW_URL}" - return 0 - fi - else - err "{{.ErrorCheckDocker}} https://docs.docker.com/compose/install/linux/" - before_show_menu - fi - fi - - _cmd="wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/extras/config.yaml >/dev/null 2>&1" - if ! eval "$_cmd"; then - err "{{.ErrorFetchScript}} ${GITHUB_RAW_URL}" - return 0 - fi - - echo "{{.PromptModifyDashboard_1}}" - echo "{{.PromptModifyDashboard_2}}" - printf "{{.PromptModifyDashboard_3}}" - read -r nz_oauth2_type - printf "{{.PromptModifyDashboard_4}}" - read -r nz_github_oauth_client_id - printf "{{.PromptModifyDashboard_5}}" - read -r nz_github_oauth_client_secret - printf "{{.PromptModifyDashboard_6}}" - read -r nz_admin_logins - printf "{{.PromptModifyDashboard_7}}" - read -r nz_site_title - printf "{{.PromptModifyDashboard_8}}" - read -r nz_site_port - printf "{{.PromptModifyDashboard_9}}" - read -r nz_grpc_port - - if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then - err "{{.ErrorModifyConfig}}" - before_show_menu - return 1 - fi - - if [ -z "$nz_site_port" ]; then - nz_site_port=8008 - fi - if [ -z "$nz_grpc_port" ]; then - nz_grpc_port=5555 - fi - if [ -z "$nz_oauth2_type" ]; then - nz_oauth2_type=github - fi - - sed -i "s/nz_oauth2_type/${nz_oauth2_type}/" /tmp/nezha-config.yaml - sed -i "s/nz_admin_logins/${nz_admin_logins}/" /tmp/nezha-config.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_id/${nz_github_oauth_client_id}/" /tmp/nezha-config.yaml - sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /tmp/nezha-config.yaml - sed -i "s/nz_language/zh-CN/" /tmp/nezha-config.yaml - sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml - sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml - fi - - sudo mkdir -p $NZ_DASHBOARD_PATH/data - sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml - fi - - if [ "$IS_DOCKER_NEZHA" = 0 ]; then - echo "{{.DownloadServiceScript}}" - if [ "$os_alpine" != 1 ]; then - _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/services/nezha-dashboard.service >/dev/null 2>&1" - if ! eval "$_download"; then - err "{{.ErrorFetchFile}} ${GITHUB_RAW_URL}" - return 0 - fi - else - _download="sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/services/nezha-dashboard >/dev/null 2>&1" - if ! eval "$_download"; then - err "{{.ErrorFetchFile}} ${GITHUB_RAW_URL}" - return 0 - fi - sudo chmod +x $NZ_DASHBOARD_SERVICERC - fi - fi - - success "{{printf .SuccessModifyConfig "Dashboard"}}" - - restart_and_update - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_and_update() { - echo "> {{.RestartAndUpdate}}" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="restart_and_update_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="restart_and_update_standalone" - fi - - if eval "$_cmd"; then - success "{{.SuccessRestartDashboard}}" - info "{{.DashboardInfo}}" - else - err "{{.ErrorRestartDashboard}}" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_and_update_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -restart_and_update_standalone() { - _version=$(curl -m 10 -sL "https://api.github.com/repos/naiba/nezha/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://fastly.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/naiba\/nezha@/v/g') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gcore.jsdelivr.net/gh/naiba/nezha/" | grep "option\.value" | awk -F "'" '{print $2}' | sed 's/naiba\/nezha@/v/g') - fi - if [ -z "$_version" ]; then - _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/nezha/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i=="tag_name"){print $(i+2)}}}') - fi - - if [ -z "$_version" ]; then - err "{{printf .ErrorObtainVersion "Dashboard"}} https://api.github.com/repos/naiba/nezha/releases/latest" - return 1 - else - echo "{{.CurrentVersionInfo}} ${_version}" - fi - - if [ "$os_alpine" != 1 ]; then - sudo systemctl daemon-reload - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi - - if [ -z "$CN" ]; then - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naiba/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" - else - NZ_DASHBOARD_URL="https://${GITHUB_URL}/naibahq/nezha/releases/download/${_version}/dashboard-linux-${os_arch}.zip" - fi - - sudo wget -qO $NZ_DASHBOARD_PATH/app.zip "$NZ_DASHBOARD_URL" >/dev/null 2>&1 && sudo unzip -qq -o $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm $NZ_DASHBOARD_PATH/app.zip - sudo chmod +x $NZ_DASHBOARD_PATH/app - - if [ "$os_alpine" != 1 ]; then - sudo systemctl enable nezha-dashboard - sudo systemctl restart nezha-dashboard - else - sudo rc-update add nezha-dashboard - sudo rc-service nezha-dashboard restart - fi -} - -start_dashboard() { - echo "> {{.StartDashboard}}" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="start_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="start_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "{{.SuccessStartDashboard}}" - else - err "{{.ErrorFailedToStart}}" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -start_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d -} - -start_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl start nezha-dashboard - else - sudo rc-service nezha-dashboard start - fi -} - -stop_dashboard() { - echo "> {{.StopDashboard}}" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - _cmd="stop_dashboard_docker" - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - _cmd="stop_dashboard_standalone" - fi - - if eval "$_cmd"; then - success "{{.SuccessStopDashboard}}" - else - err "{{.ErrorFailedToStop}}" - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -stop_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down -} - -stop_dashboard_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo systemctl stop nezha-dashboard - else - sudo rc-service nezha-dashboard stop - fi -} - -show_dashboard_log() { - echo "> {{printf .ViewLog "Dashboard"}}" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - show_dashboard_log_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - show_dashboard_log_standalone - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -show_dashboard_log_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f -} - -show_dashboard_log_standalone() { - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-dashboard.service - else - sudo tail -n 10 /var/log/nezha-dashboard.err - fi -} - -uninstall_dashboard() { - echo "> {{.UninstallDashboard}}" - - if [ "$IS_DOCKER_NEZHA" = 1 ]; then - uninstall_dashboard_docker - elif [ "$IS_DOCKER_NEZHA" = 0 ]; then - uninstall_dashboard_standalone - fi - - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_dashboard_docker() { - sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down - sudo rm -rf $NZ_DASHBOARD_PATH - sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 - sudo docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/nezha-dashboard >/dev/null 2>&1 -} - -uninstall_dashboard_standalone() { - sudo rm -rf $NZ_DASHBOARD_PATH - - if [ "$os_alpine" != 1 ]; then - sudo systemctl disable nezha-dashboard - sudo systemctl stop nezha-dashboard - else - sudo rc-update del nezha-dashboard - sudo rc-service nezha-dashboard stop - fi - - if [ "$os_alpine" != 1 ]; then - sudo rm $NZ_DASHBOARD_SERVICE - else - sudo rm $NZ_DASHBOARD_SERVICERC - fi -} - -show_agent_log() { - echo "> {{printf .ViewLog "Agent"}}" - - if [ "$os_alpine" != 1 ]; then - sudo journalctl -xf -u nezha-agent.service - else - sudo tail -n 10 /var/log/nezha-agent.err - fi - - if [ $# = 0 ]; then - before_show_menu - fi -} - -uninstall_agent() { - echo "> {{.UninstallAgent}}" - - sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall - - sudo rm -rf $NZ_AGENT_PATH - clean_all - - if [ $# = 0 ]; then - before_show_menu - fi -} - -restart_agent() { - echo "> {{.RestartAgent}}" - - sudo ${NZ_AGENT_PATH}/nezha-agent service restart - - if [ $# = 0 ]; then - before_show_menu - fi -} - -clean_all() { - if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then - sudo rm -rf ${NZ_BASE_PATH} - fi -} - -show_usage() { - echo "{{.Usage1}}" - echo "--------------------------------------------------------" - echo "{{.Usage2}}" - echo "{{.Usage3}}" - echo "{{.Usage4}}" - echo "{{.Usage5}}" - echo "{{.Usage6}}" - echo "{{.Usage7}}" - echo "{{.Usage8}}" - echo "{{.Usage9}}" - echo "--------------------------------------------------------" - echo "{{.Usage10}}" - echo "{{.Usage11}}" - echo "{{.Usage12}}" - echo "{{.Usage13}}" - echo "{{.Usage14}}" - echo "{{.Usage15}}" - echo "--------------------------------------------------------" -} - -show_menu() { - printf " - ${green}{{.MenuInfo}}${plain} - --- https://github.com/naiba/nezha --- - ${green}1.${plain} {{.Menu1}} - ${green}2.${plain} {{.Menu2}} - ${green}3.${plain} {{.Menu3}} - ${green}4.${plain} {{.Menu4}} - ${green}5.${plain} {{.Menu5}} - ${green}6.${plain} {{.Menu6}} - ${green}7.${plain} {{.Menu7}} - ————————————————- - ${green}8.${plain} {{.Menu8}} - ${green}9.${plain} {{.Menu9}} - ${green}10.${plain} {{.Menu10}} - ${green}11.${plain} {{.Menu11}} - ${green}12.${plain} {{.Menu12}} - ————————————————- - ${green}13.${plain} {{.Menu13}} - ————————————————- - ${green}0.${plain} {{.Menu0}} - " - echo && printf "{{.PromptMenu}}" && read -r num - case "${num}" in - 0) - exit 0 - ;; - 1) - install_dashboard - ;; - 2) - modify_dashboard_config - ;; - 3) - start_dashboard - ;; - 4) - stop_dashboard - ;; - 5) - restart_and_update - ;; - 6) - show_dashboard_log - ;; - 7) - uninstall_dashboard - ;; - 8) - install_agent - ;; - 9) - modify_agent_config - ;; - 10) - show_agent_log - ;; - 11) - uninstall_agent - ;; - 12) - restart_agent - ;; - 13) - update_script - ;; - *) - err "{{.ErrorPromptMenu}}" - ;; - esac -} - -pre_check -installation_check - -if [ $# -gt 0 ]; then - case $1 in - "install_dashboard") - install_dashboard 0 - ;; - "modify_dashboard_config") - modify_dashboard_config 0 - ;; - "start_dashboard") - start_dashboard 0 - ;; - "stop_dashboard") - stop_dashboard 0 - ;; - "restart_and_update") - restart_and_update 0 - ;; - "show_dashboard_log") - show_dashboard_log 0 - ;; - "uninstall_dashboard") - uninstall_dashboard 0 - ;; - "install_agent") - shift - if [ $# -ge 3 ]; then - install_agent "$@" - else - install_agent 0 - fi - ;; - "modify_agent_config") - modify_agent_config 0 - ;; - "show_agent_log") - show_agent_log 0 - ;; - "uninstall_agent") - uninstall_agent 0 - ;; - "restart_agent") - restart_agent 0 - ;; - "update_script") - update_script 0 - ;; - *) show_usage ;; - esac -else - select_version - show_menu -fi