refactor: make the installer script POSIX compliant (#376)

This commit is contained in:
UUBulb 2024-06-25 22:15:49 +08:00 committed by GitHub
parent aeb7c52565
commit 8805dffe85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 501 additions and 426 deletions

View File

@ -4,7 +4,7 @@
<br> <br>
<small><i>LOGO designed by <a href="https://xio.ng" target="_blank">熊大</a> .</i></small> <small><i>LOGO designed by <a href="https://xio.ng" target="_blank">熊大</a> .</i></small>
<br><br> <br><br>
<img alt="GitHub release (with filter)" src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&style=for-the-badge&logo=github&label=Dashboard">&nbsp;<img src="https://img.shields.io/github/v/release/nezhahq/agent?color=brightgreen&label=Agent&style=for-the-badge&logo=github">&nbsp;<img src="https://img.shields.io/github/actions/workflow/status/nezhahq/agent/agent.yml?label=Agent%20CI&logo=github&style=for-the-badge">&nbsp;<img src="https://img.shields.io/badge/Installer-v0.16.3-brightgreen?style=for-the-badge&logo=linux"> <img alt="GitHub release (with filter)" src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&style=for-the-badge&logo=github&label=Dashboard">&nbsp;<img src="https://img.shields.io/github/v/release/nezhahq/agent?color=brightgreen&label=Agent&style=for-the-badge&logo=github">&nbsp;<img src="https://img.shields.io/github/actions/workflow/status/nezhahq/agent/agent.yml?label=Agent%20CI&logo=github&style=for-the-badge">&nbsp;<img src="https://img.shields.io/badge/Installer-v0.17.0-brightgreen?style=for-the-badge&logo=linux">
<br> <br>
<br> <br>
<p>:trollface: <b>Nezha Monitoring: Self-hostable, lightweight, servers and websites monitoring and O&M tool.</b></p> <p>:trollface: <b>Nezha Monitoring: Self-hostable, lightweight, servers and websites monitoring and O&M tool.</b></p>

View File

@ -61,7 +61,7 @@
<div class="ui message"> <div class="ui message">
{{if .Conf.GRPCHost}} {{if .Conf.GRPCHost}}
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod
+x nezha.sh && sudo ./nezha.sh install_agent <code class="command">{{.Conf.GRPCHost}}</code> <code +x nezha.sh && ./nezha.sh install_agent <code class="command">{{.Conf.GRPCHost}}</code> <code
class="command">{{if .Conf.ProxyGRPCPort}}{{.Conf.ProxyGRPCPort}}{{else}}{{.Conf.GRPCPort}}{{end}}</code> <code class="command">{{if .Conf.ProxyGRPCPort}}{{.Conf.ProxyGRPCPort}}{{else}}{{.Conf.GRPCPort}}{{end}}</code> <code
class="command hostSecret"></code> <code class="command">{{if .Conf.TLS}}--tls{{end}}</code> class="command hostSecret"></code> <code class="command">{{if .Conf.TLS}}--tls{{end}}</code>
{{else}} {{else}}

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
#======================================================== #========================================================
# System Required: CentOS 7+ / Debian 8+ / Ubuntu 16+ / Alpine 3+ / # System Required: CentOS 7+ / Debian 8+ / Ubuntu 16+ / Alpine 3+ /
@ -12,7 +12,7 @@ NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard"
NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_AGENT_PATH="${NZ_BASE_PATH}/agent"
NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service"
NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard"
NZ_VERSION="v0.16.3" NZ_VERSION="v0.17.0"
red='\033[0;31m' red='\033[0;31m'
green='\033[0;32m' green='\033[0;32m'
@ -21,34 +21,55 @@ plain='\033[0m'
export PATH=$PATH:/usr/local/bin export PATH=$PATH:/usr/local/bin
os_arch="" os_arch=""
[ -e /etc/os-release ] && cat /etc/os-release | grep -i "PRETTY_NAME" | grep -qi "alpine" && os_alpine='1' [ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1'
sudo() {
EUID=$(id -ru)
if [ "$EUID" -ne 0 ]; then
if command -v sudo > /dev/null 2>&1; then
command sudo "$@"
else
err "错误: 您的系统未安装 sudo因此无法进行该项操作。"
exit 1
fi
else
"$@"
fi
}
check_systemd() {
if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then
echo "不支持此系统:未找到 systemctl 命令"
exit 1
fi
}
err() {
printf "${red}$*${plain}\n" >&2
}
pre_check() { pre_check() {
[ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1 && echo "不支持此系统:未找到 systemctl 命令" && exit 1
# check root
[[ $EUID -ne 0 ]] && echo -e "${red}错误: ${plain} 必须使用root用户运行此脚本\n" && exit 1
## os_arch ## os_arch
if [[ $(uname -m | grep 'x86_64') != "" ]]; then if uname -m | grep -q 'x86_64'; then
os_arch="amd64" os_arch="amd64"
elif [[ $(uname -m | grep 'i386\|i686') != "" ]]; then elif uname -m | grep -q 'i386\|i686'; then
os_arch="386" os_arch="386"
elif [[ $(uname -m | grep 'aarch64\|armv8b\|armv8l') != "" ]]; then elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then
os_arch="arm64" os_arch="arm64"
elif [[ $(uname -m | grep 'arm') != "" ]]; then elif uname -m | grep -q 'arm'; then
os_arch="arm" os_arch="arm"
elif [[ $(uname -m | grep 's390x') != "" ]]; then elif uname -m | grep -q 's390x'; then
os_arch="s390x" os_arch="s390x"
elif [[ $(uname -m | grep 'riscv64') != "" ]]; then elif uname -m | grep -q 'riscv64'; then
os_arch="riscv64" os_arch="riscv64"
fi fi
## China_IP ## China_IP
if [[ -z "${CN}" ]]; then if [ -z "$CN" ]; then
if [[ $(curl -m 10 -s https://ipapi.co/json | grep 'China') != "" ]]; then if curl -m 10 -s https://ipapi.co/json | grep -q 'China'; then
echo "根据ipapi.co提供的信息当前IP可能在中国" echo "根据ipapi.co提供的信息当前IP可能在中国"
read -e -r -p "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):" input printf "是否选用中国镜像完成安装? [Y/n] (自定义镜像输入 3):"
read -r input
case $input in case $input in
[yY][eE][sS] | [yY]) [yY][eE][sS] | [yY])
echo "使用中国镜像" echo "使用中国镜像"
@ -61,7 +82,8 @@ pre_check() {
[3]) [3])
echo "使用自定义镜像" echo "使用自定义镜像"
read -e -r -p "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用: " input printf "请输入自定义镜像 (例如:dn-dao-github-mirror.daocloud.io),留空为不使用: "
read -r input
case $input in case $input in
*) *)
CUSTOM_MIRROR=$input CUSTOM_MIRROR=$input
@ -77,14 +99,14 @@ pre_check() {
fi fi
fi fi
if [[ -n "${CUSTOM_MIRROR}" ]]; then if [ -n "$CUSTOM_MIRROR" ]; then
GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master"
GITHUB_URL=$CUSTOM_MIRROR GITHUB_URL=$CUSTOM_MIRROR
Get_Docker_URL="get.docker.com" Get_Docker_URL="get.docker.com"
Get_Docker_Argu=" -s docker --mirror Aliyun" Get_Docker_Argu=" -s docker --mirror Aliyun"
Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard"
else else
if [[ -z "${CN}" ]]; then if [ -z "$CN" ]; then
GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master" GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master"
GITHUB_URL="github.com" GITHUB_URL="github.com"
Get_Docker_URL="get.docker.com" Get_Docker_URL="get.docker.com"
@ -103,8 +125,8 @@ pre_check() {
installation_check() { installation_check() {
if docker compose version >/dev/null 2>&1; then if docker compose version >/dev/null 2>&1; then
DOCKER_COMPOSE_COMMAND="docker compose" DOCKER_COMPOSE_COMMAND="docker compose"
if $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then
NEZHA_IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard")
if [ -n "$NEZHA_IMAGES" ]; then if [ -n "$NEZHA_IMAGES" ]; then
echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:"
echo "$NEZHA_IMAGES" echo "$NEZHA_IMAGES"
@ -117,8 +139,8 @@ installation_check() {
fi fi
elif command -v docker-compose >/dev/null 2>&1; then elif command -v docker-compose >/dev/null 2>&1; then
DOCKER_COMPOSE_COMMAND="docker-compose" DOCKER_COMPOSE_COMMAND="docker-compose"
if $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then
NEZHA_IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard")
if [ -n "$NEZHA_IMAGES" ]; then if [ -n "$NEZHA_IMAGES" ]; then
echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:" echo "存在带有 nezha-dashboard 仓库的 Docker 镜像:"
echo "$NEZHA_IMAGES" echo "$NEZHA_IMAGES"
@ -131,17 +153,18 @@ installation_check() {
fi fi
fi fi
if [[ -f $NZ_DASHBOARD_PATH/app ]]; then if [ -f "$NZ_DASHBOARD_PATH/app" ]; then
IS_DOCKER_NEZHA=0 IS_DOCKER_NEZHA=0
FRESH_INSTALL=0 FRESH_INSTALL=0
fi fi
} }
select_version() { select_version() {
if [[ -z $IS_DOCKER_NEZHA ]]; then if [ -z "$IS_DOCKER_NEZHA" ]; then
echo -e "${yellow}请自行选择您的安装方式如果你是安装Agent输入哪个都是一样的\n1. Docker\n2. 独立安装${plain}" printf "${yellow}请自行选择您的安装方式如果你是安装Agent输入哪个都是一样的\n1. Docker\n2. 独立安装${plain}\n"
while true; do while true; do
read -e -r -p "请输入选择 [1-2]" option printf "请输入选择 [1-2]"
read -r option
case "${option}" in case "${option}" in
1) 1)
IS_DOCKER_NEZHA=1 IS_DOCKER_NEZHA=1
@ -152,7 +175,7 @@ select_version() {
break break
;; ;;
*) *)
echo "${red}请输入正确的数字 [1-2]${plain}" err "请输入正确的选择 [1-2]"
;; ;;
esac esac
done done
@ -160,18 +183,18 @@ select_version() {
} }
update_script() { update_script() {
echo -e "> 更新脚本" echo "> 更新脚本"
curl -sL https://${GITHUB_RAW_URL}/script/install.sh -o /tmp/nezha.sh curl -sL https://${GITHUB_RAW_URL}/script/install.sh -o /tmp/nezha.sh
new_version=$(cat /tmp/nezha.sh | grep "NZ_VERSION" | head -n 1 | awk -F "=" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') new_version=$(grep "NZ_VERSION" /tmp/nezha.sh | head -n 1 | awk -F "=" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
if [ ! -n "$new_version" ]; then if [ ! -n "$new_version" ]; then
echo -e "脚本获取失败,请检查本机能否链接 https://${GITHUB_RAW_URL}/script/install.sh" echo "脚本获取失败,请检查本机能否链接 https://${GITHUB_RAW_URL}/script/install.sh"
return 1 return 1
fi fi
echo -e "当前最新版本为: ${new_version}" echo "当前最新版本为: ${new_version}"
mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh
echo -e "3s后执行新脚本" echo "3s后执行新脚本"
sleep 3s sleep 3s
clear clear
exec ./nezha.sh exec ./nezha.sh
@ -179,18 +202,18 @@ update_script() {
} }
before_show_menu() { before_show_menu() {
echo && echo -n -e "${yellow}* 按回车返回主菜单 *${plain}" && read temp echo && printf "${yellow}* 按回车返回主菜单 *${plain}" && read temp
show_menu show_menu
} }
install_base() { install_base() {
(command -v git >/dev/null 2>&1 && 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) || (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 git unzip) (install_soft curl wget unzip)
} }
install_arch() { install_arch() {
echo -e "${green}提示: ${plain} Arch安装libselinux需添加nezha-agent用户安装完会自动删除建议手动检查一次\n" printf "${green}提示: ${plain} Arch安装libselinux需添加nezha-agent用户安装完会自动删除建议手动检查一次\n"
read -e -r -p "是否安装libselinux? [Y/n] " input read -r -p "是否安装libselinux? [Y/n] " input
case $input in case $input in
[yY][eE][sS] | [yY]) [yY][eE][sS] | [yY])
useradd -m nezha-agent useradd -m nezha-agent
@ -213,24 +236,26 @@ install_arch() {
} }
install_soft() { install_soft() {
(command -v yum >/dev/null 2>&1 && yum makecache && yum install $* selinux-policy -y) || (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install $* selinux-policy -y) ||
(command -v apt >/dev/null 2>&1 && apt update && apt install $* selinux-utils -y) || (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install $* selinux-utils -y) ||
(command -v pacman >/dev/null 2>&1 && pacman -Syu $* base-devel --noconfirm && install_arch) || (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu $* base-devel --noconfirm && install_arch) ||
(command -v apt-get >/dev/null 2>&1 && apt-get update && apt-get install $* selinux-utils -y) || (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 && apk update && apk add $* -f) (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add $* -f)
} }
install_dashboard() { install_dashboard() {
check_systemd
install_base install_base
echo -e "> 安装面板" echo "> 安装面板"
# 哪吒监控文件夹 # 哪吒监控文件夹
if [[ ! $FRESH_INSTALL == 0 ]]; then if [ ! "$FRESH_INSTALL" = 0 ]; then
mkdir -p $NZ_DASHBOARD_PATH sudo mkdir -p $NZ_DASHBOARD_PATH
else else
echo "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。" echo "您可能已经安装过面板端,重复安装会覆盖数据,请注意备份。"
read -e -r -p "是否退出安装? [Y/n] " input printf "是否退出安装? [Y/n] "
read -r input
case $input in case $input in
[yY][eE][sS] | [yY]) [yY][eE][sS] | [yY])
echo "退出安装" echo "退出安装"
@ -246,40 +271,40 @@ install_dashboard() {
esac esac
fi fi
chmod 777 -R $NZ_DASHBOARD_PATH sudo chmod -R 700 $NZ_DASHBOARD_PATH
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
install_dashboard_docker install_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
install_dashboard_standalone install_dashboard_standalone
fi fi
modify_dashboard_config 0 modify_dashboard_config 0
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
install_dashboard_docker() { install_dashboard_docker() {
if [[ ! $FRESH_INSTALL == 0 ]]; then if [ ! "$FRESH_INSTALL" = 0 ]; then
command -v docker >/dev/null 2>&1 command -v docker >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "正在安装 Docker" echo "正在安装 Docker"
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
bash <(curl -sL https://${Get_Docker_URL}) ${Get_Docker_Argu} >/dev/null 2>&1 curl -sL https://${Get_Docker_URL} | sudo bash -s ${Get_Docker_Argu}
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}下载脚本失败,请检查本机能否连接 ${Get_Docker_URL}${plain}" err "下载脚本失败,请检查本机能否连接 ${Get_Docker_URL}"
return 0 return 0
fi fi
systemctl enable docker.service sudo systemctl enable docker.service
systemctl start docker.service sudo systemctl start docker.service
else else
apk add docker docker-compose >/dev/null 2>&1 sudo apk add docker docker-compose
rc-update add docker sudo rc-update add docker
rc-service docker start sudo rc-service docker start
fi fi
echo -e "${green}Docker${plain} 安装成功" printf "${green}Docker${plain} 安装成功\n"
installation_check installation_check
fi fi
fi fi
@ -287,7 +312,7 @@ install_dashboard_docker() {
install_dashboard_standalone() { install_dashboard_standalone() {
if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then
mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1
fi fi
} }
@ -297,10 +322,10 @@ selinux() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
getenforce | grep '[Ee]nfor' getenforce | grep '[Ee]nfor'
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo -e "SELinux是开启状态正在关闭" echo "SELinux是开启状态正在关闭"
setenforce 0 &>/dev/null sudo setenforce 0 &>/dev/null
find_key="SELINUX=" find_key="SELINUX="
sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config
fi fi
fi fi
} }
@ -309,9 +334,9 @@ install_agent() {
install_base install_base
selinux selinux
echo -e "> 安装监控Agent" echo "> 安装监控Agent"
echo -e "正在获取监控Agent版本号" echo "正在获取监控Agent版本号"
local version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') local version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
if [ ! -n "$version" ]; then if [ ! -n "$version" ]; then
@ -322,26 +347,26 @@ install_agent() {
fi fi
if [ ! -n "$version" ]; then if [ ! -n "$version" ]; then
echo -e "获取版本号失败,请检查本机能否链接 https://api.github.com/repos/nezhahq/agent/releases/latest" err "获取版本号失败,请检查本机能否链接 https://api.github.com/repos/nezhahq/agent/releases/latest"
return 0 return 1
else else
echo -e "当前最新版本为: ${version}" echo "当前最新版本为: ${version}"
fi fi
# 哪吒监控文件夹 # 哪吒监控文件夹
mkdir -p $NZ_AGENT_PATH sudo mkdir -p $NZ_AGENT_PATH
chmod 777 -R $NZ_AGENT_PATH sudo chmod -R 700 $NZ_AGENT_PATH
echo -e "正在下载监控端" echo "正在下载监控端"
wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip https://${GITHUB_URL}/nezhahq/agent/releases/download/${version}/nezha-agent_linux_${os_arch}.zip >/dev/null 2>&1 wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip https://${GITHUB_URL}/nezhahq/agent/releases/download/${version}/nezha-agent_linux_${os_arch}.zip >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}Release 下载失败,请检查本机能否连接 ${GITHUB_URL}${plain}" err "Release 下载失败,请检查本机能否连接 ${GITHUB_URL}"
return 0 return 1
fi fi
unzip -qo nezha-agent_linux_${os_arch}.zip && sudo unzip -qo nezha-agent_linux_${os_arch}.zip &&
mv nezha-agent $NZ_AGENT_PATH && sudo mv nezha-agent $NZ_AGENT_PATH &&
rm -rf nezha-agent_linux_${os_arch}.zip README.md sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md
if [ $# -ge 3 ]; then if [ $# -ge 3 ]; then
modify_agent_config "$@" modify_agent_config "$@"
@ -349,27 +374,31 @@ install_agent() {
modify_agent_config 0 modify_agent_config 0
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
modify_agent_config() { modify_agent_config() {
echo -e "> 修改Agent配置" echo "> 修改Agent配置"
if [ $# -lt 3 ]; then if [ $# -lt 3 ]; then
echo "请先在管理面板上添加Agent记录下密钥" && echo "请先在管理面板上添加Agent记录下密钥"
read -ep "请输入一个解析到面板所在IP的域名不可套CDN: " nz_grpc_host && printf "请输入一个解析到面板所在IP的域名不可套CDN: "
read -ep "请输入面板RPC端口 (默认值 5555): " nz_grpc_port && read -r nz_grpc_host
read -ep "请输入Agent 密钥: " nz_client_secret && printf "请输入面板RPC端口 (默认值 5555): "
read -ep "是否启用针对 gRPC 端口的 SSL/TLS加密 (--tls),需要请按 [y],默认是不需要,不理解用户可回车跳过: " nz_grpc_proxy read -r nz_grpc_port
grep -qiw 'Y' <<<"${nz_grpc_proxy}" && args='--tls' printf "请输入Agent 密钥: "
if [[ -z "${nz_grpc_host}" || -z "${nz_client_secret}" ]]; then read -r nz_client_secret
echo -e "${red}所有选项都不能为空${plain}" 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 before_show_menu
return 1 return 1
fi fi
if [[ -z "${nz_grpc_port}" ]]; then if [ -z "$nz_grpc_port" ]; then
nz_grpc_port=5555 nz_grpc_port=5555
fi fi
else else
@ -382,14 +411,14 @@ modify_agent_config() {
fi fi
fi fi
${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 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 [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
${NZ_AGENT_PATH}/nezha-agent service uninstall >/dev/null 2>&1 sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall >/dev/null 2>&1
${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 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 fi
echo -e "Agent配置 ${green}修改成功,请稍等重启生效${plain}" printf "Agent配置 ${green}修改成功,请稍等重启生效${plain}\n"
#if [[ $# == 0 ]]; then #if [[ $# == 0 ]]; then
# before_show_menu # before_show_menu
@ -397,46 +426,53 @@ modify_agent_config() {
} }
modify_dashboard_config() { modify_dashboard_config() {
echo -e "> 修改面板配置" echo "> 修改面板配置"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
echo -e "正在下载 Docker 脚本" echo "正在下载 Docker 脚本"
wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/script/docker-compose.yaml >/dev/null 2>&1 wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/script/docker-compose.yaml >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}下载脚本失败,请检查本机能否连接 ${GITHUB_RAW_URL}${plain}" err "下载脚本失败,请检查本机能否连接 ${GITHUB_RAW_URL}"
return 0 return 0
fi fi
fi fi
wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/script/config.yaml >/dev/null 2>&1 wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/script/config.yaml >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}下载脚本失败,请检查本机能否连接 ${GITHUB_RAW_URL}${plain}" err "下载脚本失败,请检查本机能否连接 ${GITHUB_RAW_URL}"
return 0 return 0
fi fi
echo "关于 GitHub Oauth2 应用:在 https://github.com/settings/developers 创建无需审核Callback 填 http(s)://域名或IP/oauth2/callback" && 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" && echo "关于 Gitee Oauth2 应用:在 https://gitee.com/oauth/applications 创建无需审核Callback 填 http(s)://域名或IP/oauth2/callback"
read -ep "请输入 OAuth2 提供商(github/gitlab/jihulab/gitee默认 github): " nz_oauth2_type && printf "请输入 OAuth2 提供商(github/gitlab/jihulab/gitee默认 github): "
read -ep "请输入 Oauth2 应用的 Client ID: " nz_github_oauth_client_id && read -r nz_oauth2_type
read -ep "请输入 Oauth2 应用的 Client Secret: " nz_github_oauth_client_secret && printf "请输入 Oauth2 应用的 Client ID: "
read -ep "请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开: " nz_admin_logins && read -r nz_github_oauth_client_id
read -ep "请输入站点标题: " nz_site_title && printf "请输入 Oauth2 应用的 Client Secret: "
read -ep "请输入站点访问端口: (默认 8008)" nz_site_port && read -r nz_github_oauth_client_secret
read -ep "请输入用于 Agent 接入的 RPC 端口: (默认 5555)" nz_grpc_port 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 if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then
echo -e "${red}所有选项都不能为空${plain}" err "所有选项都不能为空"
before_show_menu before_show_menu
return 1 return 1
fi fi
if [[ -z "${nz_site_port}" ]]; then if [ -z "$nz_site_port" ]; then
nz_site_port=8008 nz_site_port=8008
fi fi
if [[ -z "${nz_grpc_port}" ]]; then if [ -z "$nz_grpc_port" ]; then
nz_grpc_port=5555 nz_grpc_port=5555
fi fi
if [[ -z "${nz_oauth2_type}" ]]; then if [ -z "$nz_oauth2_type" ]; then
nz_oauth2_type=github nz_oauth2_type=github
fi fi
@ -447,260 +483,260 @@ modify_dashboard_config() {
sed -i "s/nz_github_oauth_client_secret/${nz_github_oauth_client_secret}/" /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_language/zh-CN/" /tmp/nezha-config.yaml
sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml 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_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml
sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml
fi fi
mkdir -p $NZ_DASHBOARD_PATH/data sudo mkdir -p $NZ_DASHBOARD_PATH/data
mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml
fi fi
if [[ $IS_DOCKER_NEZHA == 0 ]]; then if [ "$IS_DOCKER_NEZHA" = 0 ]; then
echo -e "正在下载服务文件" echo "正在下载服务文件"
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/script/nezha-dashboard.service >/dev/null 2>&1 sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/script/nezha-dashboard.service >/dev/null 2>&1
else else
wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/script/nezha-dashboard >/dev/null 2>&1 sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/script/nezha-dashboard >/dev/null 2>&1
chmod +x $NZ_DASHBOARD_SERVICERC sudo chmod +x $NZ_DASHBOARD_SERVICERC
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}${plain}" err "文件下载失败,请检查本机能否连接 ${GITHUB_RAW_URL}"
return 0 return 0
fi fi
fi fi
fi fi
echo -e "面板配置 ${green}修改成功,请稍等重启生效${plain}" printf "面板配置 ${green}修改成功,请稍等重启生效${plain}\n"
restart_and_update restart_and_update
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
restart_and_update() { restart_and_update() {
echo -e "> 重启并更新面板" echo "> 重启并更新面板"
cd $NZ_DASHBOARD_PATH if [ "$IS_DOCKER_NEZHA" = 1 ]; then
if [[ $IS_DOCKER_NEZHA == 1 ]]; then
restart_and_update_docker restart_and_update_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
restart_and_update_standalone restart_and_update_standalone
fi fi
if [[ $? == 0 ]]; then if [ $? = 0 ]; then
echo -e "${green}哪吒监控 重启成功${plain}" printf "${green}哪吒监控 重启成功${plain}\n"
echo -e "默认管理面板地址:${yellow}域名:站点访问端口${plain}" printf "默认管理面板地址:${yellow}域名:站点访问端口${plain}\n"
else else
echo -e "${red}重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息${plain}" err "重启失败,可能是因为启动时间超过了两秒,请稍后查看日志信息"
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
restart_and_update_docker() { restart_and_update_docker() {
$DOCKER_COMPOSE_COMMAND pull sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull
$DOCKER_COMPOSE_COMMAND down sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down
$DOCKER_COMPOSE_COMMAND up -d sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d
} }
restart_and_update_standalone() { restart_and_update_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl stop nezha-dashboard sudo systemctl daemon-reload
sudo systemctl stop nezha-dashboard
else else
rc-service nezha-dashboard stop sudo rc-service nezha-dashboard stop
fi fi
wget -qO app.zip https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip >/dev/null 2>&1 && unzip -qq app.zip && mv dist/dashboard-linux-$os_arch app && rm -r app.zip dist sudo wget -qO $NZ_DASHBOARD_PATH/app.zip https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip >/dev/null 2>&1 && sudo unzip -qq $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dist/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm -r $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_PATH/dist
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl daemon-reload sudo systemctl enable nezha-dashboard
systemctl enable nezha-dashboard sudo systemctl restart nezha-dashboard
systemctl restart nezha-dashboard
else else
rc-update add nezha-dashboard sudo rc-update add nezha-dashboard
rc-service nezha-dashboard restart sudo rc-service nezha-dashboard restart
fi fi
} }
start_dashboard() { start_dashboard() {
echo -e "> 启动面板" echo "> 启动面板"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
start_dashboard_docker start_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
start_dashboard_standalone start_dashboard_standalone
fi fi
if [[ $? == 0 ]]; then if [ $? = 0 ]; then
echo -e "${green}哪吒监控 启动成功${plain}" printf "${green}哪吒监控 启动成功${plain}\n"
else else
echo -e "${red}启动失败,请稍后查看日志信息${plain}" err "启动失败,请稍后查看日志信息"
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
start_dashboard_docker() { start_dashboard_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND up -d sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d
} }
start_dashboard_standalone() { start_dashboard_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl start nezha-dashboard sudo systemctl start nezha-dashboard
else else
rc-service nezha-dashboard start sudo rc-service nezha-dashboard start
fi fi
} }
stop_dashboard() { stop_dashboard() {
echo -e "> 停止面板" echo "> 停止面板"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
stop_dashboard_docker stop_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
stop_dashboard_standalone stop_dashboard_standalone
fi fi
if [[ $? == 0 ]]; then if [ $? = 0 ]; then
echo -e "${green}哪吒监控 停止成功${plain}" printf "${green}哪吒监控 停止成功${plain}\n"
else else
echo -e "${red}停止失败,请稍后查看日志信息${plain}" err "停止失败,请稍后查看日志信息"
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
stop_dashboard_docker() { stop_dashboard_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND down sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down
} }
stop_dashboard_standalone() { stop_dashboard_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl stop nezha-dashboard sudo systemctl stop nezha-dashboard
else else
rc-service nezha-dashboard stop sudo rc-service nezha-dashboard stop
fi fi
} }
show_dashboard_log() { show_dashboard_log() {
echo -e "> 获取面板日志" echo "> 获取面板日志"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
show_dashboard_log_docker show_dashboard_log_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
show_dashboard_log_standalone show_dashboard_log_standalone
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
show_dashboard_log_docker() { show_dashboard_log_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND logs -f sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f
} }
show_dashboard_log_standalone() { show_dashboard_log_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
journalctl -xf -u nezha-dashboard.service sudo journalctl -xf -u nezha-dashboard.service
else else
tail -n 10 /var/log/nezha-dashboard.err sudo tail -n 10 /var/log/nezha-dashboard.err
fi fi
} }
uninstall_dashboard() { uninstall_dashboard() {
echo -e "> 卸载管理面板" echo "> 卸载管理面板"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
uninstall_dashboard_docker uninstall_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
uninstall_dashboard_standalone uninstall_dashboard_standalone
fi fi
clean_all clean_all
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
uninstall_dashboard_docker() { uninstall_dashboard_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND down sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down
rm -rf $NZ_DASHBOARD_PATH sudo rm -rf $NZ_DASHBOARD_PATH
docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1
docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/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() { uninstall_dashboard_standalone() {
rm -rf $NZ_DASHBOARD_PATH sudo rm -rf $NZ_DASHBOARD_PATH
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl stop nezha-dashboard sudo systemctl disable nezha-dashboard
sudo systemctl stop nezha-dashboard
else else
rc-service nezha-dashboard stop sudo rc-update del nezha-dashboard
sudo rc-service nezha-dashboard stop
fi fi
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
rm $NZ_DASHBOARD_SERVICE sudo rm $NZ_DASHBOARD_SERVICE
else else
rm $NZ_DASHBOARD_SERVICERC sudo rm $NZ_DASHBOARD_SERVICERC
fi fi
} }
show_agent_log() { show_agent_log() {
echo -e "> 获取Agent日志" echo "> 获取Agent日志"
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
journalctl -xf -u nezha-agent.service sudo journalctl -xf -u nezha-agent.service
else else
tail -n 10 /var/log/nezha-agent.err sudo tail -n 10 /var/log/nezha-agent.err
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
uninstall_agent() { uninstall_agent() {
echo -e "> 卸载Agent" echo "> 卸载Agent"
${NZ_AGENT_PATH}/nezha-agent service uninstall sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall
rm -rf $NZ_AGENT_PATH sudo rm -rf $NZ_AGENT_PATH
clean_all clean_all
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
restart_agent() { restart_agent() {
echo -e "> 重启Agent" echo "> 重启Agent"
${NZ_AGENT_PATH}/nezha-agent service restart sudo ${NZ_AGENT_PATH}/nezha-agent service restart
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
clean_all() { clean_all() {
if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then
rm -rf ${NZ_BASE_PATH} sudo rm -rf ${NZ_BASE_PATH}
fi fi
} }
@ -726,7 +762,7 @@ show_usage() {
} }
show_menu() { show_menu() {
echo -e " printf "
${green}哪吒监控管理脚本${plain} ${red}${NZ_VERSION}${plain} ${green}哪吒监控管理脚本${plain} ${red}${NZ_VERSION}${plain}
--- https://github.com/naiba/nezha --- --- https://github.com/naiba/nezha ---
${green}1.${plain} 安装面板端 ${green}1.${plain} 安装面板端
@ -747,7 +783,7 @@ show_menu() {
————————————————- ————————————————-
${green}0.${plain} 退出脚本 ${green}0.${plain} 退出脚本
" "
echo && read -ep "请输入选择 [0-13]: " num echo && printf "请输入选择 [0-13]: " && read -r num
case "${num}" in case "${num}" in
0) 0)
exit 0 exit 0
@ -792,7 +828,7 @@ show_menu() {
update_script update_script
;; ;;
*) *)
echo -e "${red}请输入正确的数字 [0-13]${plain}" err "请输入正确的数字 [0-13]"
;; ;;
esac esac
} }
@ -800,7 +836,7 @@ show_menu() {
pre_check pre_check
installation_check installation_check
if [[ $# > 0 ]]; then if [ $# -gt 0 ]; then
case $1 in case $1 in
"install_dashboard") "install_dashboard")
install_dashboard 0 install_dashboard 0

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
#======================================================== #========================================================
# System Required: CentOS 7+ / Debian 8+ / Ubuntu 16+ / Alpine 3+ / # System Required: CentOS 7+ / Debian 8+ / Ubuntu 16+ / Alpine 3+ /
@ -12,7 +12,7 @@ NZ_DASHBOARD_PATH="${NZ_BASE_PATH}/dashboard"
NZ_AGENT_PATH="${NZ_BASE_PATH}/agent" NZ_AGENT_PATH="${NZ_BASE_PATH}/agent"
NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service" NZ_DASHBOARD_SERVICE="/etc/systemd/system/nezha-dashboard.service"
NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard" NZ_DASHBOARD_SERVICERC="/etc/init.d/nezha-dashboard"
NZ_VERSION="v0.16.3" NZ_VERSION="v0.17.0"
red='\033[0;31m' red='\033[0;31m'
green='\033[0;32m' green='\033[0;32m'
@ -21,34 +21,55 @@ plain='\033[0m'
export PATH=$PATH:/usr/local/bin export PATH=$PATH:/usr/local/bin
os_arch="" os_arch=""
[ -e /etc/os-release ] && cat /etc/os-release | grep -i "PRETTY_NAME" | grep -qi "alpine" && os_alpine='1' [ -e /etc/os-release ] && grep -i "PRETTY_NAME" /etc/os-release | grep -qi "alpine" && os_alpine='1'
sudo() {
EUID=$(id -ru)
if [ "$EUID" -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
}
check_systemd() {
if [ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1; then
echo "System not supported: systemctl not found"
exit 1
fi
}
err() {
printf "${red}$*${plain}\n" >&2
}
pre_check() { pre_check() {
[ "$os_alpine" != 1 ] && ! command -v systemctl >/dev/null 2>&1 && echo "This system is not supported: systemctl not found" && exit 1
# check root
[[ $EUID -ne 0 ]] && echo -e "${red}ERROR: ${plain} This script must be run with the root user!\n" && exit 1
## os_arch ## os_arch
if [[ $(uname -m | grep 'x86_64') != "" ]]; then if uname -m | grep -q 'x86_64'; then
os_arch="amd64" os_arch="amd64"
elif [[ $(uname -m | grep 'i386\|i686') != "" ]]; then elif uname -m | grep -q 'i386\|i686'; then
os_arch="386" os_arch="386"
elif [[ $(uname -m | grep 'aarch64\|armv8b\|armv8l') != "" ]]; then elif uname -m | grep -q 'aarch64\|armv8b\|armv8l'; then
os_arch="arm64" os_arch="arm64"
elif [[ $(uname -m | grep 'arm') != "" ]]; then elif uname -m | grep -q 'arm'; then
os_arch="arm" os_arch="arm"
elif [[ $(uname -m | grep 's390x') != "" ]]; then elif uname -m | grep -q 's390x'; then
os_arch="s390x" os_arch="s390x"
elif [[ $(uname -m | grep 'riscv64') != "" ]]; then elif uname -m | grep -q 'riscv64'; then
os_arch="riscv64" os_arch="riscv64"
fi fi
## China_IP ## China_IP
if [[ -z "${CN}" ]]; then if [ -z "$CN" ]; then
if [[ $(curl -m 10 -s https://ipapi.co/json | grep 'China') != "" ]]; then if curl -m 10 -s https://ipapi.co/json | grep -q 'China'; then
echo "According to the information provided by ipapi.co, the current IP may be in China" echo "According to the information provided by ipapi.co, the current IP may be in China"
read -e -r -p "Is the installation done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3):" input printf "Will the installation be done with a Chinese Mirror? [Y/n] (Custom Mirror Input 3): "
read -r input
case $input in case $input in
[yY][eE][sS] | [yY]) [yY][eE][sS] | [yY])
echo "Use Chinese Mirror" echo "Use Chinese Mirror"
@ -56,12 +77,13 @@ pre_check() {
;; ;;
[nN][oO] | [nN]) [nN][oO] | [nN])
echo "No Use Chinese Mirror" echo "Do Not Use Chinese Mirror"
;; ;;
[3]) [3])
echo "Use Custom Mirror" echo "Use Custom Mirror"
read -e -r -p "Please enter a custom image (e.g. :dn-dao-github-mirror.daocloud.io), leave blank to nouse: " input 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 case $input in
*) *)
CUSTOM_MIRROR=$input CUSTOM_MIRROR=$input
@ -70,20 +92,20 @@ pre_check() {
;; ;;
*) *)
echo "No Use Chinese Mirror" echo "Do Not Use Chinese Mirror"
;; ;;
esac esac
fi fi
fi fi
if [[ -n "${CUSTOM_MIRROR}" ]]; then if [ -n "$CUSTOM_MIRROR" ]; then
GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master" GITHUB_RAW_URL="gitee.com/naibahq/nezha/raw/master"
GITHUB_URL=$CUSTOM_MIRROR GITHUB_URL=$CUSTOM_MIRROR
Get_Docker_URL="get.docker.com" Get_Docker_URL="get.docker.com"
Get_Docker_Argu=" -s docker --mirror Aliyun" Get_Docker_Argu=" -s docker --mirror Aliyun"
Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard" Docker_IMG="registry.cn-shanghai.aliyuncs.com\/naibahq\/nezha-dashboard"
else else
if [[ -z "${CN}" ]]; then if [ -z "$CN" ]; then
GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master" GITHUB_RAW_URL="raw.githubusercontent.com/naiba/nezha/master"
GITHUB_URL="github.com" GITHUB_URL="github.com"
Get_Docker_URL="get.docker.com" Get_Docker_URL="get.docker.com"
@ -102,12 +124,13 @@ pre_check() {
installation_check() { installation_check() {
if docker compose version >/dev/null 2>&1; then if docker compose version >/dev/null 2>&1; then
DOCKER_COMPOSE_COMMAND="docker compose" DOCKER_COMPOSE_COMMAND="docker compose"
if $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then if sudo $DOCKER_COMPOSE_COMMAND ls | grep -qw "$NZ_DASHBOARD_PATH/docker-compose.yaml" >/dev/null 2>&1; then
NEZHA_IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard")
if [ -n "$NEZHA_IMAGES" ]; then if [ -n "$NEZHA_IMAGES" ]; then
echo "Docker image with nezha-dashboard repository exists:" echo "Docker image with nezha-dashboard repository exists:"
echo "$NEZHA_IMAGES" echo "$NEZHA_IMAGES"
IS_DOCKER_NEZHA=1 IS_DOCKER_NEZHA=1
FRESH_INSTALL=0
return return
else else
echo "No Docker images with the nezha-dashboard repository were found." echo "No Docker images with the nezha-dashboard repository were found."
@ -115,12 +138,13 @@ installation_check() {
fi fi
elif command -v docker-compose >/dev/null 2>&1; then elif command -v docker-compose >/dev/null 2>&1; then
DOCKER_COMPOSE_COMMAND="docker-compose" DOCKER_COMPOSE_COMMAND="docker-compose"
if $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then if sudo $DOCKER_COMPOSE_COMMAND -f "$NZ_DASHBOARD_PATH/docker-compose.yaml" config >/dev/null 2>&1; then
NEZHA_IMAGES=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard") NEZHA_IMAGES=$(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -w "nezha-dashboard")
if [ -n "$NEZHA_IMAGES" ]; then if [ -n "$NEZHA_IMAGES" ]; then
echo "Docker image with nezha-dashboard repository exists:" echo "Docker image with nezha-dashboard repository exists:"
echo "$NEZHA_IMAGES" echo "$NEZHA_IMAGES"
IS_DOCKER_NEZHA=1 IS_DOCKER_NEZHA=1
FRESH_INSTALL=0
return return
else else
echo "No Docker images with the nezha-dashboard repository were found." echo "No Docker images with the nezha-dashboard repository were found."
@ -128,17 +152,18 @@ installation_check() {
fi fi
fi fi
if [[ -f $NZ_DASHBOARD_PATH/app ]]; then if [ -f "$NZ_DASHBOARD_PATH/app" ]; then
IS_DOCKER_NEZHA=0 IS_DOCKER_NEZHA=0
FRESH_INSTALL=0 FRESH_INSTALL=0
fi fi
} }
select_version() { select_version() {
if [[ -z $IS_DOCKER_NEZHA ]]; then if [ -z "$IS_DOCKER_NEZHA" ]; then
echo -e "${yellow}Select your installation method(Input anything is ok if you are installing agent):\n1. Docker\n2. Standalone${plain}" printf "${yellow}Select your installation method(Input anything is ok if you are installing agent):\n1. Docker\n2. Standalone${plain}\n"
while true; do while true; do
read -e -r -p "Please enter [1-2]: " option printf "Please enter [1-2]: "
read -r option
case "${option}" in case "${option}" in
1) 1)
IS_DOCKER_NEZHA=1 IS_DOCKER_NEZHA=1
@ -149,7 +174,7 @@ select_version() {
break break
;; ;;
*) *)
echo "${red}Please enter the correct number [1-2]${plain}" err "Please enter the correct number [1-2]"
;; ;;
esac esac
done done
@ -157,18 +182,18 @@ select_version() {
} }
update_script() { update_script() {
echo -e "> Update Script" echo "> Update Script"
curl -sL https://${GITHUB_RAW_URL}/script/install_en.sh -o /tmp/nezha.sh curl -sL https://${GITHUB_RAW_URL}/script/install_en.sh -o /tmp/nezha.sh
new_version=$(cat /tmp/nezha.sh | grep "NZ_VERSION" | head -n 1 | awk -F "=" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') new_version=$(grep "NZ_VERSION" /tmp/nezha.sh | head -n 1 | awk -F "=" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
if [ ! -n "$new_version" ]; then if [ ! -n "$new_version" ]; then
echo -e "Script failed to get, please check if the network can link https://${GITHUB_RAW_URL}/script/install.sh" echo "Script failed to get, please check if the network can link https://${GITHUB_RAW_URL}/script/install.sh"
return 1 return 1
fi fi
echo -e "The current latest version is: ${new_version}" echo "The current latest version is: ${new_version}"
mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh mv -f /tmp/nezha.sh ./nezha.sh && chmod a+x ./nezha.sh
echo -e "Execute new script after 3s" echo "Execute new script after 3s"
sleep 3s sleep 3s
clear clear
exec ./nezha.sh exec ./nezha.sh
@ -176,18 +201,18 @@ update_script() {
} }
before_show_menu() { before_show_menu() {
echo && echo -n -e "${yellow}* Press Enter to return to the main menu *${plain}" && read temp echo && printf "${yellow}* Press Enter to return to the main menu *${plain}" && read temp
show_menu show_menu
} }
install_base() { install_base() {
(command -v git >/dev/null 2>&1 && 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) || (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 git unzip) (install_soft curl wget unzip)
} }
install_arch() { install_arch() {
echo -e "${green}Info: ${plain} Archlinux needs to add nezha-agent user to install libselinux. It will be deleted automatically after installation. It is recommended to check manually\n" printf "${green}Info: ${plain} Archlinux needs to add nezha-agent user to install libselinux. It will be deleted automatically after installation. It is recommended to check manually\n"
read -e -r -p "Do you need to install libselinux? [Y/n] " input read -r -p "Do you need to install libselinux? [Y/n] " input
case $input in case $input in
[yY][eE][sS] | [yY]) [yY][eE][sS] | [yY])
useradd -m nezha-agent useradd -m nezha-agent
@ -210,24 +235,26 @@ install_arch() {
} }
install_soft() { install_soft() {
(command -v yum >/dev/null 2>&1 && yum makecache && yum install $* selinux-policy -y) || (command -v yum >/dev/null 2>&1 && sudo yum makecache && sudo yum install $* selinux-policy -y) ||
(command -v apt >/dev/null 2>&1 && apt update && apt install $* selinux-utils -y) || (command -v apt >/dev/null 2>&1 && sudo apt update && sudo apt install $* selinux-utils -y) ||
(command -v pacman >/dev/null 2>&1 && pacman -Syu $* base-devel --noconfirm && install_arch) || (command -v pacman >/dev/null 2>&1 && sudo pacman -Syu $* base-devel --noconfirm && install_arch) ||
(command -v apt-get >/dev/null 2>&1 && apt-get update && apt-get install $* selinux-utils -y) || (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 && apk update && apk add $* -f) (command -v apk >/dev/null 2>&1 && sudo apk update && sudo apk add $* -f)
} }
install_dashboard() { install_dashboard() {
check_systemd
install_base install_base
echo -e "> Install Panel" echo "> Install Dashboard"
# Nezha Monitoring Folder # Nezha Monitoring Folder
if [[ ! $FRESH_INSTALL == 0 ]]; then if [ ! "$FRESH_INSTALL" = 0 ]; then
mkdir -p $NZ_DASHBOARD_PATH sudo mkdir -p $NZ_DASHBOARD_PATH
else else
echo "You may have already installed the dashboard, repeated installation will overwrite the data, please pay attention to backup." echo "You may have already installed the dashboard, repeated installation will overwrite the data, please pay attention to backup."
read -e -r -p "Exit the installation? [Y/n] " input printf "Exit the installation? [Y/n] "
read -r input
case $input in case $input in
[yY][eE][sS] | [yY]) [yY][eE][sS] | [yY])
echo "Exit the installation." echo "Exit the installation."
@ -242,40 +269,41 @@ install_dashboard() {
;; ;;
esac esac
fi fi
chmod 777 -R $NZ_DASHBOARD_PATH
if [[ $IS_DOCKER_NEZHA == 1 ]]; then sudo chmod -R 700 $NZ_DASHBOARD_PATH
if [ "$IS_DOCKER_NEZHA" = 1 ]; then
install_dashboard_docker install_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
install_dashboard_standalone install_dashboard_standalone
fi fi
modify_dashboard_config 0 modify_dashboard_config 0
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
install_dashboard_docker() { install_dashboard_docker() {
if [[ ! $FRESH_INSTALL == 0 ]]; then if [ ! "$FRESH_INSTALL" = 0 ]; then
command -v docker >/dev/null 2>&1 command -v docker >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "Installing Docker" echo "Installing Docker"
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
bash <(curl -sL https://${Get_Docker_URL}) ${Get_Docker_Argu} >/dev/null 2>&1 curl -sL https://${Get_Docker_URL} | sudo bash -s ${Get_Docker_Argu}
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}Script failed to get, please check if the network can link ${Get_Docker_URL}${plain}" err "Script failed to get, please check if the network can link ${Get_Docker_URL}"
return 0 return 0
fi fi
systemctl enable docker.service sudo systemctl enable docker.service
systemctl start docker.service sudo systemctl start docker.service
else else
apk add docker docker-compose >/dev/null 2>&1 sudo apk add docker docker-compose
rc-update add docker sudo rc-update add docker
rc-service docker start sudo rc-service docker start
fi fi
echo -e "${green}Docker${plain} installed successfully" printf "${green}Docker${plain} installed successfully\n"
installation_check installation_check
fi fi
fi fi
@ -283,7 +311,7 @@ install_dashboard_docker() {
install_dashboard_standalone() { install_dashboard_standalone() {
if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then if [ ! -d "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" ] || [ ! -d "${NZ_DASHBOARD_PATH}/resource/static/custom" ]; then
mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1 sudo mkdir -p "${NZ_DASHBOARD_PATH}/resource/template/theme-custom" "${NZ_DASHBOARD_PATH}/resource/static/custom" >/dev/null 2>&1
fi fi
} }
@ -293,10 +321,10 @@ selinux() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
getenforce | grep '[Ee]nfor' getenforce | grep '[Ee]nfor'
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo -e "SELinux runningclosing now" echo "SELinux running, closing now!"
setenforce 0 &>/dev/null sudo setenforce 0 &>/dev/null
find_key="SELINUX=" find_key="SELINUX="
sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config sudo sed -ri "/^$find_key/c${find_key}disabled" /etc/selinux/config
fi fi
fi fi
} }
@ -305,9 +333,9 @@ install_agent() {
install_base install_base
selinux selinux
echo -e "> Install Nezha Agent" echo "> Install Agent"
echo -e "Obtaining Agent version" echo "Obtaining Agent version"
local version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') local version=$(curl -m 10 -sL "https://api.github.com/repos/nezhahq/agent/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
if [ ! -n "$version" ]; then if [ ! -n "$version" ]; then
@ -318,26 +346,26 @@ install_agent() {
fi fi
if [ ! -n "$version" ]; then if [ ! -n "$version" ]; then
echo -e "Fail to obtaine agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest" err "Fail to obtaine agent version, please check if the network can link https://api.github.com/repos/nezhahq/agent/releases/latest"
return 0 return 1
else else
echo -e "The current latest version is: ${version}" echo "The current latest version is: ${version}"
fi fi
# Nezha Monitoring Folder # Nezha Monitoring Folder
mkdir -p $NZ_AGENT_PATH sudo mkdir -p $NZ_AGENT_PATH
chmod 777 -R $NZ_AGENT_PATH sudo chmod -R 700 $NZ_AGENT_PATH
echo -e "Downloading Agent" echo "Downloading Agent"
wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip https://${GITHUB_URL}/nezhahq/agent/releases/download/${version}/nezha-agent_linux_${os_arch}.zip >/dev/null 2>&1 wget -t 2 -T 60 -O nezha-agent_linux_${os_arch}.zip https://${GITHUB_URL}/nezhahq/agent/releases/download/${version}/nezha-agent_linux_${os_arch}.zip >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}Fail to download agent, please check if the network can link ${GITHUB_URL}${plain}" err "Fail to download agent, please check if the network can link ${GITHUB_URL}"
return 0 return 1
fi fi
unzip -qo nezha-agent_linux_${os_arch}.zip && sudo unzip -qo nezha-agent_linux_${os_arch}.zip &&
mv nezha-agent $NZ_AGENT_PATH && sudo mv nezha-agent $NZ_AGENT_PATH &&
rm -rf nezha-agent_linux_${os_arch}.zip README.md sudo rm -rf nezha-agent_linux_${os_arch}.zip README.md
if [ $# -ge 3 ]; then if [ $# -ge 3 ]; then
modify_agent_config "$@" modify_agent_config "$@"
@ -345,27 +373,31 @@ install_agent() {
modify_agent_config 0 modify_agent_config 0
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
modify_agent_config() { modify_agent_config() {
echo -e "> Modify Agent Configuration" echo "> Modify Agent Configuration"
if [ $# -lt 3 ]; then if [ $# -lt 3 ]; then
echo "Please add Agent in the admin panel first, record the secret" && echo "Please add Agent in the admin panel first, record the secret"
read -ep "Please enter a domain that resolves to the IP where the panel is located (no CDN sets): " nz_grpc_host && printf "Please enter a domain that resolves to the IP where the panel is located (no CDN): "
read -ep "Please enter the panel RPC port (default 5555): " nz_grpc_port && read -r nz_grpc_host
read -ep "Please enter the Agent secret: " nz_client_secret && printf "Please enter the panel RPC port (default 5555): "
read -ep "Do you want to enable SSL/TLS encryption for the gRPC port (--tls)? Press [y] if yes, the default is not required, and users can press Enter to skip if you don't understand: " nz_grpc_proxy read -r nz_grpc_port
grep -qiw 'Y' <<<"${nz_grpc_proxy}" && args='--tls' printf "Please enter the Agent secret: "
if [[ -z "${nz_grpc_host}" || -z "${nz_client_secret}" ]]; then read -r nz_client_secret
echo -e "${red}All options cannot be empty${plain}" 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 before_show_menu
return 1 return 1
fi fi
if [[ -z "${nz_grpc_port}" ]]; then if [ -z "$nz_grpc_port" ]; then
nz_grpc_port=5555 nz_grpc_port=5555
fi fi
else else
@ -378,14 +410,14 @@ modify_agent_config() {
fi fi
fi fi
${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 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 [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
${NZ_AGENT_PATH}/nezha-agent service uninstall >/dev/null 2>&1 sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall >/dev/null 2>&1
${NZ_AGENT_PATH}/nezha-agent service install -s "$nz_grpc_host:$nz_grpc_port" -p $nz_client_secret $args >/dev/null 2>&1 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 fi
echo -e "Agent configuration ${green} modified successfully, please wait for agent self-restart to take effect${plain}" printf "Agent configuration ${green} modified successfully, please wait for agent self-restart to take effect${plain}\n"
#if [[ $# == 0 ]]; then #if [[ $# == 0 ]]; then
# before_show_menu # before_show_menu
@ -393,46 +425,53 @@ modify_agent_config() {
} }
modify_dashboard_config() { modify_dashboard_config() {
echo -e "> Modify Panel Configuration" echo "> Modify Dashboard Configuration"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
echo -e "Download Docker Script" echo "Download Docker Script"
wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/script/docker-compose.yaml >/dev/null 2>&1 wget -t 2 -T 60 -O /tmp/nezha-docker-compose.yaml https://${GITHUB_RAW_URL}/script/docker-compose.yaml >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}Script failed to get, please check if the network can link ${GITHUB_RAW_URL}${plain}" err "Script failed to get, please check if the network can link ${GITHUB_RAW_URL}"
return 0 return 0
fi fi
fi fi
wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/script/config.yaml >/dev/null 2>&1 wget -t 2 -T 60 -O /tmp/nezha-config.yaml https://${GITHUB_RAW_URL}/script/config.yaml >/dev/null 2>&1
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}Script failed to get, please check if the network can link ${GITHUB_RAW_URL}${plain}" err "Script failed to get, please check if the network can link ${GITHUB_RAW_URL}"
return 0 return 0
fi 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 "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" && 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"
read -ep "Please enter the OAuth2 provider (github/gitlab/jihulab/gitee, default github): " nz_oauth2_type && printf "Please enter the OAuth2 provider (github/gitlab/jihulab/gitee, default github): "
read -ep "Please enter the Client ID of the Oauth2 application: " nz_github_oauth_client_id && read -r nz_oauth2_type
read -ep "Please enter the Client Secret of the Oauth2 application: " nz_github_oauth_client_secret && printf "Please enter the Client ID of the Oauth2 application: "
read -ep "Please enter your GitHub/Gitee login name as the administrator, separated by commas: " nz_admin_logins && read -r nz_github_oauth_client_id
read -ep "Please enter the site title: " nz_site_title && printf "Please enter the Client Secret of the Oauth2 application: "
read -ep "Please enter the site access port: (default 8008)" nz_site_port && read -r nz_github_oauth_client_secret
read -ep "Please enter the RPC port to be used for Agent access: (default 5555)" nz_grpc_port 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 if [ -z "$nz_admin_logins" ] || [ -z "$nz_github_oauth_client_id" ] || [ -z "$nz_github_oauth_client_secret" ] || [ -z "$nz_site_title" ]; then
echo -e "${red}All options cannot be empty${plain}" err "All options cannot be empty"
before_show_menu before_show_menu
return 1 return 1
fi fi
if [[ -z "${nz_site_port}" ]]; then if [ -z "$nz_site_port" ]; then
nz_site_port=8008 nz_site_port=8008
fi fi
if [[ -z "${nz_grpc_port}" ]]; then if [ -z "$nz_grpc_port" ]; then
nz_grpc_port=5555 nz_grpc_port=5555
fi fi
if [[ -z "${nz_oauth2_type}" ]]; then if [ -z "$nz_oauth2_type" ]; then
nz_oauth2_type=github nz_oauth2_type=github
fi fi
@ -441,262 +480,262 @@ modify_dashboard_config() {
sed -i "s/nz_grpc_port/${nz_grpc_port}/" /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_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_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 sed -i "s/nz_site_title/${nz_site_title}/" /tmp/nezha-config.yaml
sed -i "s/nz_language/en-US/" /tmp/nezha-config.yaml if [ "$IS_DOCKER_NEZHA" = 1 ]; then
if [[ $IS_DOCKER_NEZHA == 1 ]]; then
sed -i "s/nz_site_port/${nz_site_port}/" /tmp/nezha-docker-compose.yaml 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_grpc_port/${nz_grpc_port}/g" /tmp/nezha-docker-compose.yaml
sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml sed -i "s/nz_image_url/${Docker_IMG}/" /tmp/nezha-docker-compose.yaml
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml sed -i "s/80/${nz_site_port}/" /tmp/nezha-config.yaml
fi fi
mkdir -p $NZ_DASHBOARD_PATH/data sudo mkdir -p $NZ_DASHBOARD_PATH/data
mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml sudo mv -f /tmp/nezha-config.yaml ${NZ_DASHBOARD_PATH}/data/config.yaml
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml sudo mv -f /tmp/nezha-docker-compose.yaml ${NZ_DASHBOARD_PATH}/docker-compose.yaml
fi fi
if [[ $IS_DOCKER_NEZHA == 0 ]]; then if [ "$IS_DOCKER_NEZHA" = 0 ]; then
echo -e "Downloading service file" echo "Downloading service file"
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/script/nezha-dashboard.service >/dev/null 2>&1 sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICE https://${GITHUB_RAW_URL}/script/nezha-dashboard.service >/dev/null 2>&1
else else
wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/script/nezha-dashboard >/dev/null 2>&1 sudo wget -t 2 -T 60 -O $NZ_DASHBOARD_SERVICERC https://${GITHUB_RAW_URL}/script/nezha-dashboard >/dev/null 2>&1
chmod +x $NZ_DASHBOARD_SERVICERC sudo chmod +x $NZ_DASHBOARD_SERVICERC
if [[ $? != 0 ]]; then if [ $? != 0 ]; then
echo -e "${red}File failed to get, please check if the network can link ${GITHUB_RAW_URL}${plain}" err "File failed to get, please check if the network can link ${GITHUB_RAW_URL}"
return 0 return 0
fi fi
fi fi
fi fi
echo -e "Dashboard configuration ${green} modified successfully, please wait for Dashboard self-restart to take effect${plain}" printf "Dashboard configuration ${green} modified successfully, please wait for Dashboard self-restart to take effect${plain}\n"
restart_and_update restart_and_update
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
restart_and_update() { restart_and_update() {
echo -e "> Restart and Update the Panel" echo "> Restart and Update the Panel"
cd $NZ_DASHBOARD_PATH if [ "$IS_DOCKER_NEZHA" = 1 ]; then
if [[ $IS_DOCKER_NEZHA == 1 ]]; then
restart_and_update_docker restart_and_update_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
restart_and_update_standalone restart_and_update_standalone
fi fi
if [[ $? == 0 ]]; then if [ $? = 0 ]; then
echo -e "${green}Nezha Monitoring Restart Successful${plain}" printf "${green}Nezha Monitoring Restart Successful${plain}\n"
echo -e "Default panel address: ${yellow}domain:Site_access_port${plain}" printf "Default panel address: ${yellow}domain:Site_access_port${plain}\n"
else else
echo -e "${red}The restart failed, probably because the boot time exceeded two seconds, please check the log information later${plain}" err "The restart failed, probably because the boot time exceeded two seconds, please check the log information later"
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
restart_and_update_docker() { restart_and_update_docker() {
$DOCKER_COMPOSE_COMMAND pull sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml pull
$DOCKER_COMPOSE_COMMAND down sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down
$DOCKER_COMPOSE_COMMAND up -d sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d
} }
restart_and_update_standalone() { restart_and_update_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl stop nezha-dashboard sudo systemctl daemon-reload
sudo systemctl stop nezha-dashboard
else else
rc-service nezha-dashboard stop sudo rc-service nezha-dashboard stop
fi fi
wget -qO app.zip https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip >/dev/null 2>&1 && unzip -qq app.zip && mv dist/dashboard-linux-$os_arch app && rm -r app.zip dist sudo wget -qO $NZ_DASHBOARD_PATH/app.zip https://${GITHUB_URL}/naiba/nezha/releases/latest/download/dashboard-linux-$os_arch.zip >/dev/null 2>&1 && sudo unzip -qq $NZ_DASHBOARD_PATH/app.zip -d $NZ_DASHBOARD_PATH && sudo mv $NZ_DASHBOARD_PATH/dist/dashboard-linux-$os_arch $NZ_DASHBOARD_PATH/app && sudo rm -r $NZ_DASHBOARD_PATH/app.zip $NZ_DASHBOARD_PATH/dist
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl daemon-reload sudo systemctl enable nezha-dashboard
systemctl enable nezha-dashboard sudo systemctl restart nezha-dashboard
systemctl restart nezha-dashboard
else else
rc-update add nezha-dashboard sudo rc-update add nezha-dashboard
rc-service nezha-dashboard restart sudo rc-service nezha-dashboard restart
fi fi
} }
start_dashboard() { start_dashboard() {
echo -e "> Start Panel" echo "> Start Panel"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
start_dashboard_docker start_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
start_dashboard_standalone start_dashboard_standalone
fi fi
if [[ $? == 0 ]]; then if [ $? = 0 ]; then
echo -e "${green}Nezha Monitoring Start Successful${plain}" printf "${green}Nezha Monitoring Start Successful${plain}\n"
else else
echo -e "${red}Failed to start, please check the log message later${plain}" err "Failed to start, please check the log message later"
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
start_dashboard_docker() { start_dashboard_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND up -d sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml up -d
} }
start_dashboard_standalone() { start_dashboard_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl start nezha-dashboard sudo systemctl start nezha-dashboard
else else
rc-service nezha-dashboard start sudo rc-service nezha-dashboard start
fi fi
} }
stop_dashboard() { stop_dashboard() {
echo -e "> Stop Panel" echo "> Stop Panel"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
stop_dashboard_docker stop_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
stop_dashboard_standalone stop_dashboard_standalone
fi fi
if [[ $? == 0 ]]; then if [ $? = 0 ]; then
echo -e "${green}Nezha Monitoring Stop Successful${plain}" printf "${green}Nezha Monitoring Stop Successful${plain}\n"
else else
echo -e "${red}Failed to stop, please check the log message later${plain}" err "Failed to stop, please check the log message later"
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
stop_dashboard_docker() { stop_dashboard_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND down sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down
} }
stop_dashboard_standalone() { stop_dashboard_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl stop nezha-dashboard sudo systemctl stop nezha-dashboard
else else
rc-service nezha-dashboard stop sudo rc-service nezha-dashboard stop
fi fi
} }
show_dashboard_log() { show_dashboard_log() {
echo -e "> View Panel Log" echo "> View Panel Log"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
show_dashboard_log_docker show_dashboard_log_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
show_dashboard_log_standalone show_dashboard_log_standalone
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
show_dashboard_log_docker() { show_dashboard_log_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND logs -f sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml logs -f
} }
show_dashboard_log_standalone() { show_dashboard_log_standalone() {
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
journalctl -xf -u nezha-dashboard.service sudo journalctl -xf -u nezha-dashboard.service
else else
tail -n 10 /var/log/nezha-dashboard.err sudo tail -n 10 /var/log/nezha-dashboard.err
fi fi
} }
uninstall_dashboard() { uninstall_dashboard() {
echo -e "> Uninstall Panel" echo "> Uninstall Panel"
if [[ $IS_DOCKER_NEZHA == 1 ]]; then if [ "$IS_DOCKER_NEZHA" = 1 ]; then
uninstall_dashboard_docker uninstall_dashboard_docker
elif [[ $IS_DOCKER_NEZHA == 0 ]]; then elif [ "$IS_DOCKER_NEZHA" = 0 ]; then
uninstall_dashboard_standalone uninstall_dashboard_standalone
fi fi
clean_all clean_all
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
uninstall_dashboard_docker() { uninstall_dashboard_docker() {
cd $NZ_DASHBOARD_PATH && $DOCKER_COMPOSE_COMMAND down sudo $DOCKER_COMPOSE_COMMAND -f ${NZ_DASHBOARD_PATH}/docker-compose.yaml down
rm -rf $NZ_DASHBOARD_PATH sudo rm -rf $NZ_DASHBOARD_PATH
docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1 sudo docker rmi -f ghcr.io/naiba/nezha-dashboard >/dev/null 2>&1
docker rmi -f registry.cn-shanghai.aliyuncs.com/naibahq/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() { uninstall_dashboard_standalone() {
rm -rf $NZ_DASHBOARD_PATH sudo rm -rf $NZ_DASHBOARD_PATH
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
systemctl stop nezha-dashboard sudo systemctl disable nezha-dashboard
sudo systemctl stop nezha-dashboard
else else
rc-service nezha-dashboard stop sudo rc-update del nezha-dashboard
sudo rc-service nezha-dashboard stop
fi fi
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
rm $NZ_DASHBOARD_SERVICE sudo rm $NZ_DASHBOARD_SERVICE
else else
rm $NZ_DASHBOARD_SERVICERC sudo rm $NZ_DASHBOARD_SERVICERC
fi fi
} }
show_agent_log() { show_agent_log() {
echo -e "> > View Agent Log" echo "> View Agent Log"
if [ "$os_alpine" != 1 ]; then if [ "$os_alpine" != 1 ]; then
journalctl -xf -u nezha-agent.service sudo journalctl -xf -u nezha-agent.service
else else
tail -n 10 /var/log/nezha-agent.err sudo tail -n 10 /var/log/nezha-agent.err
fi fi
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
uninstall_agent() { uninstall_agent() {
echo -e "> Uninstall Agent" echo "> Uninstall Agent"
${NZ_AGENT_PATH}/nezha-agent service uninstall sudo ${NZ_AGENT_PATH}/nezha-agent service uninstall
rm -rf $NZ_AGENT_PATH sudo rm -rf $NZ_AGENT_PATH
clean_all clean_all
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
restart_agent() { restart_agent() {
echo -e "> Restart Agent" echo "> Restart Agent"
${NZ_AGENT_PATH}/nezha-agent service restart sudo ${NZ_AGENT_PATH}/nezha-agent service restart
if [[ $# == 0 ]]; then if [ $# = 0 ]; then
before_show_menu before_show_menu
fi fi
} }
clean_all() { clean_all() {
if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then if [ -z "$(ls -A ${NZ_BASE_PATH})" ]; then
rm -rf ${NZ_BASE_PATH} sudo rm -rf ${NZ_BASE_PATH}
fi fi
} }
@ -722,7 +761,7 @@ show_usage() {
} }
show_menu() { show_menu() {
echo -e " printf "
${green}Nezha Monitor Management Script${plain} ${red}${NZ_VERSION}${plain} ${green}Nezha Monitor Management Script${plain} ${red}${NZ_VERSION}${plain}
--- https://github.com/naiba/nezha --- --- https://github.com/naiba/nezha ---
${green}1.${plain} Install Panel ${green}1.${plain} Install Panel
@ -743,7 +782,7 @@ show_menu() {
————————————————- ————————————————-
${green}0.${plain} Exit Script ${green}0.${plain} Exit Script
" "
echo && read -ep "Please enter [0-13]: " num echo && printf "Please enter [0-13]: " && read -r num
case "${num}" in case "${num}" in
0) 0)
exit 0 exit 0
@ -788,7 +827,7 @@ show_menu() {
update_script update_script
;; ;;
*) *)
echo -e "${red}Please enter the correct number [0-13]${plain}" err "Please enter the correct number [0-13]"
;; ;;
esac esac
} }
@ -796,7 +835,7 @@ show_menu() {
pre_check pre_check
installation_check installation_check
if [[ $# > 0 ]]; then if [ $# -gt 0 ]; then
case $1 in case $1 in
"install_dashboard") "install_dashboard")
install_dashboard 0 install_dashboard 0