| #!/bin/bash |
|
|
| |
| set -e |
|
|
| |
| RED='\033[0;31m' |
| GREEN='\033[0;32m' |
| BLUE='\033[0;34m' |
| NC='\033[0m' |
|
|
| info() { |
| echo -e "${BLUE}[INFO] $1${NC}" |
| } |
|
|
| error() { |
| echo -e "${RED}[ERROR] $1${NC}" |
| exit 1 |
| } |
|
|
| |
| if [ "$(uname)" != "Darwin" ] && [ "$EUID" -ne 0 ]; then |
| error "请使用 root 权限运行此脚本 (sudo ./setup.sh)" |
| fi |
|
|
| |
| if command -v brew &> /dev/null; then |
| PKG_MANAGER="brew" |
| info "检测到 macOS/Homebrew 系统" |
| elif command -v pkg &> /dev/null; then |
| PKG_MANAGER="pkg" |
| info "检测到 FreeBSD 系统" |
| elif command -v apt-get &> /dev/null; then |
| PKG_MANAGER="apt-get" |
| info "检测到 Debian/Ubuntu 系统" |
| elif command -v dnf &> /dev/null; then |
| PKG_MANAGER="dnf" |
| info "检测到 Fedora/RHEL 系统" |
| elif command -v yum &> /dev/null; then |
| PKG_MANAGER="yum" |
| info "检测到 CentOS 系统" |
| else |
| error "未检测到支持的包管理器" |
| fi |
|
|
| |
| info "更新包管理器缓存..." |
| case $PKG_MANAGER in |
| "brew") |
| brew update |
| ;; |
| "pkg") |
| pkg update |
| ;; |
| *) |
| $PKG_MANAGER update -y |
| ;; |
| esac |
|
|
| |
| info "安装基础构建工具..." |
| case $PKG_MANAGER in |
| "brew") |
| brew install \ |
| protobuf \ |
| pkg-config \ |
| openssl \ |
| curl \ |
| git \ |
| node |
| ;; |
| "pkg") |
| pkg install -y \ |
| gmake \ |
| protobuf \ |
| pkgconf \ |
| openssl \ |
| curl \ |
| git \ |
| node |
| ;; |
| "apt-get") |
| $PKG_MANAGER install -y --no-install-recommends \ |
| build-essential \ |
| protobuf-compiler \ |
| pkg-config \ |
| libssl-dev \ |
| ca-certificates \ |
| curl \ |
| tzdata \ |
| git |
| ;; |
| *) |
| $PKG_MANAGER install -y \ |
| gcc \ |
| gcc-c++ \ |
| make \ |
| protobuf-compiler \ |
| pkg-config \ |
| openssl-devel \ |
| ca-certificates \ |
| curl \ |
| tzdata \ |
| git |
| ;; |
| esac |
|
|
| |
| if ! command -v node &> /dev/null && [ "$PKG_MANAGER" != "brew" ] && [ "$PKG_MANAGER" != "pkg" ]; then |
| info "安装 Node.js 和 npm..." |
| if [ "$PKG_MANAGER" = "apt-get" ]; then |
| curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - |
| $PKG_MANAGER install -y nodejs |
| else |
| curl -fsSL https://rpm.nodesource.com/setup_lts.x | bash - |
| $PKG_MANAGER install -y nodejs |
| fi |
| fi |
|
|
| |
| if ! command -v rustc &> /dev/null; then |
| info "安装 Rust..." |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
| . "$HOME/.cargo/env" |
| fi |
|
|
| |
| info "添加 Rust 目标平台..." |
| case "$(uname)" in |
| "FreeBSD") |
| rustup target add x86_64-unknown-freebsd |
| ;; |
| "Darwin") |
| rustup target add x86_64-apple-darwin aarch64-apple-darwin |
| ;; |
| *) |
| rustup target add x86_64-unknown-linux-gnu |
| ;; |
| esac |
|
|
| |
| case $PKG_MANAGER in |
| "apt-get") |
| rm -rf /var/lib/apt/lists/* |
| ;; |
| "pkg") |
| pkg clean -y |
| ;; |
| esac |
|
|
| |
| if [ "$(uname)" != "Darwin" ]; then |
| info "设置时区为 Asia/Shanghai..." |
| ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
| fi |
|
|
| echo -e "${GREEN}安装完成!${NC}" |