针对Ubuntu 软件源配置问题,以下是修复方案: 我们来创建两个修复脚本:
第一个脚本 (fix_apt_sources_noble.sh) 是针对 Ubuntu 24.04 (Noble) 的。它会自动检测你的系统版本,并提供多种镜像源选项(包括阿里云、华为云、清华、中科大以及官方源),然后测试哪个源可用并应用它。
第二个脚本 (fix_apt_sources_jammy.sh) 则是专门针对 Ubuntu 22.04 (Jammy) 的版本,功能类似。
1. 针对 Ubuntu 24.04 (Noble) 的优化脚本 将以下代码保存为 fix_apt_sources_noble.sh 并赋予执行权限 (chmod +x fix_apt_sources_noble.sh) 后运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 #!/bin/bash set -e EXPECTED_CODENAME="noble" CURRENT_CODENAME=$(lsb_release -cs 2>/dev/null || echo "unknown" )if [[ "$CURRENT_CODENAME " != "$EXPECTED_CODENAME " ]]; then echo "⚠️ 警告: 此脚本设计用于 Ubuntu $EXPECTED_CODENAME ($EXPECTED_CODENAME ),但检测到您的发行版代号是 '$CURRENT_CODENAME '。" read -p "是否继续? (y/N): " confirm && [[ $confirm == [yY] ]] || exit 1fi echo "🔍 开始修复 Ubuntu $EXPECTED_CODENAME 的 APT 源配置..." BACKUP_FILE="/etc/apt/sources.list.backup.$(date +%Y%m%d_%H%M%S) " echo "📁 正在备份当前配置到 $BACKUP_FILE ..." sudo cp /etc/apt/sources.list "$BACKUP_FILE " ARCH=$(dpkg --print-architecture)echo "🖥️ 检测到系统架构: $ARCH " declare -A SOURCES=( ["官方源" ]="http://archive.ubuntu.com/ubuntu/" ["阿里云" ]="https://mirrors.aliyun.com/ubuntu/" ["华为云" ]="https://mirrors.huaweicloud.com/repository/ubuntu/" ["清华大学" ]="https://mirrors.tuna.tsinghua.edu.cn/ubuntu/" ["中科大" ]="https://mirrors.ustc.edu.cn/ubuntu/" )generate_source_list () { local base_url=$1 cat << EOF # Ubuntu $EXPECTED_CODENAME (noble) - $(basename "$base_url") deb $base_url noble main restricted universe multiverse deb $base_url noble-updates main restricted universe multiverse deb $base_url noble-security main restricted universe multiverse deb $base_url noble-backports main restricted universe multiverse # 源码包(可选) # deb-src $base_url noble main restricted universe multiverse # deb-src $base_url noble-updates main restricted universe multiverse # deb-src $base_url noble-security main restricted universe multiverse # deb-src $base_url noble-backports main restricted universe multiverse EOF }test_source () { local url=$1 echo "🧪 正在测试源: $url " generate_source_list "$url " > /tmp/test_sources.list sudo cp /tmp/test_sources.list /etc/apt/sources.list output=$(sudo apt update 2>&1) retval=$? if [ $retval -eq 0 ]; then echo "✅ 测试成功: $url 可用" return 0 else echo "❌ 测试失败: $url 不可用" return 1 fi } FOUND_WORKING_SOURCE=false for name in "${!SOURCES[@]} " ; do if test_source "${SOURCES[$name]} " ; then FOUND_WORKING_SOURCE=true echo "🎉 成功找到可用源: $name (${SOURCES[$name]} )" break fi done rm -f /tmp/test_sources.listif [ "$FOUND_WORKING_SOURCE " = true ]; then echo "✅ APT 源已成功更新并验证。" echo "💡 如需恢复原始配置,请执行:" echo " sudo mv $BACKUP_FILE /etc/apt/sources.list && sudo apt update" else echo "❌ 所有预定义源均无法访问。请检查网络连接或稍后再试。" echo "🔄 正在恢复原始 sources.list 配置..." sudo mv "$BACKUP_FILE " /etc/apt/sources.list echo "🔄 已恢复原始配置。" exit 1fi echo "🏁 APT 源修复完成。"
2. 针对 Ubuntu 22.04 (Jammy) 的优化脚本 将以下代码保存为 fix_apt_sources_jammy.sh 并赋予执行权限 (chmod +x fix_apt_sources_jammy.sh) 后运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 #!/bin/bash set -e EXPECTED_CODENAME="jammy" CURRENT_CODENAME=$(lsb_release -cs 2>/dev/null || echo "unknown" )if [[ "$CURRENT_CODENAME " != "$EXPECTED_CODENAME " ]]; then echo "⚠️ 警告: 此脚本设计用于 Ubuntu $EXPECTED_CODENAME ($EXPECTED_CODENAME ),但检测到您的发行版代号是 '$CURRENT_CODENAME '。" read -p "是否继续? (y/N): " confirm && [[ $confirm == [yY] ]] || exit 1fi echo "🔍 开始修复 Ubuntu $EXPECTED_CODENAME 的 APT 源配置..." BACKUP_FILE="/etc/apt/sources.list.backup.$(date +%Y%m%d_%H%M%S) " echo "📁 正在备份当前配置到 $BACKUP_FILE ..." sudo cp /etc/apt/sources.list "$BACKUP_FILE " ARCH=$(dpkg --print-architecture)echo "🖥️ 检测到系统架构: $ARCH " declare -A SOURCES=( ["官方源" ]="http://archive.ubuntu.com/ubuntu/" ["阿里云" ]="https://mirrors.aliyun.com/ubuntu/" ["华为云" ]="https://mirrors.huaweicloud.com/repository/ubuntu/" ["清华大学" ]="https://mirrors.tuna.tsinghua.edu.cn/ubuntu/" ["中科大" ]="https://mirrors.ustc.edu.cn/ubuntu/" )generate_source_list () { local base_url=$1 cat << EOF # Ubuntu $EXPECTED_CODENAME (jammy) - $(basename "$base_url") deb $base_url jammy main restricted universe multiverse deb $base_url jammy-updates main restricted universe multiverse deb $base_url jammy-security main restricted universe multiverse deb $base_url jammy-backports main restricted universe multiverse # 源码包(可选) # deb-src $base_url jammy main restricted universe multiverse # deb-src $base_url jammy-updates main restricted universe multiverse # deb-src $base_url jammy-security main restricted universe multiverse # deb-src $base_url jammy-backports main restricted universe multiverse EOF }test_source () { local url=$1 echo "🧪 正在测试源: $url " generate_source_list "$url " > /tmp/test_sources.list sudo cp /tmp/test_sources.list /etc/apt/sources.list output=$(sudo apt update 2>&1) retval=$? if [ $retval -eq 0 ]; then echo "✅ 测试成功: $url 可用" return 0 else echo "❌ 测试失败: $url 不可用" return 1 fi } FOUND_WORKING_SOURCE=false for name in "${!SOURCES[@]} " ; do if test_source "${SOURCES[$name]} " ; then FOUND_WORKING_SOURCE=true echo "🎉 成功找到可用源: $name (${SOURCES[$name]} )" break fi done rm -f /tmp/test_sources.listif [ "$FOUND_WORKING_SOURCE " = true ]; then echo "✅ APT 源已成功更新并验证。" echo "💡 如需恢复原始配置,请执行:" echo " sudo mv $BACKUP_FILE /etc/apt/sources.list && sudo apt update" else echo "❌ 所有预定义源均无法访问。请检查网络连接或稍后再试。" echo "🔄 正在恢复原始 sources.list 配置..." sudo mv "$BACKUP_FILE " /etc/apt/sources.list echo "🔄 已恢复原始配置。" exit 1fi echo "🏁 APT 源修复完成。"
如何使用
下载/创建脚本 : 将上面的相应代码块复制粘贴到一个新的文本文件中,并命名为 fix_apt_sources_noble.sh 或 fix_apt_sources_jammy.sh。
添加执行权限 :1 2 3 chmod +x fix_apt_sources_noble.shchmod +x fix_apt_sources_jammy.sh
运行脚本 :1 2 3 ./fix_apt_sources_noble.sh ./fix_apt_sources_jammy.sh
这些脚本将会:
检查系统版本。
自动备份原始的 /etc/apt/sources.list 文件。
依次测试预设的不同镜像源(包括官方源)。
一旦发现一个可用的源,就会将其设置为新的 sources.list 内容。
如果所有源都不可用,则会回滚到原始配置。