#!/bin/bash # Debian 12 包管理配置脚本 # 优化 apt 配置和安装基础软件 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 优化 apt 配置 optimize_apt() { log_info "优化 apt 配置..." # 创建 apt 配置目录 mkdir -p /etc/apt/apt.conf.d # 配置 apt 并发连接数 cat > /etc/apt/apt.conf.d/99custom << 'EOF' Acquire::http::Timeout "30"; Acquire::ftp::Timeout "30"; Acquire::Retries "3"; Acquire::http::Pipeline-Depth "0"; Acquire::http::No-Cache "true"; Acquire::BrokenProxy "true"; Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect"; EOF # 配置多线程下载 cat > /etc/apt/apt.conf.d/99parallel << 'EOF' Acquire::Queue-Mode "access"; Acquire::Retries "0"; Acquire::http::Dl-Limit "0"; Acquire::https::Dl-Limit "0"; Acquire::ftp::Dl-Limit "0"; EOF log_success "apt 配置优化完成" } # 安装基础工具 install_basic_tools() { log_info "安装基础工具..." local packages=( curl wget git vim htop net-tools dnsutils telnet unzip zip tree jq ncdu tmux screen lsof psmisc apt-transport-https ca-certificates gnupg gnupg2 software-properties-common ) apt update apt install -y "${packages[@]}" log_success "基础工具安装完成" } # 安装 Docker (从国内源,支持多源切换) install_docker() { log_info "从国内源安装 Docker (支持多源自动切换)..." # 获取脚本所在目录 local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" local docker_script="$script_dir/install_docker.sh" # 检查是否存在独立的 Docker 安装脚本 if [[ -f "$docker_script" ]]; then log_info "使用 install_docker.sh 脚本安装..." bash "$docker_script" --force else # 内联安装逻辑(多源支持) log_info "使用内置安装逻辑..." # 定义多个 Docker 源 local -A docker_sources=( ["aliyun"]="https://mirrors.aliyun.com/docker-ce" ["ustc"]="https://mirrors.ustc.edu.cn/docker-ce" ["huawei"]="https://mirrors.huaweicloud.com/docker-ce" ["163"]="https://mirrors.163.com/docker-ce" ["tsinghua"]="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" ) local source_order=("aliyun" "ustc" "huawei" "163" "tsinghua") # 卸载旧版本 apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true apt update apt install -y ca-certificates curl gnupg lsb-release mkdir -p /etc/apt/keyrings local codename=$(lsb_release -cs) local arch=$(dpkg --print-architecture) local installed=false for source_name in "${source_order[@]}"; do local source_url="${docker_sources[$source_name]}" log_info "尝试使用 $source_name 源: $source_url" # 测试源 if ! curl -sfL --connect-timeout 5 --max-time 10 "$source_url/linux/debian/gpg" -o /dev/null 2>/dev/null; then log_warning "$source_name 源不可用,跳过..." continue fi # 配置源 rm -f /etc/apt/keyrings/docker.gpg /etc/apt/sources.list.d/docker.list curl -fsSL "$source_url/linux/debian/gpg" | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$arch signed-by=/etc/apt/keyrings/docker.gpg] $source_url/linux/debian $codename stable" > /etc/apt/sources.list.d/docker.list apt update # 尝试安装 set +e apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>&1 local result=$? set -e if [[ $result -eq 0 ]]; then log_success "Docker 安装成功 (源: $source_name)" installed=true break else log_warning "从 $source_name 安装失败,尝试下一个源..." fi done if [[ "$installed" != "true" ]]; then log_error "Docker 安装失败,已尝试所有可用源" exit 1 fi # 配置 Docker mkdir -p /etc/docker cat > /etc/docker/daemon.json << 'EOF' { "registry-mirrors": [ "https://docker-proxy.syy.1msoft.cn", "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2" } EOF systemctl enable docker systemctl start docker if id -u "$SUDO_USER" >/dev/null 2>&1; then usermod -aG docker "$SUDO_USER" log_info "已将用户 $SUDO_USER 添加到 docker 组,请重新登录以生效" fi if docker --version >/dev/null 2>&1; then log_success "Docker 安装成功,版本: $(docker --version)" fi fi } # 安装开发工具 install_dev_tools() { log_info "安装开发工具..." local packages=( build-essential cmake ninja-build python3 python3-pip python3-venv python3-dev nodejs npm golang rustc cargo openjdk-17-jdk maven gradle ) apt update apt install -y "${packages[@]}" # 配置 Python pip 国内源 mkdir -p /root/.pip cat > /root/.pip/pip.conf << 'EOF' [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host = https://pypi.tuna.tsinghua.edu.cn EOF # 配置 npm 国内源 npm config set registry https://registry.npmmirror.com # 配置 Go 国内代理 mkdir -p /root/go echo 'export GOPROXY=https://goproxy.cn,direct' >> /root/.bashrc echo 'export GO111MODULE=on' >> /root/.bashrc # 配置 Rust 国内源 mkdir -p /root/.cargo cat > /root/.cargo/config << 'EOF' [source.crates-io] replace-with = 'tuna' [source.tuna] registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git" EOF log_success "开发工具安装完成" } # 安装网络工具 install_network_tools() { log_info "安装网络工具..." local packages=( openssh-server openssh-client iptables ufw fail2ban nmap tcpdump wireshark iperf3 mtr traceroute whois ntp chrony ) apt update apt install -y "${packages[@]}" log_success "网络工具安装完成" } # 安装监控工具 install_monitoring_tools() { log_info "安装监控工具..." local packages=( prometheus prometheus-node-exporter grafana zabbix-agent nagios-nrpe-plugin munin-node collectd sysstat iotop atop nmon ) apt update apt install -y "${packages[@]}" log_success "监控工具安装完成" } # 清理包缓存 clean_cache() { log_info "清理包缓存..." apt autoremove -y apt autoclean -y apt clean -y log_success "包缓存清理完成" } # 显示包信息 show_package_info() { log_info "系统包信息:" echo "已安装包数量: $(dpkg -l | grep '^ii' | wc -l)" echo "可用更新: $(apt list --upgradable 2>/dev/null | grep -v "Listing" | wc -l)" echo "磁盘使用情况:" df -h /var/cache/apt } # 显示帮助信息 show_help() { cat << EOF Debian 12 包管理配置工具 用法: $0 [选项] [操作] 操作: optimize 优化 apt 配置 basic 安装基础工具 dev 安装开发工具 (不含 Docker) docker 从国内源安装 Docker network 安装网络工具 monitor 安装监控工具 clean 清理包缓存 info 显示包信息 all 执行所有操作 选项: -h, --help 显示此帮助信息 示例: $0 optimize # 优化 apt 配置 $0 basic # 安装基础工具 $0 docker # 从国内源安装 Docker $0 all # 执行所有操作 EOF } # 主函数 main() { local action="$1" case $action in optimize) optimize_apt ;; basic) install_basic_tools ;; dev) install_dev_tools ;; docker) install_docker ;; network) install_network_tools ;; monitor) install_monitoring_tools ;; clean) clean_cache ;; info) show_package_info ;; all) optimize_apt install_basic_tools install_dev_tools install_docker install_network_tools install_monitoring_tools ;; ""|-h|--help) show_help ;; *) log_error "未知操作: $action" show_help exit 1 ;; esac log_success "包管理配置完成!" } # 执行主函数 main "$@"