diff --git a/ChangeMirrors.sh b/ChangeMirrors.sh index 29d9d5d..e806a37 100755 --- a/ChangeMirrors.sh +++ b/ChangeMirrors.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2025-03-23 +## Modified: 2025-04-01 ## License: MIT ## GitHub: https://github.com/SuperManito/LinuxMirrors ## Website: https://linuxmirrors.cn @@ -640,9 +640,9 @@ function collect_system_info() { SYSTEM_NAME="$(cat $File_LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" grep -q "PRETTY_NAME=" $File_LinuxRelease && SYSTEM_PRETTY_NAME="$(cat $File_LinuxRelease | grep -E "^PRETTY_NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" ## 定义系统版本号 - SYSTEM_VERSION_NUMBER="$(cat $File_LinuxRelease | grep -E "^VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" - SYSTEM_VERSION_NUMBER_MAJOR="${SYSTEM_VERSION_NUMBER%.*}" - SYSTEM_VERSION_NUMBER_MINOR="${SYSTEM_VERSION_NUMBER#*.}" + SYSTEM_VERSION_ID="$(cat $File_LinuxRelease | grep -E "^VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" + SYSTEM_VERSION_ID_MAJOR="${SYSTEM_VERSION_ID%.*}" + SYSTEM_VERSION_ID_MINOR="${SYSTEM_VERSION_ID#*.}" ## 定义系统ID SYSTEM_ID="$(cat $File_LinuxRelease | grep -E "^ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" ## 判定当前系统派系 @@ -677,6 +677,7 @@ function collect_system_info() { case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}" | "${SYSTEM_OPENKYLIN}") if ! command -v lsb_release &>/dev/null; then + apt-get update apt-get install -y lsb-release if [ $? -ne 0 ]; then output_error "lsb-release 软件包安装失败\n\n本脚本依赖 lsb_release 指令判断系统具体类型和版本,当前系统可能为精简安装,请自行安装后重新执行脚本!" @@ -689,6 +690,14 @@ function collect_system_info() { SYSTEM_JUDGMENT="${SYSTEM_RASPBERRY_PI_OS}" SYSTEM_PRETTY_NAME="${SYSTEM_RASPBERRY_PI_OS}" fi + # Debian 尚未正式发布的版本 + if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_DEBIAN}" ]] && [[ -z "${SYSTEM_VERSION_ID}" ]]; then + if [[ "${SYSTEM_VERSION_CODENAME}" == "trixie" ]]; then + SYSTEM_VERSION_ID="13" + SYSTEM_VERSION_ID_MAJOR="${SYSTEM_VERSION_ID%.*}" + SYSTEM_VERSION_ID_MINOR="${SYSTEM_VERSION_ID#*.}" + fi + fi ;; "${SYSTEM_REDHAT}") SYSTEM_JUDGMENT="$(awk '{printf $1}' $File_RedHatRelease)" @@ -706,59 +715,64 @@ function collect_system_info() { local is_supported="true" case "${SYSTEM_JUDGMENT}" in "${SYSTEM_DEBIAN}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" -lt 8 || "${SYSTEM_VERSION_NUMBER_MAJOR}" -gt 13 ]]; then - is_supported="false" + if [[ "${SYSTEM_VERSION_ID_MAJOR}" =~ ^[0-9]{1,2}$ ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" -lt 8 || "${SYSTEM_VERSION_ID_MAJOR}" -gt 13 ]]; then + is_supported="false" + fi + fi + if [[ "${SYSTEM_VERSION_CODENAME}" == "sid" ]]; then + echo -e "\n${WARN} 检测到当前系统为 ${BLUE}unstable(sid)${PLAIN} 版本,可能会产生一些无法预料的问题。\n" fi ;; "${SYSTEM_UBUNTU}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" -lt 14 || "${SYSTEM_VERSION_NUMBER_MAJOR}" -gt 24 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" -lt 14 || "${SYSTEM_VERSION_ID_MAJOR}" -gt 24 ]]; then is_supported="false" fi ;; "${SYSTEM_LINUX_MINT}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != 19 && "${SYSTEM_VERSION_NUMBER_MAJOR}" != 2[0-2] && "${SYSTEM_VERSION_NUMBER_MAJOR}" != 6 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != 19 && "${SYSTEM_VERSION_ID_MAJOR}" != 2[0-2] && "${SYSTEM_VERSION_ID_MAJOR}" != 6 ]]; then is_supported="false" fi ;; "${SYSTEM_RHEL}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != [7-9] ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != [7-9] ]]; then is_supported="false" fi ;; "${SYSTEM_CENTOS}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != [7-8] ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != [7-8] ]]; then is_supported="false" fi ;; "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != [8-9] && "${SYSTEM_VERSION_NUMBER_MAJOR}" != 10 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != [8-9] && "${SYSTEM_VERSION_ID_MAJOR}" != 10 ]]; then is_supported="false" fi ;; "${SYSTEM_FEDORA}") - if [[ "${SYSTEM_VERSION_NUMBER}" != [3-4][0-9] ]]; then + if [[ "${SYSTEM_VERSION_ID}" != [3-4][0-9] ]]; then is_supported="false" fi ;; "${SYSTEM_OPENEULER}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != 2[1-4] ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != 2[1-4] ]]; then is_supported="false" fi ;; "${SYSTEM_OPENCLOUDOS}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != [8-9] && "${SYSTEM_VERSION_NUMBER_MAJOR}" != 23 ]] || [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" == 8 && "$SYSTEM_VERSION_NUMBER_MINOR" -lt 6 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != [8-9] && "${SYSTEM_VERSION_ID_MAJOR}" != 23 ]] || [[ "${SYSTEM_VERSION_ID_MAJOR}" == 8 && "${SYSTEM_VERSION_ID_MINOR}" -lt 6 ]]; then is_supported="false" fi ;; "${SYSTEM_ANOLISOS}") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != 8 && "${SYSTEM_VERSION_NUMBER_MAJOR}" != 23 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != 8 && "${SYSTEM_VERSION_ID_MAJOR}" != 23 ]]; then is_supported="false" fi ;; "${SYSTEM_OPENSUSE}") case "${SYSTEM_ID}" in "opensuse-leap") - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" != 15 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" != 15 ]]; then is_supported="false" fi ;; @@ -780,7 +794,7 @@ function collect_system_info() { fi ## 判定系统处理器架构 DEVICE_ARCH_RAW="$(uname -m)" - case "${DEVICE_ARCH_ORIGIN}" in + case "${DEVICE_ARCH_RAW}" in x86_64) DEVICE_ARCH="x86_64" ;; @@ -814,7 +828,7 @@ function collect_system_info() { ## 处理特殊的仓库名称 case "${SYSTEM_JUDGMENT}" in "${SYSTEM_DEBIAN}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8 | 9 | 10) SOURCE_BRANCH="debian-archive" # EOF ;; @@ -824,7 +838,7 @@ function collect_system_info() { esac ;; "${SYSTEM_UBUNTU}" | "${SYSTEM_ZORIN}") - if [[ "${DEVICE_ARCH}" == "x86_64" || "${DEVICE_ARCH}" == *i?86* ]]; then + if [[ "${DEVICE_ARCH_RAW}" == "x86_64" || "${DEVICE_ARCH_RAW}" == *i?86* ]]; then SOURCE_BRANCH="ubuntu" else SOURCE_BRANCH="ubuntu-ports" @@ -834,7 +848,7 @@ function collect_system_info() { SOURCE_BRANCH="raspberrypi" ;; "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9) SOURCE_BRANCH="centos-stream" # 使用 CentOS Stream 仓库 ;; @@ -844,7 +858,7 @@ function collect_system_info() { esac ;; "${SYSTEM_CENTOS}") - if [[ "${DEVICE_ARCH}" == "x86_64" ]]; then + if [[ "${DEVICE_ARCH_RAW}" == "x86_64" ]]; then SOURCE_BRANCH="centos-vault" # EOF else SOURCE_BRANCH="centos-altarch" @@ -852,9 +866,9 @@ function collect_system_info() { ;; "${SYSTEM_CENTOS_STREAM}") # 自 CentOS Stream 9 开始使用 centos-stream 仓库,旧版本使用 centos 仓库 - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8) - if [[ "${DEVICE_ARCH}" == "x86_64" ]]; then + if [[ "${DEVICE_ARCH_RAW}" == "x86_64" ]]; then SOURCE_BRANCH="centos-vault" # EOF else SOURCE_BRANCH="centos-altarch" @@ -866,12 +880,12 @@ function collect_system_info() { esac ;; "${SYSTEM_FEDORA}") - if [[ "${SYSTEM_VERSION_NUMBER}" -lt 39 ]]; then + if [[ "${SYSTEM_VERSION_ID}" -lt 39 ]]; then SOURCE_BRANCH="fedora-archive" fi ;; "${SYSTEM_ARCH}") - if [[ "${DEVICE_ARCH}" == "x86_64" || "${DEVICE_ARCH}" == *i?86* ]]; then + if [[ "${DEVICE_ARCH_RAW}" == "x86_64" || "${DEVICE_ARCH_RAW}" == *i?86* ]]; then SOURCE_BRANCH="archlinux" else SOURCE_BRANCH="archlinuxarm" @@ -1045,7 +1059,7 @@ function choose_mirrors() { } function print_title() { - local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}" + local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_ID}"}" local arch="${DEVICE_ARCH}" local date_time time_zone date_time="$(date "+%Y-%m-%d %H:%M")" @@ -1215,7 +1229,6 @@ function backup_original_mirrors() { ## 判断是否存在源文件 [ -f "${target_file}" ] || touch "${target_file}" if [ ! -s "${target_file}" ]; then - echo -e '' return fi ## 判断是否存在已备份的源文件 @@ -1420,7 +1433,7 @@ function remove_original_mirrors() { fi case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9) rm -rf $Dir_YumRepos/centos.repo $Dir_YumRepos/centos-addons.repo ;; @@ -1441,7 +1454,7 @@ function remove_original_mirrors() { fi ;; "${SYSTEM_CENTOS_STREAM}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9 | 10) rm -rf $Dir_YumRepos/centos.repo $Dir_YumRepos/centos-addons.repo ;; @@ -1451,7 +1464,7 @@ function remove_original_mirrors() { esac ;; "${SYSTEM_ROCKY}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9) rm -rf $Dir_YumRepos/rocky* ;; @@ -1832,7 +1845,7 @@ deb ${1} ${2}-security ${3} local base_url="${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}" case "${SYSTEM_JUDGMENT}" in "${SYSTEM_DEBIAN}") - case "${SYSTEM_VERSION_NUMBER}" in + case "${SYSTEM_VERSION_ID}" in 8 | 9 | 10 | 11) repository_sections="main contrib non-free" ;; @@ -1847,7 +1860,8 @@ $(gen_debian_source "${base_url}" "${SYSTEM_VERSION_CODENAME}" "${repository_sec base_url="${WEB_PROTOCOL}://${SOURCE_SECURITY:-"${SOURCE}"}/${SOURCE_SECURITY_BRANCH:-"${SOURCE_BRANCH}-security"}" echo "$(gen_debian_security_source "${base_url}" "${SYSTEM_VERSION_CODENAME}" "${repository_sections}")" >>$File_DebianSourceList else - echo "deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} + echo "${tips} +deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} # deb-src ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections}" >>$File_DebianSourceList fi ;; @@ -1863,9 +1877,13 @@ deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} # deb-src ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections}" >>$File_DebianSourceList ;; "${SYSTEM_DEEPIN}") - repository_sections="apricot main contrib non-free" + if [[ "${SYSTEM_VERSION_ID}" == "25" ]]; then + repository_sections="main commercial community" + else + repository_sections="main contrib non-free" + fi echo "${tips} -deb ${base_url} ${repository_sections} +deb ${base_url}/${SYSTEM_VERSION_CODENAME} ${SYSTEM_VERSION_CODENAME} ${repository_sections} # deb-src ${base_url} ${repository_sections}" >>$File_DebianSourceList ;; "${SYSTEM_LINUX_MINT}") @@ -1875,7 +1893,7 @@ deb ${base_url} ${repository_sections} deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections}" >>$File_LinuxMintSourceList ## 底层系统软件源 local base_system_branch base_system_codename - if [[ "${SYSTEM_VERSION_NUMBER}" == 6 ]]; then + if [[ "${SYSTEM_VERSION_ID}" == 6 ]]; then # Debian 版(LMDE) base_system_branch="debian" base_system_codename="bookworm" @@ -1887,12 +1905,12 @@ deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections}" >>$File_Linux echo "$(gen_debian_security_source "${base_url}" "${base_system_codename}" "${repository_sections}")" >>$File_LinuxMintSourceList else # Ubuntu 版 - if [[ "${DEVICE_ARCH}" == "x86_64" || "${DEVICE_ARCH}" == *i?86* ]]; then + if [[ "${DEVICE_ARCH_RAW}" == "x86_64" || "${DEVICE_ARCH_RAW}" == *i?86* ]]; then base_system_branch="ubuntu" else base_system_branch="ubuntu-ports" fi - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 22) base_system_codename="noble" ;; @@ -1926,7 +1944,7 @@ deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} local base_system_branch base_system_codename case "${DEVICE_ARCH_RAW}" in x86_64 | aarch64) - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8 | 9 | 10) base_system_branch="debian-archive" # EOF ;; @@ -1935,7 +1953,7 @@ deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} ;; esac base_system_codename="${SYSTEM_VERSION_CODENAME}" - case "${SYSTEM_VERSION_NUMBER}" in + case "${SYSTEM_VERSION_ID}" in 8 | 9 | 10 | 11) repository_sections="main contrib non-free" ;; @@ -1992,35 +2010,35 @@ function change_mirrors_RedHat() { ## 生成 repo 源文件 case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9 | 10) - gen_repo_files_CentOSStream "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_CentOSStream "${SYSTEM_VERSION_ID_MAJOR}" ;; *) - gen_repo_files_CentOS "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_CentOS "${SYSTEM_VERSION_ID_MAJOR}" ;; esac ;; "${SYSTEM_CENTOS}") - gen_repo_files_CentOS "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_CentOS "${SYSTEM_VERSION_ID_MAJOR}" ;; "${SYSTEM_CENTOS_STREAM}") - gen_repo_files_CentOSStream "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_CentOSStream "${SYSTEM_VERSION_ID_MAJOR}" ;; "${SYSTEM_ROCKY}") - gen_repo_files_RockyLinux "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_RockyLinux "${SYSTEM_VERSION_ID_MAJOR}" ;; "${SYSTEM_ALMALINUX}") - gen_repo_files_AlmaLinux "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_AlmaLinux "${SYSTEM_VERSION_ID_MAJOR}" ;; "${SYSTEM_FEDORA}") - gen_repo_files_Fedora "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_Fedora "${SYSTEM_VERSION_ID}" ;; "${SYSTEM_OPENCLOUDOS}") - gen_repo_files_OpenCloudOS "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_OpenCloudOS "${SYSTEM_VERSION_ID}" ;; "${SYSTEM_ANOLISOS}") - gen_repo_files_AnolisOS "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_AnolisOS "${SYSTEM_VERSION_ID}" ;; esac ## 使用官方源 @@ -2033,7 +2051,7 @@ function change_mirrors_RedHat() { cd $Dir_YumRepos case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9) sed -e "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" \ -e "s|^metalink=|#metalink=|g" \ @@ -2050,7 +2068,7 @@ function change_mirrors_RedHat() { *) sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-* sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-* - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8) sed -i "s|mirror.centos.org/\$contentdir|mirror.centos.org/centos-vault|g" CentOS-* sed -i "s/\$releasever/8.5.2111/g" CentOS-* @@ -2072,7 +2090,7 @@ function change_mirrors_RedHat() { sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" CentOS-* sed -i 's|^mirrorlist=|#mirrorlist=|g' CentOS-* ## CentOS 7/8 操作系统版本结束了生命周期(EOL),Linux 社区已不再维护该操作系统版本 - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8) # 最终版本为 8.5.2011,从 2022-02 开始切换至 centos-vault 仓库 sed -i "s|mirror.centos.org/\$contentdir|mirror.centos.org/${SOURCE_BRANCH:-"centos-vault"}|g" CentOS-* @@ -2089,7 +2107,7 @@ function change_mirrors_RedHat() { sed -i "s|mirror.centos.org|${SOURCE}|g" CentOS-* ;; "${SYSTEM_CENTOS_STREAM}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9 | 10) sed -e "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" \ -e "s|^metalink=|#metalink=|g" \ @@ -2109,7 +2127,7 @@ function change_mirrors_RedHat() { esac ;; "${SYSTEM_ROCKY}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9) sed -e "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" \ -e "s|^mirrorlist=|#mirrorlist=|g" \ @@ -2130,7 +2148,7 @@ function change_mirrors_RedHat() { esac ;; "${SYSTEM_ALMALINUX}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9) sed -e "s|^# baseurl=http|baseurl=${WEB_PROTOCOL}|g" \ -e "s|^mirrorlist=|#mirrorlist=|g" \ @@ -2160,7 +2178,7 @@ function change_mirrors_RedHat() { "${SYSTEM_FEDORA}") # 自 Fedora 39 起不再使用 modular 仓库 local fedora_repo_files="fedora.repo fedora-updates.repo fedora-updates-testing.repo" - if [[ "${SYSTEM_VERSION_NUMBER}" -lt 39 ]]; then + if [[ "${SYSTEM_VERSION_ID}" -lt 39 ]]; then fedora_repo_files="${fedora_repo_files} fedora-modular.repo fedora-updates-modular.repo fedora-updates-testing-modular.repo" fi sed -e "s|^metalink=|#metalink=|g" \ @@ -2170,7 +2188,7 @@ function change_mirrors_RedHat() { $fedora_repo_files ;; "${SYSTEM_OPENCLOUDOS}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8) sed -e "s|^baseurl=https|baseurl=${WEB_PROTOCOL}|g" \ -e "s|mirrors.opencloudos.tech/opencloudos|${SOURCE}/${SOURCE_BRANCH}|g" \ @@ -2183,7 +2201,7 @@ function change_mirrors_RedHat() { ;; "${SYSTEM_ANOLISOS}") # Anolis OS 仓库配置特殊,baseurl 同时使用 http 和 https 协议,gpgkey 同时使用软件源仓库远程路径和本地路径 - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 8) sed -e "s|http\(s\)\?://mirrors.openanolis.cn/anolis|${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}|g" \ -i \ @@ -2199,7 +2217,7 @@ function change_mirrors_RedHat() { ## 更换 OpenCloudOS 发行版软件源 function change_mirrors_OpenCloudOS() { ## 生成 repo 源文件 - gen_repo_files_OpenCloudOS "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_OpenCloudOS "${SYSTEM_VERSION_ID}" ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then return @@ -2207,7 +2225,7 @@ function change_mirrors_OpenCloudOS() { ## 修改源 cd $Dir_YumRepos - if [[ "${SYSTEM_VERSION_NUMBER}" == 23 ]]; then + if [[ "${SYSTEM_VERSION_ID}" == 23 ]]; then sed -e "s|^baseurl=https|baseurl=${WEB_PROTOCOL}|g" \ -e "s|mirrors.opencloudos.tech/opencloudos-stream|${SOURCE}/${SOURCE_BRANCH}|g" \ -i \ @@ -2245,7 +2263,7 @@ function change_mirrors_openEuler() { ## 更换 Anolis OS 发行版软件源 function change_mirrors_AnolisOS() { ## 生成 repo 源文件 - gen_repo_files_AnolisOS "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_AnolisOS "${SYSTEM_VERSION_ID}" ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then return @@ -2254,7 +2272,7 @@ function change_mirrors_AnolisOS() { ## 修改源 cd $Dir_YumRepos # Anolis OS 仓库配置特殊,baseurl 同时使用 http 和 https 协议,gpgkey 同时使用软件源仓库远程路径和本地路径 - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 23) sed -e "s|http\(s\)\?://mirrors.openanolis.cn/anolis|${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}|g" \ -i \ @@ -2275,7 +2293,7 @@ function change_mirrors_openSUSE() { ## 生成 repo 源文件 case "${SYSTEM_ID}" in "opensuse-leap") - gen_repo_files_openSUSE "leap" "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_openSUSE "leap" "${SYSTEM_VERSION_ID}" ;; "opensuse-tumbleweed") gen_repo_files_openSUSE "tumbleweed" @@ -2292,7 +2310,7 @@ function change_mirrors_openSUSE() { sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" repo-* case "${SYSTEM_ID}" in opensuse-leap) - case "${SYSTEM_VERSION_NUMBER}" in + case "${SYSTEM_VERSION_ID}" in 15.[0-2]) sed -i "s|download.opensuse.org|${SOURCE}/${SOURCE_BRANCH}|g" \ repo-debug-non-oss.repo \ @@ -2369,7 +2387,7 @@ function change_mirrors_Alpine() { if [ $? -eq 0 ]; then version_name="edge" else - version_name="v${SYSTEM_VERSION_NUMBER_MAJOR}" + version_name="v${SYSTEM_VERSION_ID_MAJOR}" fi ## 修改源 echo "${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}/${version_name}/main @@ -2439,7 +2457,7 @@ function change_mirrors_NixOS() { # binary cache sed -i "s|^substituters.*|substituters = ${binary_cache_source}|g" $File_NixConf # channel - nix-channel --add "${channel_source}/nixos-${SYSTEM_VERSION_NUMBER}" nixos + nix-channel --add "${channel_source}/nixos-${SYSTEM_VERSION_ID}" nixos nix-channel --update >/dev/null 2>&1 } @@ -2455,7 +2473,7 @@ function change_mirrors_or_install_EPEL() { if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_FEDORA}" ]]; then return else - epel_version="${SYSTEM_VERSION_NUMBER_MAJOR}" + epel_version="${SYSTEM_VERSION_ID_MAJOR}" fi ;; *) @@ -2497,9 +2515,9 @@ function change_mirrors_or_install_EPEL() { [ $? -eq 0 ] && rm -rf $Dir_YumReposBackup/epel* fi ## 生成 repo 源文件 - gen_repo_files_EPEL "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_EPEL "${SYSTEM_VERSION_ID_MAJOR}" if [[ "${epel_version}" == 9 ]] && [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_CENTOS_STREAM}" || "${SYSTEM_JUDGMENT}" == "${SYSTEM_RHEL}" ]]; then - gen_repo_files_EPEL_NEXT "${SYSTEM_VERSION_NUMBER_MAJOR}" + gen_repo_files_EPEL_NEXT "${SYSTEM_VERSION_ID_MAJOR}" fi if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then return @@ -2526,7 +2544,7 @@ function get_package_manager() { local command="yum" case "${SYSTEM_JUDGMENT}" in "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9 | 10) command="dnf" ;; diff --git a/DockerInstallation.sh b/DockerInstallation.sh index b575322..79f585f 100755 --- a/DockerInstallation.sh +++ b/DockerInstallation.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2025-03-20 +## Modified: 2025-04-01 ## License: MIT ## GitHub: https://github.com/SuperManito/LinuxMirrors ## Website: https://linuxmirrors.cn @@ -73,11 +73,15 @@ SYSTEM_ROCKY="Rocky" SYSTEM_ALMALINUX="AlmaLinux" SYSTEM_FEDORA="Fedora" SYSTEM_OPENCLOUDOS="OpenCloudOS" +SYSTEM_OPENCLOUDOS_STREAM="OpenCloudOS Stream" SYSTEM_OPENEULER="openEuler" SYSTEM_ANOLISOS="Anolis" +SYSTEM_OPENKYLIN="openKylin" SYSTEM_OPENSUSE="openSUSE" SYSTEM_ARCH="Arch" SYSTEM_ALPINE="Alpine" +SYSTEM_GENTOO="Gentoo" +SYSTEM_NIXOS="NixOS" ## 定义系统版本文件 File_LinuxRelease=/etc/os-release @@ -88,6 +92,7 @@ File_RaspberryPiOSRelease=/etc/rpi-issue File_openEulerRelease=/etc/openEuler-release File_OpenCloudOSRelease=/etc/opencloudos-release File_AnolisOSRelease=/etc/anolis-release +File_OracleLinuxRelease=/etc/oracle-release File_ArchLinuxRelease=/etc/arch-release File_AlpineRelease=/etc/alpine-release File_ProxmoxVersion=/etc/pve/.version @@ -352,27 +357,29 @@ function collect_system_info() { SYSTEM_NAME="$(cat $File_LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" grep -q "PRETTY_NAME=" $File_LinuxRelease && SYSTEM_PRETTY_NAME="$(cat $File_LinuxRelease | grep -E "^PRETTY_NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" ## 定义系统版本号 - SYSTEM_VERSION_NUMBER="$(cat $File_LinuxRelease | grep -E "^VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" - SYSTEM_VERSION_NUMBER_MAJOR="${SYSTEM_VERSION_NUMBER%%.*}" - SYSTEM_VERSION_NUMBER_MINOR="${SYSTEM_VERSION_NUMBER#*.}" + SYSTEM_VERSION_ID="$(cat $File_LinuxRelease | grep -E "^VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" + SYSTEM_VERSION_ID_MAJOR="${SYSTEM_VERSION_ID%.*}" + SYSTEM_VERSION_ID_MINOR="${SYSTEM_VERSION_ID#*.}" ## 定义系统ID SYSTEM_ID="$(cat $File_LinuxRelease | grep -E "^ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" ## 判定当前系统派系 if [ -s "${File_DebianVersion}" ]; then SYSTEM_FACTIONS="${SYSTEM_DEBIAN}" + elif [ -s "${File_OracleLinuxRelease}" ]; then + output_error "当前操作系统(Oracle Linux)不在本脚本的支持范围内,请前往官网查看支持列表!" elif [ -s "${File_RedHatRelease}" ]; then SYSTEM_FACTIONS="${SYSTEM_REDHAT}" elif [ -s "${File_openEulerRelease}" ]; then SYSTEM_FACTIONS="${SYSTEM_OPENEULER}" elif [ -s "${File_OpenCloudOSRelease}" ]; then # 拦截 OpenCloudOS 9 及以上版本,不支持从 Docker 官方仓库安装 - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" -ge 9 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" -ge 9 ]]; then output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker" fi SYSTEM_FACTIONS="${SYSTEM_OPENCLOUDOS}" # 自 9.0 版本起不再基于红帽 elif [ -s "${File_AnolisOSRelease}" ]; then # 拦截 Anolis OS 8.8 及以上版本,不支持从 Docker 官方仓库安装,23 版本支持 - if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" == 8 ]]; then + if [[ "${SYSTEM_VERSION_ID_MAJOR}" == 8 ]]; then output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker" fi SYSTEM_FACTIONS="${SYSTEM_ANOLISOS}" # 自 8.8 版本起不再基于红帽 @@ -383,6 +390,7 @@ function collect_system_info() { case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") if ! command -v lsb_release &>/dev/null; then + apt-get update apt-get install -y lsb-release if [ $? -ne 0 ]; then output_error "lsb-release 软件包安装失败\n\n本脚本依赖 lsb_release 指令判断系统具体类型和版本,当前系统可能为精简安装,请自行安装后重新执行脚本!" @@ -558,8 +566,8 @@ function choose_mirrors() { } function print_title() { - local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}" - local arch=""${DEVICE_ARCH}"" + local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_ID}"}" + local arch="${DEVICE_ARCH}" local date_time time_zone date_time="$(date "+%Y-%m-%d %H:%M")" timezone="$(timedatectl status 2>/dev/null | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')" @@ -608,7 +616,7 @@ function choose_mirrors() { sleep 1 >/dev/null 2>&1 eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想使用的 Docker Registry 源:\${PLAIN}\\n\"" SOURCE_REGISTRY="${_SELECT_RESULT#*@}" - echo -e "\n${GREEN}➜${PLAIN} ${BOLD}Docker Registry: ${_SELECT_RESULT%@*}${PLAIN}" + echo -e "\n${GREEN}➜${PLAIN} ${BOLD}Docker Registry: $(echo "${_SELECT_RESULT%@*}" | sed 's|(推荐)||g')${PLAIN}" else print_mirrors_list "${mirror_list_name}" 44 local CHOICE_C=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker Registry 源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}") @@ -740,7 +748,7 @@ function install_dependency_packages() { ;; "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") # 注:红帽 8 版本才发布了 dnf 包管理工具,为了兼容性而优先选择安装 dnf-utils - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 7) $package_manager install -y yum-utils device-mapper-persistent-data lvm2 ;; @@ -758,7 +766,7 @@ function get_package_manager() { local command="yum" case "${SYSTEM_JUDGMENT}" in "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 9 | 10) command="dnf" ;; @@ -826,9 +834,9 @@ function configure_docker_ce_mirror() { ## 兼容处理版本号 if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_FEDORA}" ]]; then local target_version - case "${SYSTEM_VERSION_NUMBER_MAJOR}" in + case "${SYSTEM_VERSION_ID_MAJOR}" in 7 | 8 | 9 | 10) - target_version="${SYSTEM_VERSION_NUMBER_MAJOR}" + target_version="${SYSTEM_VERSION_ID_MAJOR}" ;; *) ## 目前红帽系衍生系统还没有普及 10 版本 @@ -922,11 +930,11 @@ function install_docker_engine() { rm -rf $DockerVersionFile case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - check_version="$(echo ${target_docker_version} | cut -c1-2)" - CheckSubversion="$(echo ${target_docker_version} | cut -c4-5)" - case "${check_version}" in + local major_version="$(echo ${target_docker_version} | cut -c1-2)" + local minor_version="$(echo ${target_docker_version} | cut -c4-5)" + case "${major_version}" in 18) - if [ ${CheckSubversion} == "09" ]; then + if [ "${minor_version}" == "09" ]; then INSTALL_JUDGMENT="5:" else INSTALL_JUDGMENT="" @@ -980,7 +988,7 @@ function install_docker_engine() { else echo '' cp -rvf $DockerConfig $DockerConfigBackup 2>&1 - echo -e "\n$COMPLETE 已备份原有 Docker 配置文件至 $DockerConfigBackup" + echo -e "\n$COMPLETE 已备份原有 Docker 配置文件" fi sleep 2s else @@ -1040,7 +1048,7 @@ function install_docker_engine() { local latest_docker_version="$(cat $DockerVersionFile | head -n 1)" rm -rf $DockerVersionFile if [[ "${current_docker_version}" == "${latest_docker_version}" ]] && [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then - echo -e "\n$TIP 检测到系统中的 Docker Engine 已经是最新的版本,跳过安装" + echo -e "\n$TIP 检测到系统已安装 Docker Engine 且是最新版本,跳过安装" change_docker_registry_mirror return fi @@ -1059,7 +1067,7 @@ function check_version() { docker -v if [ $? -eq 0 ]; then echo -e " $(docker compose version 2>&1)" - echo -e "\n$COMPLETE 安装完成" + # echo -e "\n$COMPLETE 安装完成" else echo -e "\n$ERROR 安装失败" case "${SYSTEM_FACTIONS}" in @@ -1087,7 +1095,7 @@ function check_version() { fi fi else - echo -e "\n$ERROR 安装失败\n" + echo -e "\n$ERROR 安装失败" fi } diff --git a/docs/use/index.md b/docs/use/index.md index 4810fd3..beb4116 100644 --- a/docs/use/index.md +++ b/docs/use/index.md @@ -333,6 +333,7 @@ hide: !!! quote "" - 如果提示 `bash: /proc/self/fd/11: No such file or directory`,请切换至 `Root` 用户执行,切换命令为 `sudo -i` 或 `su root` + - 如果交互打印界面发现是输入而不是新式的方向键交互,那么请自行安装 `ncurses` 或 `nano` 软件包,新式的方向键交互依赖 `tput` 指令实现。 - ### 关于备份原有软件源