em-script/scripts/packages/configure_packages.sh

368 lines
7.7 KiB
Bash
Executable File

#!/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 "$@"