147 lines
4.3 KiB
Bash
147 lines
4.3 KiB
Bash
#!/bin/bash
|
||
|
||
# 检查是否以root用户运行脚本
|
||
if [ "$(id -u)" != "0" ]; then
|
||
echo "此脚本需要以root用户权限运行。"
|
||
echo "请尝试使用 'sudo -i' 命令切换到root用户,然后再次运行此脚本。"
|
||
exit 1
|
||
fi
|
||
|
||
# 安装基本依赖
|
||
function install_dependencies() {
|
||
sudo apt update
|
||
sudo apt install pkg-config curl build-essential libssl-dev libclang-dev ufw -y
|
||
|
||
# 检查 Git 是否已安装
|
||
if ! command -v git &> /dev/null; then
|
||
echo "未检测到 Git,正在安装..."
|
||
sudo apt install git -y
|
||
else
|
||
echo "Git 已安装。"
|
||
fi
|
||
|
||
# 检查 Docker 是否已安装
|
||
if ! command -v docker &> /dev/null; then
|
||
echo "未检测到 Docker,正在安装..."
|
||
sudo apt-get install ca-certificates curl gnupg lsb-release -y
|
||
sudo mkdir -p /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
echo \
|
||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||
sudo apt-get update
|
||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
|
||
else
|
||
echo "Docker 已安装。"
|
||
fi
|
||
|
||
install_jq
|
||
}
|
||
|
||
# 安装 jq 工具
|
||
function install_jq() {
|
||
if command -v jq >/dev/null 2>&1; then
|
||
echo "jq 已安装。"
|
||
return 0
|
||
fi
|
||
|
||
echo "安装 jq..."
|
||
|
||
if [[ "$(uname)" == "Darwin" ]]; then
|
||
if command -v brew >/dev/null 2>&1; then
|
||
brew install jq
|
||
else
|
||
echo "未检测到 Homebrew,请先安装 Homebrew。"
|
||
return 1
|
||
fi
|
||
elif [[ -f /etc/lsb-release ]] || [[ -f /etc/debian_version ]]; then
|
||
sudo apt-get update
|
||
sudo apt-get install -y jq
|
||
elif [[ -f /etc/redhat-release ]]; then
|
||
sudo yum install -y jq
|
||
elif [[ -f /etc/fedora-release ]]; then
|
||
sudo dnf install -y jq
|
||
elif [[ -f /etc/os-release ]] && grep -q "ID=openSUSE" /etc/os-release; then
|
||
sudo zypper install -y jq
|
||
elif [[ -f /etc/arch-release ]]; then
|
||
sudo pacman -S jq
|
||
else
|
||
echo "不支持的操作系统,请手动安装 jq。"
|
||
return 1
|
||
fi
|
||
|
||
echo "jq 安装成功。"
|
||
}
|
||
|
||
# 从仓库获取文件
|
||
function fetch_file_from_repo() {
|
||
local file_path="$1"
|
||
local local_filename="$2"
|
||
|
||
local download_url="https://raw.githubusercontent.com/farcasterxyz/hub-monorepo/@latest/$file_path?t=$(date +%s)"
|
||
curl -sS -o "$local_filename" "$download_url" || { echo "下载 $download_url 失败。"; exit 1; }
|
||
}
|
||
|
||
# 安装 hubble 节点
|
||
function install_node() {
|
||
install_dependencies
|
||
|
||
mkdir -p ~/hubble
|
||
local tmp_file=$(mktemp)
|
||
fetch_file_from_repo "scripts/hubble.sh" "$tmp_file"
|
||
mv "$tmp_file" ~/hubble/hubble.sh
|
||
chmod +x ~/hubble/hubble.sh
|
||
|
||
cd ~/hubble
|
||
exec ./hubble.sh "upgrade" < /dev/tty
|
||
}
|
||
|
||
# 查看节点日志
|
||
function check_service_status() {
|
||
cd $HOME
|
||
/root/hubble/hubble.sh logs
|
||
}
|
||
|
||
function uninstall_node() {
|
||
echo "你确定要卸载Farcaster节点程序吗?这将会删除所有相关的数据。[Y/N]"
|
||
read -r -p "请确认: " response
|
||
|
||
case "$response" in
|
||
[yY][eE][sS]|[yY])
|
||
echo "开始卸载节点程序..."
|
||
cd ~
|
||
cd hubble
|
||
docker compose down -v
|
||
rm -rf hubble
|
||
echo "节点程序卸载完成。"
|
||
;;
|
||
*)
|
||
echo "取消卸载操作。"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# 主菜单
|
||
function main_menu() {
|
||
clear
|
||
echo "脚本以及教程由推特用户大赌哥 @y95277777 编写,免费开源,请勿相信收费"
|
||
echo "=====================Farcaster节点安装========================="
|
||
echo "节点社区 Discord 社群:https://discord.gg/GbMV5EcNWF"
|
||
echo "请选择要执行的操作:"
|
||
echo "1. 安装节点"
|
||
echo "2. 查看节点日志"
|
||
echo "3. 卸载节点"
|
||
read -p "请输入选项(1-3): " OPTION
|
||
|
||
case $OPTION in
|
||
1) install_node ;;
|
||
2) check_service_status ;;
|
||
3) uninstall_node ;;
|
||
*) echo "无效选项。" ;;
|
||
esac
|
||
}
|
||
|
||
# 显示主菜单
|
||
main_menu
|