realm/realm.sh

175 lines
4.3 KiB
Bash
Raw Normal View History

2024-11-24 00:41:27 -05:00
#!/bin/bash
# 定义颜色变量
red="\033[0;31m"
green="\033[0;32m"
plain="\033[0m"
# 脚本版本
sh_ver="1.1"
# 配置文件路径
CONFIG_PATH="/root/realm/config.toml"
# 初始化环境目录
init_env() {
mkdir -p /root/realm
}
# 更新脚本
Update_Shell() {
echo -e "当前版本为 [ ${sh_ver} ],开始检测最新版本..."
sh_new_ver=$(wget --no-check-certificate -qO- "https://raw.githubusercontent.com/wcwq98/realm/main/realm.sh" | grep 'sh_ver="' | awk -F "=" '{print $NF}' | sed 's/\"//g' | head -1)
[[ -z ${sh_new_ver} ]] && echo -e "${red}检测最新版本失败!${plain}" && return
if [[ ${sh_new_ver} != ${sh_ver} ]]; then
echo -e "发现新版本 [ ${sh_new_ver} ],是否更新?[Y/n]"
read -p "(默认: y):" yn
[[ -z "${yn}" ]] && yn="y"
if [[ ${yn} == [Yy] ]]; then
wget -N --no-check-certificate https://raw.githubusercontent.com/wcwq98/realm/main/realm.sh && chmod +x realm.sh
echo -e "脚本已更新为最新版本 [ ${sh_new_ver} ]"
exit 0
else
echo -e "已取消更新。"
fi
else
echo -e "当前已是最新版本 [ ${sh_new_ver} ]"
fi
}
# 初始化realm状态
2024-11-24 00:41:27 -05:00
update_realm_status() {
if [ -f "/root/realm/realm" ]; then
realm_status="已安装"
realm_status_color=$green
else
realm_status="未安装"
realm_status_color=$red
fi
}
# 检查realm服务状态
check_realm_service_status() {
if systemctl is-active --quiet realm; then
echo -e "${green}启用${plain}"
else
echo -e "${red}未启用${plain}"
fi
}
# 显示菜单的函数
show_menu() {
clear
echo "欢迎使用realm一键转发脚本"
echo "================="
echo "1. 部署环境"
echo "2. 添加转发"
2024-11-30 20:35:15 -05:00
echo "3. 添加端口段转发"
echo "4. 删除转发"
echo "5. 启动服务"
echo "6. 停止服务"
echo "7. 重启服务"
echo "8. 检测更新"
echo "9. 一键卸载"
echo "10. 更新脚本"
2024-11-24 00:41:27 -05:00
echo "0. 退出脚本"
echo "================="
echo -e "realm 状态:${realm_status_color}${realm_status}${plain}"
echo -n "realm 转发状态:"
check_realm_service_status
}
# 部署环境的函数
deploy_realm() {
init_env
2024-11-24 00:41:27 -05:00
cd /root/realm
_version=$(curl -s https://api.github.com/repos/zhboner/realm/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "$_version" ]; then
echo "获取版本号失败,请检查网络连接。"
2024-11-24 00:41:27 -05:00
return 1
else
echo "当前最新版本为: ${_version}"
fi
2024-11-30 20:35:15 -05:00
arch=$(uname -m)
os=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$arch-$os" in
x86_64-linux)
2024-11-24 00:41:27 -05:00
download_url="https://github.com/zhboner/realm/releases/download/${_version}/realm-x86_64-unknown-linux-gnu.tar.gz"
;;
*)
2024-11-30 20:35:15 -05:00
echo "不支持的架构: $arch-$os"
2024-11-24 00:41:27 -05:00
return
;;
esac
2024-11-30 20:35:15 -05:00
wget -O "realm-${_version}.tar.gz" "$download_url"
tar -xvf "realm-${_version}.tar.gz"
2024-11-24 00:41:27 -05:00
chmod +x realm
# 创建默认配置文件
cat <<EOF > $CONFIG_PATH
2024-11-30 20:35:15 -05:00
[network]
no_tcp = false #是否关闭tcp转发
use_udp = true #是否开启udp转发
#参考模板
# [[endpoints]]
# listen = "0.0.0.0:本地端口"
# remote = "落地鸡ip:目标端口"
[[endpoints]]
listen = "0.0.0.0:1234"
remote = "0.0.0.0:5678"
EOF
2024-11-24 00:41:27 -05:00
echo "[Unit]
Description=realm
After=network-online.target
Wants=network-online.target
2024-11-24 00:41:27 -05:00
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
WorkingDirectory=/root/realm
ExecStart=/root/realm/realm -c $CONFIG_PATH
2024-11-24 00:41:27 -05:00
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/realm.service
systemctl daemon-reload
update_realm_status
echo "部署完成。"
}
# 初始化realm状态
update_realm_status
# 主循环
while true; do
show_menu
read -p "请选择一个选项: " choice
case $choice in
2024-11-30 20:35:15 -05:00
1) deploy_realm ;;
2) add_forward ;;
3) add_port_range_forward ;;
4) delete_forward ;;
5) start_service ;;
6) stop_service ;;
7) restart_service ;;
8) update_realm ;;
9) uninstall_realm ;;
10) Update_Shell ;;
2024-11-30 20:35:15 -05:00
0) echo "退出脚本。"; exit 0 ;;
*) echo "无效选项: $choice" ;;
2024-11-24 00:41:27 -05:00
esac
read -p "按任意键继续..." key
done