Files
s-hy2/scripts/install.sh
T
2025-08-05 14:11:40 +08:00

201 lines
5.7 KiB
Bash

#!/bin/bash
# Hysteria2 安装脚本
# 安装 Hysteria2
install_hysteria2() {
echo -e "${BLUE}开始安装 Hysteria2...${NC}"
echo ""
# 检查是否已安装
if check_hysteria_installed; then
echo -e "${YELLOW}Hysteria2 已经安装${NC}"
echo -n -e "${BLUE}是否重新安装? [y/N]: ${NC}"
read -r reinstall
if [[ ! $reinstall =~ ^[Yy]$ ]]; then
echo -e "${BLUE}取消安装${NC}"
read -p "按回车键继续..."
return
fi
fi
# 检查网络连接
echo -e "${BLUE}检查网络连接...${NC}"
if ! ping -c 1 google.com &> /dev/null; then
echo -e "${RED}网络连接失败,请检查网络设置${NC}"
read -p "按回车键继续..."
return
fi
# 更新系统包
echo -e "${BLUE}更新系统包...${NC}"
if command -v apt &> /dev/null; then
apt update
elif command -v yum &> /dev/null; then
yum update -y
elif command -v dnf &> /dev/null; then
dnf update -y
fi
# 安装必要依赖
echo -e "${BLUE}安装必要依赖...${NC}"
if command -v apt &> /dev/null; then
apt install -y curl wget openssl
elif command -v yum &> /dev/null; then
yum install -y curl wget openssl
elif command -v dnf &> /dev/null; then
dnf install -y curl wget openssl
fi
# 下载并安装 Hysteria2
echo -e "${BLUE}下载并安装 Hysteria2...${NC}"
if bash <(curl -fsSL https://get.hy2.sh/); then
echo -e "${GREEN}Hysteria2 安装成功!${NC}"
# 创建配置目录
mkdir -p /etc/hysteria
# 设置权限
if id "hysteria" &>/dev/null; then
chown hysteria:hysteria /etc/hysteria
fi
echo ""
echo -e "${GREEN}安装完成!${NC}"
echo -e "${YELLOW}下一步: 生成配置文件${NC}"
else
echo -e "${RED}Hysteria2 安装失败${NC}"
echo "请检查网络连接或手动安装"
fi
echo ""
read -p "按回车键继续..."
}
# 检查系统信息
check_system_info() {
echo -e "${CYAN}系统信息:${NC}"
echo "操作系统: $(uname -s)"
echo "架构: $(uname -m)"
echo "内核版本: $(uname -r)"
if [[ -f /etc/os-release ]]; then
source /etc/os-release
echo "发行版: $PRETTY_NAME"
fi
echo ""
}
# 检查端口占用
check_port_usage() {
local port=${1:-443}
echo -e "${BLUE}检查端口 $port 占用情况...${NC}"
if netstat -tuln | grep -q ":$port "; then
echo -e "${YELLOW}警告: 端口 $port 已被占用${NC}"
echo "占用进程:"
netstat -tulnp | grep ":$port "
echo ""
echo -e "${YELLOW}建议在配置时使用其他端口${NC}"
else
echo -e "${GREEN}端口 $port 可用${NC}"
fi
echo ""
}
# 预安装检查
pre_install_check() {
echo -e "${BLUE}执行预安装检查...${NC}"
echo ""
check_system_info
check_port_usage 443
# 检查防火墙状态
echo -e "${BLUE}检查防火墙状态...${NC}"
if command -v ufw &> /dev/null; then
ufw_status=$(ufw status | head -1)
echo "UFW: $ufw_status"
elif command -v firewall-cmd &> /dev/null; then
if firewall-cmd --state &> /dev/null; then
echo "Firewalld: 运行中"
else
echo "Firewalld: 未运行"
fi
elif command -v iptables &> /dev/null; then
echo "iptables: 已安装"
else
echo "防火墙: 未检测到"
fi
echo ""
echo -e "${YELLOW}注意事项:${NC}"
echo "1. 确保服务器可以访问互联网"
echo "2. 如果使用 ACME 模式,需要域名解析到此服务器"
echo "3. 确保防火墙允许相应端口通信"
echo "4. 建议在安装前备份重要数据"
echo ""
echo -n -e "${BLUE}是否继续安装? [Y/n]: ${NC}"
read -r continue_install
if [[ $continue_install =~ ^[Nn]$ ]]; then
echo -e "${BLUE}取消安装${NC}"
read -p "按回车键继续..."
return 1
fi
return 0
}
# 卸载 Hysteria2 (仅程序)
uninstall_hysteria_program() {
echo -e "${BLUE}卸载 Hysteria2 程序 (保留配置文件)...${NC}"
echo ""
if ! check_hysteria_installed; then
echo -e "${YELLOW}Hysteria2 未安装${NC}"
return
fi
echo -e "${YELLOW}此操作将卸载 Hysteria2 程序,但保留配置文件和证书${NC}"
echo -n -e "${BLUE}确定要继续吗? [y/N]: ${NC}"
read -r confirm
if [[ ! $confirm =~ ^[Yy]$ ]]; then
echo -e "${BLUE}取消卸载${NC}"
return
fi
# 使用官方卸载脚本
if bash <(curl -fsSL https://get.hy2.sh/) --remove; then
echo ""
echo -e "${GREEN}Hysteria2 程序卸载完成!${NC}"
echo ""
echo -e "${CYAN}配置文件和证书已保留在 /etc/hysteria${NC}"
echo ""
echo -e "${YELLOW}如需完全清理,请手动执行以下命令:${NC}"
echo ""
echo -e "${BLUE}删除配置文件和证书:${NC}"
echo " rm -rf /etc/hysteria"
echo ""
echo -e "${BLUE}删除用户账户:${NC}"
echo " userdel -r hysteria"
echo ""
echo -e "${BLUE}清理 systemd 服务残留:${NC}"
echo " rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server.service"
echo " rm -f /etc/systemd/system/multi-user.target.wants/hysteria-server@*.service"
echo " systemctl daemon-reload"
echo ""
else
echo -e "${RED}卸载失败${NC}"
fi
}
# 主安装函数
install_hysteria_main() {
if pre_install_check; then
install_hysteria2
fi
}