feat: 自动检测并安装系统依赖 (curl, unzip, jq)
- 添加 get_sys_pkg_manager() 检测系统包管理器 (apt/yum/dnf/apk/brew/pacman) - 添加 install_sys_dep() 自动安装单个依赖 - 添加 check_system_deps() 检测并自动安装缺失的 curl, unzip, jq - 在 main() 开头调用依赖检测 - 简化 install_bun() 移除重复的 unzip 检测 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
149
setup.sh
149
setup.sh
@@ -83,6 +83,138 @@ get_tool_cmd() { eval echo \"\$TOOL_CMDS_$1\"; }
|
|||||||
get_tool_pkg() { eval echo \"\$TOOL_PKGS_$1\"; }
|
get_tool_pkg() { eval echo \"\$TOOL_PKGS_$1\"; }
|
||||||
get_tool_url() { eval echo \"\$TOOL_URLS_$1\"; }
|
get_tool_url() { eval echo \"\$TOOL_URLS_$1\"; }
|
||||||
|
|
||||||
|
# ========== 检测系统包管理器 ==========
|
||||||
|
get_sys_pkg_manager() {
|
||||||
|
if command_exists apt-get; then
|
||||||
|
echo "apt"
|
||||||
|
elif command_exists yum; then
|
||||||
|
echo "yum"
|
||||||
|
elif command_exists dnf; then
|
||||||
|
echo "dnf"
|
||||||
|
elif command_exists apk; then
|
||||||
|
echo "apk"
|
||||||
|
elif command_exists brew; then
|
||||||
|
echo "brew"
|
||||||
|
elif command_exists pacman; then
|
||||||
|
echo "pacman"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ========== 安装系统依赖 ==========
|
||||||
|
install_sys_dep() {
|
||||||
|
local dep=$1
|
||||||
|
local pkg_mgr=$(get_sys_pkg_manager)
|
||||||
|
|
||||||
|
if [[ -z "$pkg_mgr" ]]; then
|
||||||
|
error "无法检测系统包管理器,请手动安装 $dep"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "正在安装 $dep..."
|
||||||
|
|
||||||
|
case "$pkg_mgr" in
|
||||||
|
apt)
|
||||||
|
apt-get update -qq && apt-get install -y "$dep"
|
||||||
|
;;
|
||||||
|
yum)
|
||||||
|
yum install -y "$dep"
|
||||||
|
;;
|
||||||
|
dnf)
|
||||||
|
dnf install -y "$dep"
|
||||||
|
;;
|
||||||
|
apk)
|
||||||
|
apk add "$dep"
|
||||||
|
;;
|
||||||
|
brew)
|
||||||
|
brew install "$dep"
|
||||||
|
;;
|
||||||
|
pacman)
|
||||||
|
pacman -S --noconfirm "$dep"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if command_exists "$dep"; then
|
||||||
|
success "$dep 安装成功!"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
error "$dep 安装失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ========== 检测并安装系统依赖 ==========
|
||||||
|
check_system_deps() {
|
||||||
|
local missing_deps=()
|
||||||
|
|
||||||
|
# 检测 curl
|
||||||
|
if ! command_exists curl; then
|
||||||
|
missing_deps+=("curl")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检测 unzip (bun 安装需要)
|
||||||
|
if ! command_exists unzip; then
|
||||||
|
missing_deps+=("unzip")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检测 jq (Claude Code 配置需要)
|
||||||
|
if ! command_exists jq; then
|
||||||
|
missing_deps+=("jq")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${#missing_deps[@]} -eq 0 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
warning "检测到缺少以下系统依赖: ${missing_deps[*]}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "是否自动安装这些依赖? (Y/n) " -n 1 -r
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||||
|
error "请手动安装依赖后重新运行脚本"
|
||||||
|
echo ""
|
||||||
|
local pkg_mgr=$(get_sys_pkg_manager)
|
||||||
|
case "$pkg_mgr" in
|
||||||
|
apt)
|
||||||
|
echo -e " ${CYAN}apt-get update && apt-get install -y ${missing_deps[*]}${NC}"
|
||||||
|
;;
|
||||||
|
yum)
|
||||||
|
echo -e " ${CYAN}yum install -y ${missing_deps[*]}${NC}"
|
||||||
|
;;
|
||||||
|
dnf)
|
||||||
|
echo -e " ${CYAN}dnf install -y ${missing_deps[*]}${NC}"
|
||||||
|
;;
|
||||||
|
apk)
|
||||||
|
echo -e " ${CYAN}apk add ${missing_deps[*]}${NC}"
|
||||||
|
;;
|
||||||
|
brew)
|
||||||
|
echo -e " ${CYAN}brew install ${missing_deps[*]}${NC}"
|
||||||
|
;;
|
||||||
|
pacman)
|
||||||
|
echo -e " ${CYAN}pacman -S ${missing_deps[*]}${NC}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e " 请使用系统包管理器安装: ${missing_deps[*]}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo ""
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 自动安装依赖
|
||||||
|
for dep in "${missing_deps[@]}"; do
|
||||||
|
if ! install_sys_dep "$dep"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# ========== 帮助信息 ==========
|
# ========== 帮助信息 ==========
|
||||||
show_help() {
|
show_help() {
|
||||||
cat << 'EOF'
|
cat << 'EOF'
|
||||||
@@ -131,18 +263,6 @@ install_bun() {
|
|||||||
warning "未检测到 Node.js 或 Bun"
|
warning "未检测到 Node.js 或 Bun"
|
||||||
info "推荐安装 Bun(轻量级 JavaScript 运行时)"
|
info "推荐安装 Bun(轻量级 JavaScript 运行时)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 检测 unzip 依赖
|
|
||||||
if ! command_exists unzip; then
|
|
||||||
error "安装 Bun 需要 unzip,请先安装:"
|
|
||||||
echo ""
|
|
||||||
echo -e " Ubuntu/Debian: ${CYAN}sudo apt-get install unzip${NC}"
|
|
||||||
echo -e " Alpine: ${CYAN}apk add unzip${NC}"
|
|
||||||
echo -e " CentOS/RHEL: ${CYAN}sudo yum install unzip${NC}"
|
|
||||||
echo ""
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e " 安装命令: ${CYAN}curl -fsSL https://bun.sh/install | bash${NC}"
|
echo -e " 安装命令: ${CYAN}curl -fsSL https://bun.sh/install | bash${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
@@ -281,6 +401,11 @@ main() {
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# 检测并安装系统依赖 (curl, unzip, jq)
|
||||||
|
if ! check_system_deps; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 显示状态
|
# 显示状态
|
||||||
show_status
|
show_status
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user