From d15309d2288d55002b27030374e231e6e3ae0a43 Mon Sep 17 00:00:00 2001 From: uubulb Date: Fri, 29 Nov 2024 20:04:51 +0800 Subject: [PATCH] init v1 script --- .gitignore | 1 + Makefile | 2 +- README.md | 22 +- cmd/scriptgen/main.go | 86 +- extras/config.yaml | 14 +- extras/docker-compose.yaml | 9 +- go.mod | 2 + go.sum | 2 + install.sh | 781 +++------ install_en.sh | 783 +++------ locale.json | 218 --- nezha/.DS_Store | Bin 0 -> 6148 bytes nezha/i18n.sh | 180 +++ nezha/install.sh | 1428 +++++++++++++++++ nezha/template.pot | 290 ++++ nezha/template.sh | 630 ++++++++ nezha/translations/.DS_Store | Bin 0 -> 6148 bytes nezha/translations/en_US/LC_MESSAGES/nezha.mo | Bin 0 -> 7449 bytes nezha/translations/en_US/LC_MESSAGES/nezha.po | 310 ++++ nezha/translations/zh_CN/.DS_Store | Bin 0 -> 6148 bytes nezha/translations/zh_CN/LC_MESSAGES/nezha.mo | Bin 0 -> 7049 bytes nezha/translations/zh_CN/LC_MESSAGES/nezha.po | 301 ++++ template.sh | 941 ----------- 23 files changed, 3677 insertions(+), 2323 deletions(-) create mode 100644 .gitignore create mode 100644 go.sum delete mode 100644 locale.json create mode 100644 nezha/.DS_Store create mode 100644 nezha/i18n.sh create mode 100644 nezha/install.sh create mode 100644 nezha/template.pot create mode 100644 nezha/template.sh create mode 100644 nezha/translations/.DS_Store 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/.DS_Store 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..b25c15b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ 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..d3827e7 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. +1.0 diff --git a/cmd/scriptgen/main.go b/cmd/scriptgen/main.go index 525471e..a3616a1 100644 --- a/cmd/scriptgen/main.go +++ b/cmd/scriptgen/main.go @@ -1,10 +1,13 @@ package main import ( - "encoding/json" + "bufio" "fmt" "os" - "text/template" + "regexp" + "strings" + + "github.com/chai2010/gettext-go" ) const ( @@ -12,17 +15,13 @@ const ( en_US = "en_US" ) -var localeMap map[string]map[string]interface{} - func main() { if len(os.Args) != 3 { printUsage() exitWithError("Error: Need exactly 2 arguments") } - if err := readLocalesFromFile(os.Args[1]); err != nil { - exitWithError(fmt.Sprintf("readLocalesFromFile: %v", err)) - } + readLocalesFromDir(os.Args[1]) if err := parseTemplate(os.Args[2]); err != nil { exitWithError(fmt.Sprintf("parseTemplate: %v", err)) @@ -30,7 +29,7 @@ func main() { } func printUsage() { - fmt.Printf("usage: %s [locale-file] [locale]\n", os.Args[0]) + fmt.Printf("usage: %s [localedir] [locale]\n", os.Args[0]) } func exitWithError(message string) { @@ -38,37 +37,64 @@ func exitWithError(message string) { os.Exit(1) } -func readLocalesFromFile(file string) error { - b, err := os.ReadFile(file) - if err != nil { - return err - } - - return json.Unmarshal(b, &localeMap) +func readLocalesFromDir(dir string) { + gettext.BindLocale(gettext.New("nezha", dir)) } func parseTemplate(lang string) error { - tmpl, err := template.ParseFiles("template.sh") + gettext.SetLanguage(lang) + regex := regexp.MustCompile(`_\("([^"]+)"\)`) + + var file *os.File + var err error + switch lang { + case zh_CN: + file, err = os.Create("install.sh") + if err != nil { + return err + } + defer file.Close() + case en_US: + file, err = os.Create("install_en.sh") + if err != nil { + return err + } + defer file.Close() + default: + return fmt.Errorf("unsupported locale: %s", lang) + } + + template, err := os.Open("nezha/template.sh") if err != nil { return err } - switch lang { - case zh_CN: - file, err := os.Create("install.sh") + var newline string + scanner := bufio.NewScanner(template) + buf := make([]byte, 1024*1024) + scanner.Buffer(buf, len(buf)) + + writer := bufio.NewWriter(file) + defer writer.Flush() + + for scanner.Scan() { + line := scanner.Text() + matches := regex.FindAllStringSubmatch(line, -1) + + if len(matches) > 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 } - defer file.Close() - return tmpl.Execute(file, localeMap[zh_CN]) - case en_US: - file, err := os.Create("install_en.sh") - if err != nil { - return err - } - defer file.Close() - return tmpl.Execute(file, localeMap[en_US]) - default: - return fmt.Errorf("unsupported locale: %s", lang) } + + 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/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..e19135a 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,11 +9,23 @@ 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) if [ "$myEUID" -ne 0 ]; then @@ -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 +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 } -success() { - printf "${green}%s${plain}\n" "$*" -} - -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,30 +92,109 @@ geo_check() { done } -pre_check() { - umask 077 +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 +} - ## 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" + +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 "存在带有 nezha-dashboard 仓库的 Docker 镜像:" + echo "$NEZHA_IMAGES" + IS_DOCKER_NEZHA=1 + FRESH_INSTALL=0 + return + else + echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" + 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 "存在带有 nezha-dashboard 仓库的 Docker 镜像:" + echo "$NEZHA_IMAGES" + IS_DOCKER_NEZHA=1 + FRESH_INSTALL=0 + return + else + echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" + 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 "请自行选择您的安装方式:" + info "1. Docker" + info "2. 独立安装" + while true; do + printf "请输入选择 [1-2]:" + read -r option + case "${option}" in + 1) + IS_DOCKER_NEZHA=1 + break + ;; + 2) + IS_DOCKER_NEZHA=0 + break + ;; + *) + err "请输入正确的选择 [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 "根据geoip api提供的信息,当前IP可能在中国" - printf "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" + printf "否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" read -r input case $input in [yY][eE][sS] | [yY]) @@ -120,92 +226,24 @@ pre_check() { 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 "存在带有 nezha-dashboard 仓库的 Docker 镜像:" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" - 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 "存在带有 nezha-dashboard 仓库的 Docker 镜像:" - echo "$NEZHA_IMAGES" - IS_DOCKER_NEZHA=1 - FRESH_INSTALL=0 - return - else - echo "未找到带有 nezha-dashboard 仓库的 Docker 镜像。" - 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 "请自行选择您的安装方式(如果你是安装Agent,输入哪个都是一样的):" - info "1. Docker" - info "2. 独立安装" - while true; do - printf "请输入选择 [1-2]:" - read -r option - case "${option}" in - 1) - IS_DOCKER_NEZHA=1 - break - ;; - 2) - IS_DOCKER_NEZHA=0 - break - ;; - *) - err "请输入正确的选择 [1-2]" - ;; - esac - done - 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,18 @@ 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() { +install() { check_systemd install_base - echo "> 安装面板" + 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 +278,7 @@ install_dashboard() { ;; [nN][oO] | [nN]) echo "继续安装" + exit 0 ;; *) echo "退出安装" @@ -285,165 +287,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 + modify_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 - - 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 +317,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}/" /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 +374,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 +390,7 @@ modify_dashboard_config() { fi fi + success "Dashboard 配置 修改成功,请稍等 Dashboard 重启生效" restart_and_update @@ -547,7 +401,7 @@ modify_dashboard_config() { } restart_and_update() { - echo "> 重启并更新面板" + echo "> 重启并更新" if [ "$IS_DOCKER_NEZHA" = 1 ]; then _cmd="restart_and_update_docker" @@ -557,7 +411,7 @@ restart_and_update() { if eval "$_cmd"; then success "哪吒监控 重启成功" - info "默认管理面板地址:域名:站点访问端口" + info "默认地址:域名:站点访问端口" else err "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息" fi @@ -574,33 +428,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 +462,19 @@ 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 + + find "$NZ_DASHBOARD_PATH" -type d -exec chmod 700 {} \; } -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 +492,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 @@ -733,61 +525,24 @@ uninstall_dashboard_docker() { 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} + if [ -z "$(ls -A ${NZ_DASHBOARD_PATH})" ]; then + sudo rm -rf ${NZ_DASHBOARD_PATH} fi } @@ -797,95 +552,55 @@ show_usage() { 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 "--------------------------------------------------------" } 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 - ;; - 4) - stop_dashboard - ;; - 5) restart_and_update ;; + 4) + show_log + ;; + 5) + 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 @@ -895,12 +610,6 @@ if [ $# -gt 0 ]; then "modify_dashboard_config") modify_dashboard_config 0 ;; - "start_dashboard") - start_dashboard 0 - ;; - "stop_dashboard") - stop_dashboard 0 - ;; "restart_and_update") restart_and_update 0 ;; @@ -910,26 +619,6 @@ if [ $# -gt 0 ]; then "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 ;; diff --git a/install_en.sh b/install_en.sh index 09da9af..39d3f30 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,11 +9,23 @@ 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) if [ "$myEUID" -ne 0 ]; then @@ -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 +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 } -success() { - printf "${green}%s${plain}\n" "$*" -} - -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,24 +92,103 @@ geo_check() { done } -pre_check() { - umask 077 +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 +} - ## 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" + +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 @@ -120,92 +226,24 @@ pre_check() { 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 "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(Input anything is ok if you are installing agent):" - 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 -} - 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,44 @@ 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() { +install() { check_systemd install_base - echo "> Install Dashboard" + 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 + modify_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 - - 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 +317,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}/" /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 +374,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 +390,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 +401,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 +411,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 +428,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 +462,19 @@ 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 + + find "$NZ_DASHBOARD_PATH" -type d -exec chmod 700 {} \; } -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 +492,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 @@ -733,61 +525,24 @@ uninstall_dashboard_docker() { 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} + if [ -z "$(ls -A ${NZ_DASHBOARD_PATH})" ]; then + sudo rm -rf ${NZ_DASHBOARD_PATH} fi } @@ -797,95 +552,55 @@ show_usage() { 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 "--------------------------------------------------------" } 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 - ;; - 4) - stop_dashboard - ;; - 5) restart_and_update ;; + 4) + show_log + ;; + 5) + 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 @@ -895,12 +610,6 @@ if [ $# -gt 0 ]; then "modify_dashboard_config") modify_dashboard_config 0 ;; - "start_dashboard") - start_dashboard 0 - ;; - "stop_dashboard") - stop_dashboard 0 - ;; "restart_and_update") restart_and_update 0 ;; @@ -910,26 +619,6 @@ if [ $# -gt 0 ]; then "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 ;; 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/.DS_Store b/nezha/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..bc216077c517ebae9da3b68a84d66e39b1c55bdb GIT binary patch literal 6148 zcmeHKJ8r`;3?&;62AUybM_r*e5RCK$xj>r+0SXv3P`A6Mo-0So<7YA4Zq5=s0@RZz zJ_&k*X^Mz;Kc{Drortt>L;1B~X|`{^u!oE&5RNlO>E%tnUmOHEeFYtf*|2c^(DnJG9N&#*5hkb`9Wo=zN&T4Iezrro&0yo3lDHyyQ1HBw$ gVdePAlOnI!9Q!qK3UoT+P6zU5z;vNefmh($ literal 0 HcmV?d00001 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/install.sh b/nezha/install.sh new file mode 100644 index 0000000..e4d5849 --- /dev/null +++ b/nezha/install.sh @@ -0,0 +1,1428 @@ +#!/bin/sh +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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" +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +red='\033[0;31m' +green='\033[0;32m' +yellow='\033[0;33m' +plain='\033[0m' +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +err() { +printf "${red}%s${plain}\n" "$*" >&2 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +success() { +printf "${green}%s${plain}\n" "$*" +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +info() { +printf "${yellow}%s${plain}\n" "$*" +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +mustn() { +set -- "$@" +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if ! "$@" >/dev/null 2>&1; then +err _("Run '$*' failed.") +exit 1 +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +deps_check() { +deps="curl wget unzip grep" +set -- "$api_list" +for dep in $deps; do +if ! command -v "$dep"; then +err _("$dep not found, please install it first.") +exit 1 +fi +done +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +check_init() { +init=$(readlink /sbin/init) +case "$init" in +*systemd*) +INIT=systemd +;; +*openrc-init*|*busybox*) +INIT=openrc +;; +*) +err "Unknown init" +exit 1 +;; +esac +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ -f "$NZ_DASHBOARD_PATH/app" ]; then +IS_DOCKER_NEZHA=0 +FRESH_INSTALL=0 +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +init() { +deps_check +check_init +env_check +installation_check +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +## 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 +;; +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +[nN][oO] | [nN]) +echo _("Do Not Use Chinese Mirror") +;; +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +[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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +update_script() { +echo _("> Update Script") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +echo _("Execute new script after 3s") +sleep 3s +clear +exec ./nezha.sh +exit 0 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +before_show_menu() { +echo && info _("* Press Enter to return to the main menu *") && read temp +show_menu +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +install() { +check_systemd +install_base +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +echo _("> Install") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +# 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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ "$IS_DOCKER_NEZHA" = 1 ]; then +install_docker +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +modify_config 0 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ $# = 0 ]; then +before_show_menu +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +install_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 "{{.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 _("Docker installed successfully") +installation_check +fi +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +modify_config() { +echo _("Modify Configuration") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +_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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ -z "$nz_lang" ] || [ -z "$nz_site_title" ]; then +err _("All options cannot be empty") +before_show_menu +return 1 +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ -z "$nz_port" ]; then +nz_port=8008 +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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}/" /tmp/nezha-docker-compose.yaml +sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +success _("Dashboard configuration modified successfully, please wait for Dashboard self-restart to take effect") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +restart_and_update +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ $# = 0 ]; then +before_show_menu +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +restart_and_update() { +echo _("> Restart and Update") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ "$IS_DOCKER_NEZHA" = 1 ]; then +_cmd="restart_and_update_docker" +elif [ "$IS_DOCKER_NEZHA" = 0 ]; then +_cmd="restart_and_update_standalone" +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ $# = 0 ]; then +before_show_menu +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ "$os_alpine" != 1 ]; then +sudo systemctl daemon-reload +sudo systemctl stop nezha-dashboard +else +sudo rc-service nezha-dashboard stop +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +find "$NZ_DASHBOARD_PATH" -type d -exec chmod 700 {} \; +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +show_dashboard_log() { +echo _("> View Log") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ "$IS_DOCKER_NEZHA" = 1 ]; then +show_dashboard_log_docker +elif [ "$IS_DOCKER_NEZHA" = 0 ]; then +show_dashboard_log_standalone +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ $# = 0 ]; then +before_show_menu +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +show_dashboard_log_docker() { +sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +uninstall_dashboard() { +echo _("> Uninstall") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ "$IS_DOCKER_NEZHA" = 1 ]; then +uninstall_dashboard_docker +elif [ "$IS_DOCKER_NEZHA" = 0 ]; then +uninstall_dashboard_standalone +fi +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +clean_all +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ $# = 0 ]; then +before_show_menu +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +uninstall_dashboard_standalone() { +sudo rm -rf $NZ_DASHBOARD_PATH +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ "$os_alpine" != 1 ]; then +sudo rm $NZ_DASHBOARD_SERVICE +else +sudo rm $NZ_DASHBOARD_SERVICERC +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +clean_all() { +if [ -z "$(ls -A ${NZ_DASHBOARD_PATH})" ]; then +sudo rm -rf ${NZ_DASHBOARD_PATH} +fi +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +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 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 "--------------------------------------------------------" +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +show_menu() { +printf _("${green}Nezha Monitor Management Script${plain}\n") +printf "--- https://github.com/naiba/nezha ---\n" +printf _("${green}1.${plain} Install Dashboard\n") +printf _("${green}2.${plain} Modify Dashbaord Configuration\n") +printf _("${green}3.${plain} Restart and Update Dashboard\n") +printf _("${green}4.${plain} View Dashboard Log\n") +printf _("${green}5.${plain} Uninstall Dashboard\n") +printf "————————————————-\n" +printf _("${green}6.${plain} Update Script\n") +printf "————————————————-\n" +printf _("${green}0.${plain} Exit Script\n") +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +echo && printf _("Please enter [0-6]: ") && read -r num +case "${num}" in +0) +exit 0 +;; +1) +install_dashboard +;; +2) +modify_dashboard_config +;; +3) +restart_and_update +;; +4) +show_dashboard_log +;; +5) +uninstall_dashboard +;; +6) +update_script +;; +*) +err _("Please enter the correct number [0-6]") +;; +esac +} +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +init +Project-Id-Version: +Report-Msgid-Bugs-To: +PO-Revision-Date: 2024-11-29 18:07+0800 +Last-Translator: +Language-Team: +Language: zh_CN +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +X-Generator: Poedit 3.5 + +if [ $# -gt 0 ]; then +case $1 in +"install_dashboard") +install_dashboard 0 +;; +"modify_dashboard_config") +modify_dashboard_config 0 +;; +"restart_and_update") +restart_and_update 0 +;; +"show_dashboard_log") +show_dashboard_log 0 +;; +"uninstall_dashboard") +uninstall_dashboard 0 +;; +"update_script") +update_script 0 +;; +*) show_usage ;; +esac +else +select_version +show_menu +fi diff --git a/nezha/template.pot b/nezha/template.pot new file mode 100644 index 0000000..1f54afb --- /dev/null +++ b/nezha/template.pot @@ -0,0 +1,290 @@ +# 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 19:59+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:265 +msgid "> Install" +msgstr "" + +#: nezha/template.sh:271 +msgid "" +"You may have already installed the dashboard, repeated installation will " +"overwrite the data, please pay attention to backup." +msgstr "" + +#: nezha/template.sh:272 +msgid "Exit the installation? [Y/n]" +msgstr "" + +#: nezha/template.sh:276 nezha/template.sh:284 +msgid "Exit the installation" +msgstr "" + +#: nezha/template.sh:280 +msgid "Continue" +msgstr "" + +#: nezha/template.sh:298 +msgid "Modify Configuration" +msgstr "" + +#: nezha/template.sh:302 +msgid "Download Docker Script" +msgstr "" + +#: nezha/template.sh:305 nezha/template.sh:316 +msgid "" +"Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "" + +#: nezha/template.sh:309 +msgid "" +"Please install docker-compose manually. https://docs.docker.com/compose/" +"install/linux/" +msgstr "" + +#: nezha/template.sh:321 +msgid "Please enter the site title: " +msgstr "" + +#: nezha/template.sh:323 +msgid "Please enter the exposed port: (default 8008)" +msgstr "" + +#: nezha/template.sh:325 +msgid "Please specify the backend locale" +msgstr "" + +#: nezha/template.sh:330 +msgid "Please enter [1-3]: " +msgstr "" + +#: nezha/template.sh:346 +msgid "Please enter the correct number [1-3]" +msgstr "" + +#: nezha/template.sh:352 +msgid "All options cannot be empty" +msgstr "" + +#: nezha/template.sh:376 +msgid "Downloading service file" +msgstr "" + +#: nezha/template.sh:380 nezha/template.sh:386 +msgid "" +"File failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "" + +#: nezha/template.sh:394 +msgid "" +"Dashboard configuration modified successfully, please wait for Dashboard " +"self-restart to take effect" +msgstr "" + +#: nezha/template.sh:404 +msgid "> Restart and Update" +msgstr "" + +#: nezha/template.sh:413 +msgid "Nezha Monitoring Restart Successful" +msgstr "" + +#: nezha/template.sh:414 +msgid "Default address: domain:site_access_port" +msgstr "" + +#: nezha/template.sh:416 +msgid "" +"The restart failed, probably because the boot time exceeded two seconds, " +"please check the log information later" +msgstr "" + +#: nezha/template.sh:443 +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:446 +msgid "The current latest version is: ${_version}" +msgstr "" + +#: nezha/template.sh:477 +msgid "> View Log" +msgstr "" + +#: nezha/template.sh:503 +msgid "> Uninstall" +msgstr "" + +#: nezha/template.sh:550 +msgid "Nezha Monitor Management Script Usage: " +msgstr "" + +#: nezha/template.sh:552 +msgid "./nezha.sh - Show Menu" +msgstr "" + +#: nezha/template.sh:553 +msgid "./nezha.sh install_dashboard - Install Dashboard" +msgstr "" + +#: nezha/template.sh:554 +msgid "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration" +msgstr "" + +#: nezha/template.sh:555 +msgid "" +"./nezha.sh restart_and_update - Restart and Update the Dashboard" +msgstr "" + +#: nezha/template.sh:556 +msgid "./nezha.sh show_dashboard_log - View Dashboard Log" +msgstr "" + +#: nezha/template.sh:557 +msgid "./nezha.sh uninstall_dashboard - Uninstall Dashboard" +msgstr "" + +#: nezha/template.sh:562 +msgid "${green}Nezha Monitor Management Script${plain}" +msgstr "" + +#: nezha/template.sh:564 +msgid "${green}1.${plain} Install Dashboard" +msgstr "" + +#: nezha/template.sh:565 +msgid "${green}2.${plain} Modify Dashboard Configuration" +msgstr "" + +#: nezha/template.sh:566 +msgid "${green}3.${plain} Restart and Update Dashboard" +msgstr "" + +#: nezha/template.sh:567 +msgid "${green}4.${plain} View Dashboard Log" +msgstr "" + +#: nezha/template.sh:568 +msgid "${green}5.${plain} Uninstall Dashboard" +msgstr "" + +#: nezha/template.sh:570 +msgid "${green}6.${plain} Update Script" +msgstr "" + +#: nezha/template.sh:572 +msgid "${green}0.${plain} Exit Script" +msgstr "" + +#: nezha/template.sh:574 +msgid "Please enter [0-6]: " +msgstr "" + +#: nezha/template.sh:598 +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..77099c2 --- /dev/null +++ b/nezha/template.sh @@ -0,0 +1,630 @@ +#!/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\/naiba\/nezha-dashboard" + 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() { + check_systemd + install_base + + 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}/" /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 + + find "$NZ_DASHBOARD_PATH" -type d -exec chmod 700 {} \; +} + +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 + + 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 [ "$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 +} + +clean_all() { + if [ -z "$(ls -A ${NZ_DASHBOARD_PATH})" ]; then + sudo rm -rf ${NZ_DASHBOARD_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 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 "--------------------------------------------------------" +} + +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_dashboard") + install_dashboard 0 + ;; + "modify_dashboard_config") + modify_dashboard_config 0 + ;; + "restart_and_update") + restart_and_update 0 + ;; + "show_dashboard_log") + show_dashboard_log 0 + ;; + "uninstall_dashboard") + uninstall_dashboard 0 + ;; + "update_script") + update_script 0 + ;; + *) show_usage ;; + esac +else + select_version + show_menu +fi diff --git a/nezha/translations/.DS_Store b/nezha/translations/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4dd6426ddba088d4fe772a80a891f343c5f7ae4b GIT binary patch literal 6148 zcmeH~J#GR)427S8NJuo4DW~B8xxt8^mWBg>5)`F~L=mN-nxpgVal?{2TA^pj^TwX> z{(QyG8i1{T&u_pIz?|-il@9|m#xJi!A_5{H z0wN#+A}}HXaftK$UySIP^e7@A0^=ay--kkXt*NbRd^$Kp3qYMQ9maX|64c@eYE5lj znW0&B50<4CZHVWioLX{UO>JF!IV_tG%R8HQF*NJtu)=_5HAI65h`@lrw8u+7|9AAi z`u{7-k6~}L(O^YFfhR;HwH`J}2)bpM{l90UMG>+pmZsNr9M?y%7HJ-Wey}|S5 zzRrg~NP`-&K&rYy5n^3|5YSy$dAGQiJdYd;&#Ud=;L7zlAmU_#;XkgO}iLcoTjA zz6L)AUxy!rZ^AwBE!YQd!!N_X!q32y4B}LM1^Tc72jN@rG59V#2=_4f6Yv!L6ubh@ z!W7CpZ^Dnm+fe-U4|oIa!HDPKx1iW{8xFvC;FIvN4;8*0hjRbxC2yAe0c>#n=TQ9m z6pIy}E%_pJ`1?EXv+x$Y2>%SlzqJo5^$~a#o`Wr@;ZNZK_%^g~7fuqpSK(fG6Fv&R z4;SE%;Y)BglZpMWz(Wrx^#&Aw{f*9||Dy~R`$nMXe+dr5SK!m|XHdrf35tDvA1(AB zf@05ADEfaBivB-=qW?eP8Cb(fqW?Fb=>H4IQq>)ZRO%5#;8g8}xL6H9OjlzNNz^11 z{m(2q4@DKya89C z=>IP$c1&}A zr5&M-(Qt!$h$b;1@pktiv4CXxae`l+pA|n6r^uhjU+3~OoK$H2v?@*3E`IqUP2xsk zUJlV_SAJIfNG#&&?jhRt9z*;gx`{?|9Hc!=J4!?PJhlN3_Dx$yHq~{TMgEX(hsI5e z4x%J=!%zp@2;wBIsQzn>*qG@0aHaoRJ9LBSy4F+c+@JU2pq+N_kM!K1E@wIACe3B* z#(uZgXiu*h>j(7>-R-0&ZB!2$S?s2Pjk-g|dWOsy%!^a)M!sHb`)+DBhj#}Y>=|$| zFl(D#^f}w;c01J5Z87RBylYLj-{IbV#WU|(`g!xUrmJUc6r?uRGj8NIOv^+a7j^um z4(Qp~B#EAiQWNXc>e!@N9LZVQG`fXzHRCdUKvk-dOj=2r`aXxF=bLs-&oHKUM7fqF zzvKSRDI9&THa*X3<&ta;T=H^BWW2)y@2gkOG^|o&T0*9!tZ-S!1V?Y9p{#z>@jVkI zEU(9!&^9{rV9z$%_6*HBl5URgjCJ&OdXHB0e2T?xXd|PJcO1ppy%uw^JB6HY35(-} zWfE%>o@Zk}h#DP@gQ#xfRvzHG9oyBwH@;rp(5r47*euZvV}rJK+rdyC5?&U^5=hgt zM8}3+mIT$4%^-5s1X*g^k|~My+(=TH+osh{Hx!AK22o~I*QvS?vdk@=>m2atB=bB% zvYv(EMz;v8xsv{b^5*cwgmtHsHD8On!o%uyQ7Qu;nUlA89dgmNtjQnTdd z^Dnh+Oh>EFW9A}tM%G~9Oc2L5=8m^QN(3!3N3R8GQ|ICDY({Ww+Lj4zyrIo{kfceC zL2FTHU0;`@%dG5N7Oy8JUJX1$EenmBnwz^YS7XV()j^UMzcN#Bge47$!ek>!O{;Le z>xp-JoQq(dF(_71Q|rdds6G+pCCLk+cI%SWV+r?gpG;QHUX-(KuRg1*kxAEVydoCrFo;%kGfmq`ty(31Dh<4tEmu6- zs^-2c3QF_Ef?UfBeo_r7qDiVw;~`zg419qh4U@jdXZBxvZhGO&;>o4CiAzh1bLXzB zvQBKR=KrNe5)?>Z(`rjUk+73|^W8{Q=WR#wJYbR{V#MS3iJCPNvq0JGDr&aa?8qz> zyE5z?et{=%y*T2GZg+9)o{O&bvLv;wGI$3~rBTr}KO%OmQ;6WS@+hxx#S3lbR|31g zqNnRRGTrwG>~U;mKgtTi)48elbDRtQPx`SSiaTn?Rv>l-b=5sZF-q? z(vFaj{H^IhzfAQb!^21R-#e#dyiS8O6eUZ4mPtTSkQ8@_N12gw7G=C>Y*e~IONXRV z^va{Q>{%@*s1o7XdbKlc(l(yFJ;;KWU8d%ZAhe!Kp3h~G9_T+XP=<3w6@}q{6y5VA z4iaqGjCxhP=M?3z zd(R~hiWOSwW*W4px$8v<(xg7+jk4}1cV()$M0U#Fy+#a))nc>~Q8cw1drhSBc>6%9 z{w#7^Mr~7;^Gii^mxcOLz_ud~*s^ps9-mFK$V2z8;$GG`JviAr6WeP$OZC`(BIUBp z^6jnZt{Uxzv2p#4&I6{^@$VLm2xyRK=oeY$B% z%1ceB!b#9%?TYHu%zNrsC-9a`#A}$EjqO+Qm^1A=7mK1?)3XzkXD6PU(if-Z=BF>5 z@0(+jic@DMX#~D=GHWExg01Pk*$d8`Sq-F+JEt(crbmZI4>}_x=21Ozw07v|Gs9$5 z-#Ir)orTzq66CURO;2PL7S=~t6A%p(8QzVJPsgZ{Q7@eZuEKAp+Ba*rW+?F9ba5H?Ht+cCzjO7*{R6m)h}w) z^pWKt?VAmGjR>97yvPvGQ9J)L86Q2yM}*uNAB^ 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:265 +msgid "> Install" +msgstr "> Install" + +#: nezha/template.sh:271 +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:272 +msgid "Exit the installation? [Y/n]" +msgstr "Exit the installation? [Y/n]" + +#: nezha/template.sh:276 nezha/template.sh:284 +msgid "Exit the installation" +msgstr "Exit the installation" + +#: nezha/template.sh:280 +msgid "Continue" +msgstr "Continue" + +#: nezha/template.sh:298 +msgid "Modify Configuration" +msgstr "Modify Configuration" + +#: nezha/template.sh:302 +msgid "Download Docker Script" +msgstr "Download Docker Script" + +#: nezha/template.sh:305 nezha/template.sh:316 +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:309 +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:321 +msgid "Please enter the site title: " +msgstr "Please enter the site title: " + +#: nezha/template.sh:323 +msgid "Please enter the exposed port: (default 8008)" +msgstr "Please enter the exposed port: (default 8008)" + +#: nezha/template.sh:325 +msgid "Please specify the backend locale" +msgstr "Please specify the backend locale" + +#: nezha/template.sh:330 +msgid "Please enter [1-3]: " +msgstr "Please enter [1-3]: " + +#: nezha/template.sh:346 +msgid "Please enter the correct number [1-3]" +msgstr "Please enter the correct number [1-3]" + +#: nezha/template.sh:352 +msgid "All options cannot be empty" +msgstr "All options cannot be empty" + +#: nezha/template.sh:376 +msgid "Downloading service file" +msgstr "Downloading service file" + +#: nezha/template.sh:380 nezha/template.sh:386 +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:394 +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:404 +msgid "> Restart and Update" +msgstr "> Restart and Update" + +#: nezha/template.sh:413 +msgid "Nezha Monitoring Restart Successful" +msgstr "Nezha Monitoring Restart Successful" + +#: nezha/template.sh:414 +msgid "Default address: domain:site_access_port" +msgstr "Default address: domain:site_access_port" + +#: nezha/template.sh:416 +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:443 +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:446 +msgid "The current latest version is: ${_version}" +msgstr "The current latest version is: ${_version}" + +#: nezha/template.sh:477 +msgid "> View Log" +msgstr "> View Log" + +#: nezha/template.sh:503 +msgid "> Uninstall" +msgstr "> Uninstall" + +#: nezha/template.sh:550 +msgid "Nezha Monitor Management Script Usage: " +msgstr "Nezha Monitor Management Script Usage: " + +#: nezha/template.sh:552 +msgid "./nezha.sh - Show Menu" +msgstr "./nezha.sh - Show Menu" + +#: nezha/template.sh:553 +msgid "./nezha.sh install_dashboard - Install Dashboard" +msgstr "./nezha.sh install_dashboard - Install Dashboard" + +#: nezha/template.sh:554 +msgid "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration" +msgstr "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration" + +#: nezha/template.sh:555 +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:556 +msgid "./nezha.sh show_dashboard_log - View Dashboard Log" +msgstr "./nezha.sh show_dashboard_log - View Dashboard Log" + +#: nezha/template.sh:557 +msgid "./nezha.sh uninstall_dashboard - Uninstall Dashboard" +msgstr "./nezha.sh uninstall_dashboard - Uninstall Dashboard" + +#: nezha/template.sh:562 +msgid "${green}Nezha Monitor Management Script${plain}" +msgstr "${green}Nezha Monitor Management Script${plain}" + +#: nezha/template.sh:564 +msgid "${green}1.${plain} Install Dashboard" +msgstr "${green}1.${plain} Install Dashboard" + +#: nezha/template.sh:565 +msgid "${green}2.${plain} Modify Dashboard Configuration" +msgstr "${green}2.${plain} Modify Dashboard Configuration" + +#: nezha/template.sh:566 +msgid "${green}3.${plain} Restart and Update Dashboard" +msgstr "${green}3.${plain} Restart and Update Dashboard" + +#: nezha/template.sh:567 +msgid "${green}4.${plain} View Dashboard Log" +msgstr "${green}4.${plain} View Dashboard Log" + +#: nezha/template.sh:568 +msgid "${green}5.${plain} Uninstall Dashboard" +msgstr "${green}5.${plain} Uninstall Dashboard" + +#: nezha/template.sh:570 +msgid "${green}6.${plain} Update Script" +msgstr "${green}6.${plain} Update Script" + +#: nezha/template.sh:572 +msgid "${green}0.${plain} Exit Script" +msgstr "${green}0.${plain} Exit Script" + +#: nezha/template.sh:574 +msgid "Please enter [0-6]: " +msgstr "Please enter [0-6]: " + +#: nezha/template.sh:598 +msgid "Please enter the correct number [0-6]" +msgstr "Please enter the correct number [0-6]" diff --git a/nezha/translations/zh_CN/.DS_Store b/nezha/translations/zh_CN/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d732574b52c79796490a93f92a76340dcbfdcc5f GIT binary patch literal 6148 zcmeHKF-`+P474Fdq%VR)iqJ&klXrG~ zo?Yz}=d+pl_UpJYTbtPuPPA_hbK`sZ%x)^;Ksfezv;oh(Jz;j9k-M^Id$3n~ned1A zLuK1m;NvCe^FO@T4Q&Dz6ugiAguF=ELh`uMWlIbnM?E-MlAilmb#< zs=#e7*R22S*Z=7MrzEYUfE2hY1$?m^c3WJjYU}KBthEikhco8~PQyGX7@`~lqa0(w fa(ov_nb$bS`(8LE1|9LB1NAdNU1U<=zZLieSFsc1 literal 0 HcmV?d00001 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..b3436e6d38f04ebe4829bfaf67752d1881d49122 GIT binary patch literal 7049 zcmb`KTX5Xe8OPO@t6Q3uUMMZl0~m54yLRjZ!cqd{1}SmyI5vT%)FZF7yJ~i&Mbi30 zn%0B_$4ML;9LFJcZp2AUg6%X3iDSnx(-|IGcxn64hcbO(C9ONd(91B>$NoPZtyZ>o zOz2c&`6nHn%Xhxp`Sx$O-_RrAdJ^|tbbnP4UL@Xtf4Ew26oduftKg5pGvEW@AHWLm zA7D9n|4oAMAXp2|2e*Rvf+xT-@B?rW_&K-)WH$@KqhJlV7TgOy1O6F|fOp*@2#-qKnaY43&4-SJHgMvrQkda z{yw-G`~kQbd=@l8n&*A+d*H_)>FHnKtKd8c@l)^(kmULpoDcpJydS*t8(g=KgY^B^ z9=kmbf^oD@fTY(4uvy}>9$yASc<%-820s9w2R{KxzmabW!neSmgX_T*$iOjh5%^b7 z18;(oNbW}PcCZ`#Hh2oG1xLYOfwy5Yl7Bb&AMiZ*Ab1v?8TcoV_VsU&+V8+*3&9m2 zy(c_&f(-AMK+^YLKw4k;4!7^!;3If_!F%rlAIJNL-utak7Wu(y5TXgc0m+V?Ajy5u zdp`qWi^2tuzXO-!{f{8&s{}@aYJ~;hli)It zAf^%$AkDK4B){1WwtxfRO7NaLxEvx#`b&eKcb()ebN`@mIr9{{O;&f{&^)F!-FfYg6C2vZ2hy!Q*> z8od7=tOe)6*=f84eg#~C`v%<0aKokDSRg&XOs+ji_cY(bxJj>%;HC>{#EnPtL6V!U z`#4;Gp+~YeU0=f;!CirybU=0^AEOKICp>|BIqpi_*p`5lc|~q2bYbhYxZiDApj(}q-?%T0 z-|yjIKfdOSt#6QDNr{%9%ib~aFyjn2(cnIq}>-3ADGC%_5#u*wRnCW$Wz3&fuWha zNekoiV?(T%y(_|OqX~({q^8QkioBxmG+Sac`cu&JG`Cp6B_m&ZDjL;vNm1i@8!Ku| z(^Ia4v$U=?Dv~U*h8ET+>WY>zSX|bWG!xUxV%H_28C@qwT2~G4XkiT$plnq_QAOb? zM5&ghNHJJcR4J74Sx%+R76E}|Dr!a+e5EpONH4aSYi9*Z8<}VnE*Z-tlP!J{Xc8&> z;mU>KhMbIrJhQrc5w~EmSWJ$Z!fH7tW|9a>NkR`J!X%AcIbtZLTraxw*QYfd9W}NA zV%8zg&>m#4O3`&q$Cv09goKhpjs4IO%qMX(Jf4gx$~>C*`(=PNJ5rW)GaJwnrS0aRtEnG$DzecLpZ9X z%3R&?gpzof6K!t7H_DPoqJ}A~g@#xRVn7!VBrcoRxn}9sr`Od!Q@66d=BZ8fbv5g^ z30|ISv z>^m(w7-8Pa^;)lInKwZhJUr7}mY>#0%TcNxXu}O6rbb1O)S@Edye6Zv`K62Id+r<- zcw+cJdG|&H4ouLZWst9Uox{_4N;VUk6cK94P+s2V!Nt5NM%Ib2(yjI0>o&J*KB@B9 zL(u73gV>OyWFHmb2z-Yc@}{YzkaL@P3StO-q&K8>$(RwTq!KzQgJ%s1q6>BE78Oa8 ziFz~vQ$o|BM9GW~1#Tm)n%W-VMs^CmG zUeg(qRW5|5yr^Z|<1HaJ%1lh^vM9CW7oc>6<@|$SF^Z7*0od%yUt~=9nQUXfYC39&#vyxja;^N?y`p4b0>Cw(z@L*mxI3(rdnIA zwz1rfLw5hWeuv->1wMT0@Z0v`N$2c{-zWGpAv-y2@4v$POzrG&CWifP!Jh_GZ5>wE zh;`+X-FMMGaE|x)dj@|K*hfz~{d;%^yZ59u+3R-;{wA-8D41%DFo zB>ONz2z3KG5VedQ5XW$(IKLzZ)?N;BB+{CHecMmni=2gV&sa zF>ii%@OA$Rn5pV!wzXQR_Q<-gVCI z;d(#`??22ClRmkQfQMk9YMTU z6WvyO$GU2(b0qiLgw;Qo9UZdzCWQO!_Ex*UeX6y6>iCtZ*Cw)~9r&Id9dq6pyH9Y& zPdnp7o^XY-kjDYz*06VVS-X$&kaPw+oT2tW0m--H>_2Mv>=LHN59Wpktp0P>;nvTt z9pI{VfOYx z%;{VhcgBw*6LC$rH9YCG@0dL_VD}!gFZARl`*O#Tl}s4DFUq-n1G;qDcOj8kotLeF-{vl!?kR0?zM80M`*2ChZnrn3ss&mg9(WRGZHtmec%dIh@*H~Kkhr+ zy$Z*`m$N?^0Y^pdTDP_HB%Ivd^NwF}&uXVil^iDc0p?_zmxNH9`mMP(_`#vzUWG~wPh zXb)jwb)L(O4CMw}h1_Hp0)!XM+}~WYx#u>Ig1NoW^Y|ieNE>TAgUPwdcr^3Pz~`*1 zouq%B8twj8geZ?OSO_05U!hj^@^U`%cp9bP?K_6vboB2Yw0kd2^$f%;eV&;`hiU`^XNg=@r98vLA1n;d_FcJKAStN^5v8MU7h< z`Q`77kvt+$0Fwrw7w=rSeBK%FUF2@02~#^j+cop V4B9(7tpViE39{c8R<=~u{ujVTH8}tP literal 0 HcmV?d00001 diff --git a/nezha/translations/zh_CN/LC_MESSAGES/nezha.po b/nezha/translations/zh_CN/LC_MESSAGES/nezha.po new file mode 100644 index 0000000..5afc472 --- /dev/null +++ b/nezha/translations/zh_CN/LC_MESSAGES/nezha.po @@ -0,0 +1,301 @@ +# 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: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-29 19:59+0800\n" +"PO-Revision-Date: 2024-11-29 20:00+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:265 +msgid "> Install" +msgstr "> 安装" + +#: nezha/template.sh:271 +msgid "" +"You may have already installed the dashboard, repeated installation will " +"overwrite the data, please pay attention to backup." +msgstr "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。" + +#: nezha/template.sh:272 +msgid "Exit the installation? [Y/n]" +msgstr "是否退出安装? [Y/n]" + +#: nezha/template.sh:276 nezha/template.sh:284 +msgid "Exit the installation" +msgstr "退出安装" + +#: nezha/template.sh:280 +msgid "Continue" +msgstr "继续安装" + +#: nezha/template.sh:298 +msgid "Modify Configuration" +msgstr "> 修改配置" + +#: nezha/template.sh:302 +msgid "Download Docker Script" +msgstr "正在下载 Docker 脚本" + +#: nezha/template.sh:305 nezha/template.sh:316 +msgid "" +"Script failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "脚本获取失败,请检查本机能否链接 ${GITHUB_RAW_URL}" + +#: nezha/template.sh:309 +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:321 +msgid "Please enter the site title: " +msgstr "请输入站点标题: " + +#: nezha/template.sh:323 +msgid "Please enter the exposed port: (default 8008)" +msgstr "请输入暴露端口: (默认 8008)" + +#: nezha/template.sh:325 +msgid "Please specify the backend locale" +msgstr "请指定后台语言" + +#: nezha/template.sh:330 +msgid "Please enter [1-3]: " +msgstr "请输入选项 [1-3]" + +#: nezha/template.sh:346 +msgid "Please enter the correct number [1-3]" +msgstr "请输入正确的选项 [1-3]" + +#: nezha/template.sh:352 +msgid "All options cannot be empty" +msgstr "\"所有选项都不能为空\"" + +#: nezha/template.sh:376 +msgid "Downloading service file" +msgstr "正在下载服务文件" + +#: nezha/template.sh:380 nezha/template.sh:386 +msgid "" +"File failed to get, please check if the network can link ${GITHUB_RAW_URL}" +msgstr "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}" + +#: nezha/template.sh:394 +msgid "" +"Dashboard configuration modified successfully, please wait for Dashboard " +"self-restart to take effect" +msgstr "Dashboard 配置 修改成功,请稍等 Dashboard 重启生效" + +#: nezha/template.sh:404 +msgid "> Restart and Update" +msgstr "> 重启并更新" + +#: nezha/template.sh:413 +msgid "Nezha Monitoring Restart Successful" +msgstr "哪吒监控 重启成功" + +#: nezha/template.sh:414 +msgid "Default address: domain:site_access_port" +msgstr "默认地址:域名:站点访问端口" + +#: nezha/template.sh:416 +msgid "" +"The restart failed, probably because the boot time exceeded two seconds, " +"please check the log information later" +msgstr "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息" + +#: nezha/template.sh:443 +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:446 +msgid "The current latest version is: ${_version}" +msgstr "当前最新版本为: ${_version}" + +#: nezha/template.sh:477 +msgid "> View Log" +msgstr "> 获取日志" + +#: nezha/template.sh:503 +msgid "> Uninstall" +msgstr "> 卸载" + +#: nezha/template.sh:550 +msgid "Nezha Monitor Management Script Usage: " +msgstr "哪吒监控 管理脚本使用方法: " + +#: nezha/template.sh:552 +msgid "./nezha.sh - Show Menu" +msgstr "./nezha.sh - 显示管理菜单" + +#: nezha/template.sh:553 +msgid "./nezha.sh install_dashboard - Install Dashboard" +msgstr "./nezha.sh install_dashboard - 安装面板端" + +#: nezha/template.sh:554 +msgid "./nezha.sh modify_dashboard_config - Modify Dashboard Configuration" +msgstr "./nezha.sh modify_dashboard_config - 修改面板配置" + +#: nezha/template.sh:555 +msgid "" +"./nezha.sh restart_and_update - Restart and Update the Dashboard" +msgstr "./nezha.sh restart_and_update - 重启并更新面板" + +#: nezha/template.sh:556 +msgid "./nezha.sh show_dashboard_log - View Dashboard Log" +msgstr "./nezha.sh show_dashboard_log - 查看面板日志" + +#: nezha/template.sh:557 +msgid "./nezha.sh uninstall_dashboard - Uninstall Dashboard" +msgstr "./nezha.sh uninstall_dashboard - 卸载管理面板" + +#: nezha/template.sh:562 +msgid "${green}Nezha Monitor Management Script${plain}" +msgstr "${green}哪吒监控管理脚本${plain}" + +#: nezha/template.sh:564 +msgid "${green}1.${plain} Install Dashboard" +msgstr "${green}1.${plain} 安装面板端" + +#: nezha/template.sh:565 +msgid "${green}2.${plain} Modify Dashboard Configuration" +msgstr "${green}2.${plain} 修改面板配置" + +#: nezha/template.sh:566 +msgid "${green}3.${plain} Restart and Update Dashboard" +msgstr "${green}3.${plain} 重启并更新面板" + +#: nezha/template.sh:567 +msgid "${green}4.${plain} View Dashboard Log" +msgstr "${green}4.${plain} 查看面板日志" + +#: nezha/template.sh:568 +msgid "${green}5.${plain} Uninstall Dashboard" +msgstr "${green}5.${plain} 卸载管理面板" + +#: nezha/template.sh:570 +msgid "${green}6.${plain} Update Script" +msgstr "${green}6.${plain} 更新脚本" + +#: nezha/template.sh:572 +msgid "${green}0.${plain} Exit Script" +msgstr "${green}0.${plain} 退出脚本" + +#: nezha/template.sh:574 +msgid "Please enter [0-6]: " +msgstr "请输入选择 [0-6]: " + +#: nezha/template.sh:598 +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