#!/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..." # 卸载可能存在的旧版本 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 # 添加 Docker 的官方 GPG 密钥 mkdir -p /etc/apt/keyrings curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # 更新包索引 apt update # 安装 Docker 最新版本 apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 配置 Docker 使用国内镜像 mkdir -p /etc/docker cat > /etc/docker/daemon.json << 'EOF' { "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } } EOF # 启动 Docker 服务 systemctl enable docker systemctl start docker # 添加当前用户到 docker 组(如果用户存在) if id -u "$SUDO_USER" >/dev/null 2>&1; then usermod -aG docker "$SUDO_USER" log_info "已将用户 $SUDO_USER 添加到 docker 组,请重新登录以生效" fi # 测试 Docker 安装 if docker --version >/dev/null 2>&1; then log_success "Docker 安装成功,版本: $(docker --version)" log_info "Docker 镜像加速器已配置" else log_error "Docker 安装失败" exit 1 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 "$@"