#!/usr/bin/env bash # 如果遇到 windows 格式污染请执行: # sed -i 's/\r$//' rocky-repo.sh set -euo pipefail REPO_DIR="/etc/yum.repos.d" BACKUP_DIR="${REPO_DIR}/backup_$(date +%F_%H-%M-%S)" REPO_FILE="${REPO_DIR}/Rocky-Base.repo" # ============================== # 检测 Rocky 版本 # ============================== detect_version() { if [[ -f /etc/os-release ]]; then . /etc/os-release ROCKY_VER=$(echo "$VERSION_ID" | cut -d. -f1) else echo "无法检测系统版本" exit 1 fi echo "[+] 检测到 Rocky Linux $ROCKY_VER" } # ============================== # 选择镜像源 # ============================== select_mirror() { echo "===============================" echo " 选择 Rocky Linux 镜像源" echo "===============================" echo "1. 阿里云(推荐)" echo "2. 清华 TUNA" echo "3. 华为云" echo "4. 腾讯云" echo "5. 官方源" echo "===============================" read -rp "请输入编号: " choice case "$choice" in 1) BASEURL="https://mirrors.aliyun.com/rockylinux/${ROCKY_VER}" ;; 2) BASEURL="https://mirrors.tuna.tsinghua.edu.cn/rockylinux/${ROCKY_VER}" ;; 3) BASEURL="https://repo.huaweicloud.com/rocky/${ROCKY_VER}" ;; 4) BASEURL="https://mirrors.cloud.tencent.com/rocky/${ROCKY_VER}" ;; 5) BASEURL="https://dl.rockylinux.org/pub/rocky/${ROCKY_VER}" ;; *) echo "无效选择"; exit 1 ;; esac } # ============================== # 备份 repo # ============================== backup_repo() { echo "[+] 备份 repo → $BACKUP_DIR" mkdir -p "$BACKUP_DIR" cp -a ${REPO_DIR}/*.repo "$BACKUP_DIR"/ 2>/dev/null || true } # ============================== # 写入 repo # ============================== write_repo() { echo "[+] 写入 Rocky repo" mkdir -p "${REPO_DIR}/bak_old" mv ${REPO_DIR}/*.repo "${REPO_DIR}/bak_old/" 2>/dev/null || true cat > "$REPO_FILE" <> "$REPO_FILE" </dev/null || { echo "没有备份" exit 1 } read -rp "输入备份路径: " dir if [[ -d "$dir" ]]; then rm -f ${REPO_DIR}/*.repo cp -a "$dir"/*.repo "$REPO_DIR"/ echo "[✓] 回滚完成" else echo "[✗] 目录不存在" exit 1 fi } # ============================== # 主流程 # ============================== main() { detect_version echo "1. 更换源" echo "2. 回滚" read -rp "请选择: " action case "$action" in 1) select_mirror backup_repo write_repo refresh_cache install_optional echo "[✔] Rocky 换源完成" ;; 2) rollback ;; *) echo "无效选择" exit 1 ;; esac } main