diff --git a/bin/utils/base.sh b/bin/utils/base.sh index 3179e87..53a65f8 100644 --- a/bin/utils/base.sh +++ b/bin/utils/base.sh @@ -49,24 +49,6 @@ check_docker_compose() { fi } -# 安装jq -install_jq(){ - local package_manager=$(get_package_manager) # 获取包管理器 - if [[ -z "$package_manager" ]]; then - echo "无法识别系统包管理器" - return 1 # 无法识别包管理器 - fi - - if [[ "$package_manager" == "apt-get" ]]; then - sudo apt-get install -y jq - elif [[ "$package_manager" == "yum" ]]; then - sudo yum install -y jq - else - echo "未知的系统包管理器" - return 1 # 未知的包管理器 - fi -} - # 安装docker install_docker(){ echo 安装docker... @@ -80,3 +62,38 @@ install_docker_compose(){ chmod +x /usr/local/bin/docker-compose } +# 动态安装软件包 +install_package() { + local package_name=$1 + if command -v "$package_name" &> /dev/null; then + echo "$package_name 已安装, 跳过." + return 0 + fi + + echo "安装 $package_name..." + package_manager=$(get_package_manager) + if [ "$package_manager" == "apt-get" ]; then + sudo apt-get update + sudo apt-get install -y "$package_name" + elif [ "$package_manager" == "yum" ]; then + sudo yum install -y "$package_name" + else + echo "未知的包管理器, 请手动安装 $package_name." + return 1 + fi +} + +check_config(){ + local config_dir="./conf" + # 如果配置文件不存在或者空白 + if [ ! -e "$config_dir/config.json" ] || [ ! -s "$config_dir/config.json" ];then + echo "请先'创建配置'" + exit 0 + fi + # 如果配置未初始化 + uuid=$(jq -r '.inbounds[0].settings.clients[0].id' "$config_dir/config.json") + if [ "$uuid" = "你的UUID" ] || [ -z "$uuid" ]; then + echo "请先'创建配置'" + exit 0 + fi +} \ No newline at end of file diff --git a/install.sh b/install.sh index b3031bf..5be2a3b 100644 --- a/install.sh +++ b/install.sh @@ -4,7 +4,7 @@ restart_docker() { # 如果容器未运行,提示启动 local running_count=$(docker-compose -f ./docker-compose.yml ps -q | wc -l) if [ "$running_count" -eq 0 ]; then - read -p "容器未启动,是否启动容器?(Y/N): " choice + read -p "容器未启动,是否启动容器?(y/n): " choice case "$choice" in Y|y) docker-compose -f ./docker-compose.yml up -d @@ -22,59 +22,41 @@ restart_docker() { docker-compose -f ./docker-compose.yml up -d } -check_config(){ - local config_dir="./conf" - # 如果配置文件不存在或者空白 - if [ ! -e "$config_dir/config.json" ] || [ ! -s "$config_dir/config.json" ];then - echo "请先'创建配置'" - exit 0 - fi - # 如果配置未初始化 - uuid=$(jq -r '.inbounds[0].settings.clients[0].id' "$config_dir/config.json") - if [ "$uuid" = "你的UUID" ] || [ -z "$uuid" ]; then - echo "请先'创建配置'" - exit 0 - fi -} - - -# 检查依赖 -check_dependencies() { - # 内部退出函数:只在本函数作用域内有效 - exit_with_dep_error() { - echo "请执行 安装依赖 操作" - exit 1 - } - - source ./bin/utils/base.sh - check_jq || exit_with_dep_error - check_docker || exit_with_dep_error - check_docker_compose || exit_with_dep_error -} # 安装依赖 -install_dependencies() { - source ./bin/utils/base.sh +install_dependencies(){ + local script_dir="$(cd "$(dirname "$0")"; pwd)/bin" # 脚本所在目录 + source "${script_dir}/utils/base.sh" + + if ! command -v curl >/dev/null 2>&1; then + install_package curl + fi + + if ! command -v wget >/dev/null 2>&1; then + install_package wget + fi if ! command -v jq >/dev/null 2>&1; then - echo "jq 未安装,开始安装..." - install_jq + echo 安装jq... + install_package jq fi if ! command -v docker >/dev/null 2>&1; then - echo "Docker 未安装,开始安装..." - install_docker + echo 安装docker... + curl -fsSL https://get.docker.com | bash -s docker fi if ! command -v docker-compose >/dev/null 2>&1; then - echo "docker-compose 未安装,开始安装..." - install_docker_compose + echo 安装docker-compose... + wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-linux-x86_64 + chmod +x /usr/local/bin/docker-compose fi } main(){ local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin" # 脚本文件夹路径 + source "${script_dir}/utils/base.sh" # 显示菜单 echo "请选择一个操作:" @@ -101,18 +83,15 @@ main(){ ;; 2) # 创建配置 / 重置配置 - check_dependencies bash $script_dir/create_config.sh ;; 3) # 查看分享链接 - check_dependencies check_config bash $script_dir/print_share_link.sh ;; 4) # 启动容器 - check_dependencies bash $script_dir/run.sh bash $script_dir/print_share_link.sh ;; @@ -126,14 +105,12 @@ main(){ ;; 7) # 修改端口 - check_dependencies check_config bash $script_dir/update_port.sh restart_docker ;; 8) # 修改Reality目标域名 - check_dependencies check_config bash $script_dir/update_reality_dest.sh restart_docker