update frpc.sh
This commit is contained in:
536
frpc.sh
536
frpc.sh
@@ -1,9 +1,21 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# FRP Client 一键安装脚本
|
# FRP Client 自动安装/卸载脚本
|
||||||
# 自动解压、配置和安装 frpc
|
# 支持自动检测架构(amd64/arm64)并下载对应安装包
|
||||||
# 使用方法: chmod +x frpc.sh && ./frpc.sh
|
#
|
||||||
# curl -sS -O https://gitea.tohub.top/Share/script/raw/branch/main/frpc.sh && chmod +x frpc.sh && ./frpc.sh
|
# 使用方法:
|
||||||
|
# chmod +x frpc.sh && ./frpc.sh # 交互式主菜单
|
||||||
|
# ./frpc.sh manage # 进入服务管理界面
|
||||||
|
#
|
||||||
|
# 快速安装:
|
||||||
|
# curl -sS -O https://gitea.tohub.top/Share/script/raw/branch/main/frpc.sh && chmod +x frpc.sh && ./frpc.sh
|
||||||
|
#
|
||||||
|
# 功能说明:
|
||||||
|
# 1. 自动检测系统架构(amd64/arm64)
|
||||||
|
# 2. 自动下载对应架构的安装包
|
||||||
|
# 3. 验证安装包完整性
|
||||||
|
# 4. 安装并配置 frpc 服务
|
||||||
|
# 5. 提供完整的服务管理功能
|
||||||
|
|
||||||
# 彩色输出
|
# 彩色输出
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
@@ -15,7 +27,7 @@ NC='\033[0m' # No Color
|
|||||||
|
|
||||||
# 配置变量
|
# 配置变量
|
||||||
INSTALL_DIR="/root/data/docker_data/frpc"
|
INSTALL_DIR="/root/data/docker_data/frpc"
|
||||||
BASE_URL="https://gitea.tohub.top/Share/script/raw/branch/main"
|
BASE_URL="https://gitea.tohub.top/Share/script/raw/branch/main/frpc"
|
||||||
FRPC_VERSION="0.65.0"
|
FRPC_VERSION="0.65.0"
|
||||||
|
|
||||||
|
|
||||||
@@ -23,39 +35,158 @@ set -e
|
|||||||
|
|
||||||
|
|
||||||
# 日志函数
|
# 日志函数
|
||||||
|
print_info() {
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 兼容旧函数名
|
||||||
log_info() {
|
log_info() {
|
||||||
echo -e "${GREEN}[INFO]${NC} $1"
|
print_info "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
log_warn() {
|
log_warn() {
|
||||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
print_warning "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
log_error() {
|
log_error() {
|
||||||
echo -e "${RED}[ERROR]${NC} $1"
|
print_error "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 检查是否为root用户
|
# 检查是否为root用户
|
||||||
check_root() {
|
check_root() {
|
||||||
if [[ $EUID -ne 0 ]]; then
|
if [[ $EUID -ne 0 ]]; then
|
||||||
log_error "此脚本需要root权限运行"
|
print_error "此脚本需要root权限运行"
|
||||||
|
print_info "请使用: sudo $0"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 检查文件是否存在
|
# 检测系统架构
|
||||||
check_files() {
|
detect_arch() {
|
||||||
if [[ ! -f "frp_0.64.0_linux_amd64.tar.gz" ]]; then
|
local arch=$(uname -m)
|
||||||
log_error "找不到 frp_0.64.0_linux_amd64.tar.gz 文件"
|
case "$arch" in
|
||||||
|
x86_64)
|
||||||
|
echo "amd64"
|
||||||
|
;;
|
||||||
|
aarch64)
|
||||||
|
echo "arm64"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "不支持的系统架构: $arch"
|
||||||
|
print_info "仅支持 x86_64(amd64) 和 aarch64(arm64)"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# 创建安装目录
|
||||||
|
create_install_dir() {
|
||||||
|
if [[ ! -d "$INSTALL_DIR" ]]; then
|
||||||
|
print_info "创建安装目录: $INSTALL_DIR"
|
||||||
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
print_error "创建目录失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 下载文件
|
||||||
|
download_file() {
|
||||||
|
local url=$1
|
||||||
|
local output=$2
|
||||||
|
|
||||||
|
print_info "正在下载: $url"
|
||||||
|
|
||||||
|
# 如果存在旧的不完整文件,先删除
|
||||||
|
if [[ -f "$output" ]]; then
|
||||||
|
rm -f "$output"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v wget &> /dev/null; then
|
||||||
|
wget -q --show-progress "$url" -O "$output"
|
||||||
|
elif command -v curl &> /dev/null; then
|
||||||
|
curl -# -L "$url" -o "$output"
|
||||||
|
else
|
||||||
|
print_error "未找到 wget 或 curl,请先安装"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -f "frpc.toml" ]]; then
|
# 检查下载是否成功
|
||||||
log_error "找不到 frpc.toml 配置文件"
|
if [[ $? -eq 0 ]] && [[ -f "$output" ]] && [[ -s "$output" ]]; then
|
||||||
exit 1
|
print_success "下载完成: $output"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
print_error "下载失败: $url"
|
||||||
|
rm -f "$output"
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 验证tar.gz文件是否有效
|
||||||
|
verify_tar_file() {
|
||||||
|
local file=$1
|
||||||
|
|
||||||
|
if [[ ! -f "$file" ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -s "$file" ]]; then
|
||||||
|
print_warning "文件为空: $file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 尝试列出tar文件内容来验证完整性
|
||||||
|
if ! tar -tzf "$file" >/dev/null 2>&1; then
|
||||||
|
print_warning "文件不是有效的 tar.gz 包: $file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# 下载安装包
|
||||||
|
download_packages() {
|
||||||
|
local arch=$(detect_arch)
|
||||||
|
print_info "检测到系统架构: $arch"
|
||||||
|
|
||||||
|
create_install_dir
|
||||||
|
|
||||||
|
local frp_file="frp_${FRPC_VERSION}_linux_${arch}.tar.gz"
|
||||||
|
local download_failed=0
|
||||||
|
|
||||||
|
# 下载 FRP
|
||||||
|
if [[ ! -f "$INSTALL_DIR/$frp_file" ]]; then
|
||||||
|
if ! download_file "$BASE_URL/$frp_file" "$INSTALL_DIR/$frp_file"; then
|
||||||
|
download_failed=1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_warning "文件已存在,跳过下载: $frp_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 下载配置文件(如果不存在)
|
||||||
|
if [[ ! -f "$INSTALL_DIR/frpc.toml" ]]; then
|
||||||
|
print_info "下载配置文件模板..."
|
||||||
|
if ! download_file "$BASE_URL/frpc.toml" "$INSTALL_DIR/frpc.toml"; then
|
||||||
|
print_warning "配置文件下载失败,需要手动创建"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $download_failed
|
||||||
|
}
|
||||||
|
|
||||||
# 创建frp用户
|
# 创建frp用户
|
||||||
create_frp_user() {
|
create_frp_user() {
|
||||||
if ! id "frp" &>/dev/null; then
|
if ! id "frp" &>/dev/null; then
|
||||||
@@ -68,49 +199,75 @@ create_frp_user() {
|
|||||||
|
|
||||||
# 解压安装包
|
# 解压安装包
|
||||||
extract_archive() {
|
extract_archive() {
|
||||||
log_info "解压 frp_0.64.0_linux_amd64.tar.gz..."
|
local arch=$(detect_arch)
|
||||||
|
local frp_file="$INSTALL_DIR/frp_${FRPC_VERSION}_linux_${arch}.tar.gz"
|
||||||
|
|
||||||
|
# 检查文件是否存在
|
||||||
|
if [[ ! -f "$frp_file" ]]; then
|
||||||
|
print_warning "安装包不存在,开始下载..."
|
||||||
|
if ! download_packages; then
|
||||||
|
print_error "下载失败,无法继续安装"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 验证文件完整性
|
||||||
|
print_info "验证安装包完整性..."
|
||||||
|
if ! verify_tar_file "$frp_file"; then
|
||||||
|
print_error "安装包验证失败,请重新下载"
|
||||||
|
rm -f "$frp_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
print_success "安装包验证通过"
|
||||||
|
|
||||||
|
print_info "解压 frp_${FRPC_VERSION}_linux_${arch}.tar.gz..."
|
||||||
|
|
||||||
# 创建临时目录
|
# 创建临时目录
|
||||||
TEMP_DIR=$(mktemp -d)
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
# 解压到临时目录
|
# 解压到临时目录
|
||||||
tar -xzf frp_0.64.0_linux_amd64.tar.gz -C "$TEMP_DIR"
|
tar -xzf "$frp_file" -C "$TEMP_DIR"
|
||||||
|
|
||||||
# 创建安装目录
|
# 复制文件到安装目录
|
||||||
mkdir -p /root/frpc
|
cp "$TEMP_DIR"/frp_${FRPC_VERSION}_linux_${arch}/frpc "$INSTALL_DIR/"
|
||||||
|
|
||||||
# 复制文件
|
|
||||||
cp "$TEMP_DIR"/frp_0.64.0_linux_amd64/frpc /root/frpc/
|
|
||||||
|
|
||||||
# 清理临时目录
|
# 清理临时目录
|
||||||
rm -rf "$TEMP_DIR"
|
rm -rf "$TEMP_DIR"
|
||||||
|
|
||||||
# 设置权限 - root目录需要特殊权限处理
|
# 设置权限
|
||||||
chmod 755 /root # 确保frp用户可以访问root目录
|
chown -R root:frp "$INSTALL_DIR"
|
||||||
chown -R root:frp /root/frpc
|
chmod 750 "$INSTALL_DIR"
|
||||||
chmod 750 /root/frpc
|
chmod +x "$INSTALL_DIR/frpc"
|
||||||
chmod +x /root/frpc/frpc
|
|
||||||
|
print_success "frpc 已安装到 $INSTALL_DIR/"
|
||||||
log_info "frpc 已安装到 /root/frpc/"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 配置frpc
|
# 配置frpc
|
||||||
configure_frpc() {
|
configure_frpc() {
|
||||||
log_info "配置 frpc..."
|
print_info "配置 frpc..."
|
||||||
|
|
||||||
# 复制配置文件
|
# 检查配置文件是否已存在
|
||||||
cp frpc.toml /root/frpc/
|
if [[ -f "$INSTALL_DIR/frpc.toml" ]]; then
|
||||||
chown root:frp /root/frpc/frpc.toml
|
print_success "配置文件已存在: $INSTALL_DIR/frpc.toml"
|
||||||
chmod 640 /root/frpc/frpc.toml
|
elif [[ -f "frpc.toml" ]]; then
|
||||||
|
# 如果当前目录有配置文件,复制它
|
||||||
log_info "配置文件已复制到 /root/frpc/frpc.toml"
|
cp frpc.toml "$INSTALL_DIR/"
|
||||||
|
print_success "配置文件已复制到 $INSTALL_DIR/frpc.toml"
|
||||||
|
else
|
||||||
|
print_error "找不到配置文件 frpc.toml"
|
||||||
|
print_info "请手动创建配置文件: $INSTALL_DIR/frpc.toml"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
chown root:frp "$INSTALL_DIR/frpc.toml"
|
||||||
|
chmod 640 "$INSTALL_DIR/frpc.toml"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 创建systemd服务
|
# 创建systemd服务
|
||||||
create_service() {
|
create_service() {
|
||||||
log_info "创建 systemd 服务..."
|
print_info "创建 systemd 服务..."
|
||||||
|
|
||||||
cat > /etc/systemd/system/frpc.service << 'EOF'
|
cat > /etc/systemd/system/frpc.service << EOF
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Frp Client Service
|
Description=Frp Client Service
|
||||||
After=network.target
|
After=network.target
|
||||||
@@ -120,8 +277,8 @@ Type=simple
|
|||||||
User=frp
|
User=frp
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5s
|
RestartSec=5s
|
||||||
ExecStart=/root/frpc/frpc -c /root/frpc/frpc.toml
|
ExecStart=${INSTALL_DIR}/frpc -c ${INSTALL_DIR}/frpc.toml
|
||||||
ExecReload=/bin/kill -s HUP $MAINPID
|
ExecReload=/bin/kill -s HUP \$MAINPID
|
||||||
KillMode=mixed
|
KillMode=mixed
|
||||||
TimeoutStopSec=5s
|
TimeoutStopSec=5s
|
||||||
|
|
||||||
@@ -131,46 +288,172 @@ EOF
|
|||||||
|
|
||||||
# 重新加载systemd
|
# 重新加载systemd
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
log_info "systemd 服务已创建"
|
print_success "systemd 服务已创建"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 启动服务
|
# 启动服务
|
||||||
start_service() {
|
start_service() {
|
||||||
log_info "启动 frpc 服务..."
|
print_info "启动 frpc 服务..."
|
||||||
|
|
||||||
# 启用开机自启
|
# 启用开机自启
|
||||||
systemctl enable frpc
|
systemctl enable frpc
|
||||||
|
|
||||||
# 启动服务
|
# 启动服务
|
||||||
systemctl start frpc
|
systemctl start frpc
|
||||||
|
|
||||||
# 检查服务状态
|
# 检查服务状态
|
||||||
if systemctl is-active --quiet frpc; then
|
if systemctl is-active --quiet frpc; then
|
||||||
log_info "frpc 服务启动成功"
|
print_success "frpc 服务启动成功"
|
||||||
else
|
else
|
||||||
log_error "frpc 服务启动失败"
|
print_error "frpc 服务启动失败"
|
||||||
log_error "请检查日志: journalctl -u frpc -f"
|
print_error "请检查日志: journalctl -u frpc -f"
|
||||||
exit 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 显示状态信息
|
# 显示状态信息
|
||||||
show_status() {
|
show_status() {
|
||||||
log_info "安装完成!"
|
echo ""
|
||||||
|
print_success "============================================"
|
||||||
|
print_success "FRP Client 安装完成!"
|
||||||
|
print_success "============================================"
|
||||||
echo ""
|
echo ""
|
||||||
echo "服务状态:"
|
echo "服务状态:"
|
||||||
systemctl status frpc --no-pager
|
systemctl status frpc --no-pager
|
||||||
echo ""
|
echo ""
|
||||||
echo "常用命令:"
|
print_info "常用命令:"
|
||||||
echo " 启动服务: systemctl start frpc"
|
echo " 启动服务: systemctl start frpc"
|
||||||
echo " 停止服务: systemctl stop frpc"
|
echo " 停止服务: systemctl stop frpc"
|
||||||
echo " 重启服务: systemctl restart frpc"
|
echo " 重启服务: systemctl restart frpc"
|
||||||
echo " 查看状态: systemctl status frpc"
|
echo " 查看状态: systemctl status frpc"
|
||||||
echo " 查看日志: journalctl -u frpc -f"
|
echo " 查看日志: journalctl -u frpc -f"
|
||||||
echo ""
|
echo ""
|
||||||
echo "配置文件位置: /root/frpc/frpc.toml"
|
print_info "配置文件位置: $INSTALL_DIR/frpc.toml"
|
||||||
echo "程序位置: /root/frpc/frpc"
|
print_info "程序位置: $INSTALL_DIR/frpc"
|
||||||
|
print_success "============================================"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# 安装frpc主函数
|
||||||
|
install_frpc() {
|
||||||
|
print_info "开始安装 FRP Client..."
|
||||||
|
|
||||||
|
create_frp_user
|
||||||
|
extract_archive || return 1
|
||||||
|
configure_frpc || return 1
|
||||||
|
create_service
|
||||||
|
start_service || return 1
|
||||||
|
show_status
|
||||||
|
|
||||||
|
print_success "FRP Client 安装完成!"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 卸载frpc
|
||||||
|
uninstall_frpc() {
|
||||||
|
print_warning "即将卸载 FRP Client"
|
||||||
|
read -p "是否继续?[y/N] " -n 1 -r
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
print_info "已取消卸载"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
print_info "停止 frpc 服务..."
|
||||||
|
systemctl stop frpc 2>/dev/null || true
|
||||||
|
|
||||||
|
# 禁用开机自启
|
||||||
|
print_info "禁用开机自启..."
|
||||||
|
systemctl disable frpc 2>/dev/null || true
|
||||||
|
|
||||||
|
# 删除服务文件
|
||||||
|
print_info "删除服务文件..."
|
||||||
|
rm -f /etc/systemd/system/frpc.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
# 删除程序文件
|
||||||
|
print_info "删除程序文件..."
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
|
||||||
|
# 删除frp用户
|
||||||
|
print_info "删除 frp 用户..."
|
||||||
|
userdel frp 2>/dev/null || true
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
print_success "FRP Client 已完全卸载"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查安装状态
|
||||||
|
check_status() {
|
||||||
|
local arch=$(detect_arch)
|
||||||
|
local frp_file="$INSTALL_DIR/frp_${FRPC_VERSION}_linux_${arch}.tar.gz"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
print_info "============================================"
|
||||||
|
print_info "检查 FRP Client 状态"
|
||||||
|
print_info "============================================"
|
||||||
|
|
||||||
|
# 检查程序是否安装
|
||||||
|
if [[ -f "$INSTALL_DIR/frpc" ]]; then
|
||||||
|
print_success "FRP Client 已安装"
|
||||||
|
print_info " 程序位置: $INSTALL_DIR/frpc"
|
||||||
|
|
||||||
|
# 获取程序版本
|
||||||
|
if [[ -x "$INSTALL_DIR/frpc" ]]; then
|
||||||
|
local version=$("$INSTALL_DIR/frpc" --version 2>/dev/null | head -n 1 || echo "未知")
|
||||||
|
print_info " 版本信息: $version"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查服务状态
|
||||||
|
if systemctl is-active --quiet frpc; then
|
||||||
|
print_success "frpc 服务运行中"
|
||||||
|
else
|
||||||
|
print_warning "frpc 服务未运行"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if systemctl is-enabled --quiet frpc; then
|
||||||
|
print_success "开机自启已启用"
|
||||||
|
else
|
||||||
|
print_warning "开机自启未启用"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查配置文件
|
||||||
|
if [[ -f "$INSTALL_DIR/frpc.toml" ]]; then
|
||||||
|
print_success "配置文件存在"
|
||||||
|
else
|
||||||
|
print_warning "配置文件不存在"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_warning "FRP Client 未安装"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查frp用户
|
||||||
|
if id "frp" &>/dev/null; then
|
||||||
|
print_success "frp 用户存在"
|
||||||
|
else
|
||||||
|
print_warning "frp 用户不存在"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查安装包状态
|
||||||
|
echo ""
|
||||||
|
print_info "安装包状态:"
|
||||||
|
if [[ -f "$frp_file" ]]; then
|
||||||
|
local size=$(du -h "$frp_file" 2>/dev/null | cut -f1)
|
||||||
|
print_info " FRP 压缩包: ${CYAN}已下载${NC} (${size})"
|
||||||
|
else
|
||||||
|
print_warning " FRP 压缩包: 未下载"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "$INSTALL_DIR/frpc.toml" ]]; then
|
||||||
|
print_info " 配置文件: ${CYAN}存在${NC}"
|
||||||
|
else
|
||||||
|
print_warning " 配置文件: 不存在"
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "============================================"
|
||||||
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
# 交互式服务管理菜单
|
# 交互式服务管理菜单
|
||||||
@@ -231,39 +514,29 @@ interactive_menu() {
|
|||||||
6|config)
|
6|config)
|
||||||
echo "配置文件内容:"
|
echo "配置文件内容:"
|
||||||
echo "----------------------------------------"
|
echo "----------------------------------------"
|
||||||
cat /root/frpc/frpc.toml
|
cat "$INSTALL_DIR/frpc.toml"
|
||||||
echo "----------------------------------------"
|
echo "----------------------------------------"
|
||||||
;;
|
;;
|
||||||
7|edit)
|
7|edit)
|
||||||
log_info "编辑配置文件..."
|
print_info "编辑配置文件..."
|
||||||
if command -v nano >/dev/null 2>&1; then
|
if command -v nano >/dev/null 2>&1; then
|
||||||
nano /root/frpc/frpc.toml
|
nano "$INSTALL_DIR/frpc.toml"
|
||||||
elif command -v vi >/dev/null 2>&1; then
|
elif command -v vi >/dev/null 2>&1; then
|
||||||
vi /root/frpc/frpc.toml
|
vi "$INSTALL_DIR/frpc.toml"
|
||||||
else
|
else
|
||||||
log_error "未找到文本编辑器,请手动编辑: /root/frpc/frpc.toml"
|
print_error "未找到文本编辑器,请手动编辑: $INSTALL_DIR/frpc.toml"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
read -p "是否重启服务使配置生效? [y/N]: " restart_choice
|
read -p "是否重启服务使配置生效? [y/N]: " restart_choice
|
||||||
if [[ $restart_choice =~ ^[Yy]$ ]]; then
|
if [[ $restart_choice =~ ^[Yy]$ ]]; then
|
||||||
systemctl restart frpc
|
systemctl restart frpc
|
||||||
log_info "服务已重启"
|
print_info "服务已重启"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
8|uninstall)
|
8|uninstall)
|
||||||
read -p "确定要卸载 frpc 服务吗? [y/N]: " confirm
|
uninstall_frpc
|
||||||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
log_warn "正在卸载 frpc 服务..."
|
|
||||||
systemctl stop frpc 2>/dev/null || true
|
|
||||||
systemctl disable frpc 2>/dev/null || true
|
|
||||||
rm -f /etc/systemd/system/frpc.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
rm -rf /root/frpc
|
|
||||||
userdel -r frp 2>/dev/null || true
|
|
||||||
log_info "frpc 服务已完全卸载"
|
|
||||||
exit 0
|
exit 0
|
||||||
else
|
|
||||||
log_info "取消卸载操作"
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
0|exit|quit|q)
|
0|exit|quit|q)
|
||||||
@@ -279,37 +552,92 @@ interactive_menu() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 主菜单
|
||||||
|
show_main_menu() {
|
||||||
|
clear
|
||||||
|
echo -e "${CYAN}"
|
||||||
|
echo "============================================"
|
||||||
|
echo " FRP Client 自动安装/卸载脚本"
|
||||||
|
echo "============================================"
|
||||||
|
echo -e "${NC}"
|
||||||
|
echo -e "${GREEN}1.${NC} 安装 FRP Client"
|
||||||
|
echo -e "${GREEN}2.${NC} 卸载 FRP Client"
|
||||||
|
echo -e "${GREEN}3.${NC} 检查状态"
|
||||||
|
echo -e "${GREEN}4.${NC} 下载安装包"
|
||||||
|
echo -e "${GREEN}5.${NC} 服务管理"
|
||||||
|
echo -e "${GREEN}0.${NC} 退出"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}============================================${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
# 主函数
|
# 主函数
|
||||||
main() {
|
main() {
|
||||||
|
check_root
|
||||||
|
|
||||||
# 检查是否为管理模式
|
# 检查是否为管理模式
|
||||||
if [[ "$1" == "manage" || "$1" == "menu" || "$1" == "-m" ]]; then
|
if [[ "$1" == "manage" || "$1" == "menu" || "$1" == "-m" ]]; then
|
||||||
interactive_menu
|
interactive_menu
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "开始安装 FRP Client..."
|
# 如果没有参数,显示交互式主菜单
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
check_root
|
while true; do
|
||||||
check_files
|
show_main_menu
|
||||||
create_frp_user
|
read -p "请选择操作 [0-5]: " choice
|
||||||
extract_archive
|
|
||||||
configure_frpc
|
case $choice in
|
||||||
create_service
|
1)
|
||||||
start_service
|
install_frpc
|
||||||
show_status
|
read -p "按任意键继续..." -n 1
|
||||||
|
;;
|
||||||
echo ""
|
2)
|
||||||
log_info "FRP Client 安装完成!"
|
uninstall_frpc
|
||||||
|
read -p "按任意键继续..." -n 1
|
||||||
# 询问是否进入交互管理界面
|
;;
|
||||||
read -p "是否进入交互式管理界面? [y/N]: " enter_menu
|
3)
|
||||||
if [[ $enter_menu =~ ^[Yy]$ ]]; then
|
check_status
|
||||||
interactive_menu
|
read -p "按任意键继续..." -n 1
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
print_info "开始下载安装包..."
|
||||||
|
if download_packages; then
|
||||||
|
print_success "下载完成!"
|
||||||
|
else
|
||||||
|
print_error "下载失败"
|
||||||
|
fi
|
||||||
|
read -p "按任意键继续..." -n 1
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
interactive_menu
|
||||||
|
;;
|
||||||
|
0)
|
||||||
|
print_info "退出脚本"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "无效的选择,请重新输入"
|
||||||
|
sleep 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
else
|
else
|
||||||
|
# 兼容旧的直接安装模式(如果有参数的话)
|
||||||
|
print_info "开始安装 FRP Client..."
|
||||||
|
install_frpc
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
log_info "可使用以下命令管理服务:"
|
# 询问是否进入交互管理界面
|
||||||
echo " ./install_frpc.sh manage # 进入交互管理界面"
|
read -p "是否进入服务管理界面? [y/N]: " enter_menu
|
||||||
echo " systemctl [start|stop|restart|status] frpc"
|
if [[ $enter_menu =~ ^[Yy]$ ]]; then
|
||||||
|
interactive_menu
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
print_info "可使用以下命令:"
|
||||||
|
echo " $0 # 进入主菜单"
|
||||||
|
echo " $0 manage # 进入服务管理界面"
|
||||||
|
echo " systemctl [start|stop|restart|status] frpc"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user