#!/bin/bash

# 备份原始软件源配置文件
sudo cp /etc/yum.repos.d/rocky.repo /etc/yum.repos.d/rocky.repo.bak

# 软件源数组
declare -a repo_urls=(
    "https://mirrors.tuna.tsinghua.edu.cn/rocky/8/BaseOS/x86_64/os/|清华大学"
    "https://mirrors.aliyun.com/rocky/8/BaseOS/x86_64/os/|阿里云"
    "http://mirrors.163.com/rocky/8/BaseOS/x86_64/os/|网易"
)

# 获取当前Rocky Linux系统版本
rocky_version=$(rpm -E %{rhel})

# 根据系统版本选择对应的软件源
case $rocky_version in
    "8")
        repo_index=0  # 清华源
        ;;
    *)
        repo_index=1  # 默认选择阿里云源
        ;;
esac

# 显示可用的软件源列表
echo "国内软件源列表："
for ((i=0; i<${#repo_urls[@]}; i++)); do
    url=$(echo ${repo_urls[$i]} | cut -d '|' -f 1)
    name=$(echo ${repo_urls[$i]} | cut -d '|' -f 2)
    echo "$i. $name ($url)"
done

# 提示用户选择一个源
read -p "请选择要使用的软件源的编号 (默认为 $repo_index): " user_repo_index

# 如果用户选择了有效的编号，则更新 repo_index
if [[ $user_repo_index =~ ^[0-9]+$ ]] && [ $user_repo_index -ge 0 ] && [ $user_repo_index -lt ${#repo_urls[@]} ]; then
    repo_index=$user_repo_index
fi

# 检测源是否正常
repo_url=$(echo ${repo_urls[$repo_index]} | cut -d '|' -f 1)
if ping -c 1 $(echo $repo_url | awk -F/ '{print $3}') &> /dev/null; then
    echo "源 $repo_url 可正常连接。"
else
    echo "源 $repo_url 无法连接，请检查网络连接。"
    # 尝试使用其他源进行更新
    for ((i=0; i<${#repo_urls[@]}; i++)); do
        alt_repo_url=$(echo ${repo_urls[$i]} | cut -d '|' -f 1)
        if ping -c 1 $(echo $alt_repo_url | awk -F/ '{print $3}') &> /dev/null; then
            echo "尝试使用备选源 $alt_repo_url 进行更新。"
            repo_url=$alt_repo_url
            break
        fi
    done
    if [ -z "$repo_url" ]; then
        echo "所有备选源均无法连接，请检查网络连接或稍后再试。"
        exit 1
    fi
fi

# 检查当前使用的源
current_source=$(grep -oP '(?<=^baseurl=).+' /etc/yum.repos.d/rocky.repo | awk -F/ '{print $3}')
echo "当前使用的源：$current_source"

# 下载并替换为用户选择的软件源配置文件
sudo sed -i "s|baseurl=.*|baseurl=$repo_url|g" /etc/yum.repos.d/rocky.repo

# 清除缓存
sudo dnf clean all

# 更新软件包索引
sudo dnf update -y

echo "中国软件源已经成功设置并更新完成。"
