368 lines
7.7 KiB
Bash
Executable File
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 "$@" |