#!/bin/bash # 检查是否以root用户运行脚本 if [ "$(id -u)" != "0" ]; then echo "此脚本需要以root用户权限运行。" echo "请尝试使用 'sudo -i' 命令切换到root用户,然后再次运行此脚本。" exit 1 fi # 脚本保存路径 SCRIPT_PATH="$HOME/Waku.sh" # 主菜单函数 function main_menu() { while true; do clear echo "脚本由大赌社区哈哈哈哈编写,推特 @ferdie_jhovie,免费开源,请勿相信收费" echo "================================================================" echo "节点社区 Telegram 群组: https://t.me/niuwuriji" echo "节点社区 Telegram 频道: https://t.me/niuwuriji" echo "节点社区 Discord 社群: https://discord.gg/GbMV5EcNWF" echo "退出脚本,请按键盘Ctrl+C退出即可" echo "请选择要执行的操作:" echo "1. 安装节点" echo "2. 修复错误(暂不可用,官方脚本有问题)" echo "3. 更新脚本" echo "4. 查看日志" echo "5. 多开(慎用,女巫)" echo "6. 退出" read -rp "请输入操作选项:" choice case $choice in 1) install_node ;; 2) fix_errors ;; 3) update_script ;; 4) view_logs ;; 5) install_multiple_nodes ;; 6) echo "退出脚本!" exit 0 ;; *) echo "无效的选择,请重新输入。" sleep 2 ;; esac done } # 安装多个节点函数 function install_multiple_nodes() { # 检查 nwaku-compose 目录并创建新目录 base_dir="$HOME/nwaku-compose" new_dir="$base_dir" counter=1 while [ -d "$new_dir" ]; do new_dir="${base_dir}${counter}" ((counter++)) done echo "克隆 nwaku-compose 项目到 $new_dir ..." git clone https://github.com/waku-org/nwaku-compose "$new_dir" || { echo "克隆 nwaku-compose 失败,请检查错误信息。" exit 1 } # 进入 nwaku-compose 新建的目录 cd "$new_dir" || { echo "进入 nwaku-compose 目录失败,请检查错误信息。" exit 1 } echo "成功进入 nwaku-compose 目录。" # 复制 .env.example 到 .env cp .env.example .env echo "成功复制 .env.example 到 .env 文件。" # 获取用户输入并更新 .env 文件 read -rp "请输入您的 Infura 项目密钥(key): " infura_key read -rp "请输入您的测试网络私钥-不要0x开头(<YOUR_TESTNET_PRIVATE_KEY_HERE>): " testnet_private_key read -rp "请输入您的安全密钥存储密码(my_secure_keystore_password): " keystore_password # 使用 sed 替换 .env 文件中的占位符 sed -i "s|<key>|$infura_key|g" .env sed -i "s|<YOUR_TESTNET_PRIVATE_KEY_HERE>|$testnet_private_key|g" .env sed -i "s|my_secure_keystore_password|$keystore_password|g" .env echo ".env 文件已更新。" # 获取用户输入的端口 read -rp "请输入第一个端口: " port1 read -rp "请输入第二个端口: " port2 # 更新 docker-compose.yml 中的端口 sed -i "s|^\s*- [0-9]*:| - $port1:|g" docker-compose.yml sed -i "s|^\s*- [0-9]*:| - $port2:|g" docker-compose.yml echo "docker-compose.yml 中的端口已更新。" # 执行 register_rln.sh 脚本 echo "正在执行 register_rln.sh 脚本..." ./register_rln.sh echo "register_rln.sh 脚本执行完成。" # 启动 Docker Compose 服务 echo "启动 Docker Compose 服务..." docker-compose up -d || { echo "启动 Docker Compose 失败,请检查错误信息。"; exit 1; } echo "Docker Compose 服务启动完成。" read -rp "按 Enter 返回菜单。" } # 安装节点工具的函数 function install_node_tools() { # 更新软件源并升级系统软件 sudo apt update && sudo apt upgrade -y # 安装必要的软件和工具 sudo apt install -y curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev } # 安装 Docker 的函数 function install_docker() { # 检查 Docker 是否已安装 if command -v docker &> /dev/null; then echo "Docker 已安装。" else echo "Docker 未安装,正在安装 Docker..." # 安装 Docker sudo apt install -y docker.io # 检查是否安装了 docker-compose,如果未安装则安装 if ! command -v docker-compose &> /dev/null; then echo "docker-compose 未安装,正在安装 docker-compose..." sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version # 版本应为 docker-compose version 1.29.2 if command -v docker-compose &> /dev/null; then echo "docker-compose 安装成功。" else echo "docker-compose 安装失败,请检查错误。" exit 1 fi else echo "docker-compose 已安装。" fi fi # 检查是否安装了 docker-compose,如果未安装则安装 if ! command -v docker-compose &> /dev/null; then echo "docker-compose 未安装,正在安装 docker-compose..." sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version # 版本应为 docker-compose version 1.29.2 if command -v docker-compose &> /dev/null; then echo "docker-compose 安装成功。" else echo "docker-compose 安装失败,请检查错误。" exit 1 fi else echo "docker-compose 已安装。" fi } # 安装节点函数 function install_node() { # 安装节点工具 install_node_tools # 安装 Docker install_docker # 克隆或更新 nwaku-compose 项目 if [ -d "nwaku-compose" ]; then echo "更新 nwaku-compose 项目..." cd nwaku-compose || { echo "进入 nwaku-compose 目录失败,请检查错误信息。"; exit 1; } git stash push --include-untracked git pull origin master cd .. else echo "克隆 nwaku-compose 项目 ..." git clone https://github.com/waku-org/nwaku-compose fi # 进入 nwaku-compose 目录 cd nwaku-compose || { echo "进入 nwaku-compose 目录失败,请检查错误信息。" exit 1 } echo "成功进入 nwaku-compose 目录。" # 复制 .env.example 到 .env cp .env.example .env echo "成功复制 .env.example 到 .env 文件。" # 获取用户输入并更新 .env 文件 read -rp "请输入您的 Infura 项目密钥(key): " infura_key read -rp "请输入您的测试网络私钥-不要0x开头(<YOUR_TESTNET_PRIVATE_KEY_HERE>): " testnet_private_key read -rp "请输入您的安全密钥存储密码(my_secure_keystore_password): " keystore_password # 使用 sed 或其他方法替换 .env 文件中的占位符 sed -i "s|<key>|$infura_key|g" .env sed -i "s|<YOUR_TESTNET_PRIVATE_KEY_HERE>|$testnet_private_key|g" .env sed -i "s|my_secure_keystore_password|$keystore_password|g" .env echo ".env 文件已更新。" # 执行 register_rln.sh 脚本 echo "正在执行 register_rln.sh 脚本..." ./register_rln.sh echo "register_rln.sh 脚本执行完成。" # 启动 Docker Compose 服务 echo "启动 Docker Compose 服务..." docker-compose up -d || { echo "启动 Docker Compose 失败,请检查错误信息。"; exit 1; } echo "Docker Compose 服务启动完成。" read -rp "按 Enter 返回菜单。" } # 查看日志函数 function view_logs() { echo "正在查看 nwaku 的日志..." # 使用 docker-compose 查看 nwaku 的日志 cd /root/nwaku-compose docker-compose logs -f nwaku echo "按 Ctrl+C 退出日志查看。" } # 修复错误函数 function fix_errors() { # 停止 Docker Compose 服务 docker-compose down # 进入 nwaku-compose 目录 cd nwaku-compose || { echo "进入 nwaku-compose 目录失败,请检查错误信息。"; exit 1; } # 执行 git stash 和 git pull 操作 git stash push --include-untracked git pull origin master # 删除 keystore 和 rln_tree 目录 rm -rf keystore rln_tree # 编辑 .env 文件 echo "请修改 .env 文件中的 ETH_CLIENT_ADDRESS 为 RLN_RELAY_ETH_CLIENT_ADDRESS。" nano -i .env # 启动 Docker Compose docker-compose up -d || { echo "启动 Docker Compose 失败,请检查错误信息。"; exit 1; } echo "错误修复完成。" read -rp "按 Enter 返回菜单。" } # 更新脚本函数 function update_script() { echo "正在更新 nwaku-compose 项目..." # 进入 nwaku-compose 目录 cd nwaku-compose || { echo "进入 nwaku-compose 目录失败,请检查错误信息。"; exit 1; } # 停止 Docker Compose 服务 docker-compose down # 更新项目 git pull origin master # 重新启动 Docker Compose 服务 docker-compose up -d || { echo "启动 Docker Compose 失败,请检查错误信息。"; exit 1; } echo "脚本更新完成。" read -rp "按 Enter 返回菜单。" } # 主程序开始 main_menu