diff --git a/script/debian-tuna.sh b/script/debian-tuna.sh new file mode 100755 index 0000000..3e86e84 --- /dev/null +++ b/script/debian-tuna.sh @@ -0,0 +1,127 @@ +#!/bin/bash + +# Debian 一键更换清华镜像源脚本 (DEB822 格式) +# 支持 Debian 12 (bookworm)、13 (trixie)、14 (forky) 及后续版本 + +set -e + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +TUNA_DEBIAN="https://mirrors.tuna.tsinghua.edu.cn/debian" +SECURITY_DEBIAN="https://security.debian.org/debian-security" +KEYRING="/usr/share/keyrings/debian-archive-keyring.gpg" +SOURCES_FILE="/etc/apt/sources.list.d/debian.sources" +LEGACY_LIST="/etc/apt/sources.list" + +# 检测是否为 root 用户 +if [ "$EUID" -ne 0 ]; then + echo -e "${RED}错误: 请使用 root 权限运行此脚本${NC}" + echo "使用: sudo $0" + exit 1 +fi + +# 检测 Debian 版本与代号 +detect_debian() { + if [ ! -f /etc/os-release ]; then + echo -e "${RED}错误: 未检测到 /etc/os-release,无法识别系统${NC}" + exit 1 + fi + + . /etc/os-release + + if [ "${ID:-}" != "debian" ]; then + echo -e "${YELLOW}警告: 当前系统 ID 为 '${ID:-未知}',并非纯 Debian,继续操作可能不适用${NC}" + fi + + DEBIAN_VERSION=${VERSION_ID:-$(cut -d. -f1 /etc/debian_version 2>/dev/null)} + CODENAME=$(echo "${VERSION_CODENAME:-}" | tr '[:upper:]' '[:lower:]') + + # 若 os-release 未提供代号,按主版本号兜底推断 + if [ -z "$CODENAME" ]; then + case "${DEBIAN_VERSION%%.*}" in + 12) CODENAME="bookworm" ;; + 13) CODENAME="trixie" ;; + 14) CODENAME="forky" ;; + *) + echo -e "${RED}错误: 无法确定 Debian 代号 (版本: ${DEBIAN_VERSION:-未知})${NC}" + exit 1 + ;; + esac + fi + + case "${DEBIAN_VERSION%%.*}" in + 12 | 13 | 14) ;; + *) + echo -e "${YELLOW}警告: 当前 Debian 主版本为 '${DEBIAN_VERSION%%.*}',脚本主要面向 12/13/14,仍将按代号 '${CODENAME}' 生成配置${NC}" + ;; + esac +} + +# 生成 DEB822 格式的 .sources 内容 +generate_sources() { + cat <"$LEGACY_LIST" + echo -e "${GREEN}已备份并清空旧版 sources.list -> ${LEGACY_LIST}.backup.${stamp}${NC}" + fi + + # 备份已有的 .sources 文件 + if [ -f "$SOURCES_FILE" ]; then + cp "$SOURCES_FILE" "${SOURCES_FILE}.backup.${stamp}" + echo -e "${GREEN}已备份原有 debian.sources -> ${SOURCES_FILE}.backup.${stamp}${NC}" + fi + + mkdir -p "$(dirname "$SOURCES_FILE")" + generate_sources >"$SOURCES_FILE" + echo -e "${GREEN}已写入清华镜像源配置 -> ${SOURCES_FILE}${NC}\n" + + echo -e "${YELLOW}正在更新软件包列表...${NC}" + apt update + + echo -e "\n${GREEN}✓ 清华镜像源更换完成!${NC}" +} + +main