mirror of
				https://gitee.com/SuperManito/LinuxMirrors
				synced 2025-11-04 08:20:28 +08:00 
			
		
		
		
	逻辑优化
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
## Author: SuperManito
 | 
					## Author: SuperManito
 | 
				
			||||||
## Modified: 2025-07-02
 | 
					## Modified: 2025-07-04
 | 
				
			||||||
## License: MIT
 | 
					## License: MIT
 | 
				
			||||||
## GitHub: https://github.com/SuperManito/LinuxMirrors
 | 
					## GitHub: https://github.com/SuperManito/LinuxMirrors
 | 
				
			||||||
## Website: https://linuxmirrors.cn
 | 
					## Website: https://linuxmirrors.cn
 | 
				
			||||||
@@ -112,8 +112,10 @@ File_OpenCloudOSRelease=/etc/opencloudos-release
 | 
				
			|||||||
File_AnolisOSRelease=/etc/anolis-release
 | 
					File_AnolisOSRelease=/etc/anolis-release
 | 
				
			||||||
File_OracleLinuxRelease=/etc/oracle-release
 | 
					File_OracleLinuxRelease=/etc/oracle-release
 | 
				
			||||||
File_ArchLinuxRelease=/etc/arch-release
 | 
					File_ArchLinuxRelease=/etc/arch-release
 | 
				
			||||||
 | 
					File_ManjaroRelease=/etc/manjaro-release
 | 
				
			||||||
File_AlpineRelease=/etc/alpine-release
 | 
					File_AlpineRelease=/etc/alpine-release
 | 
				
			||||||
File_ProxmoxVersion=/etc/pve/.version
 | 
					File_GentooRelease=/etc/gentoo-release
 | 
				
			||||||
 | 
					File_openKylinVersion=/etc/kylin-version/kylin-system-version.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 定义软件源相关文件或目录
 | 
					## 定义软件源相关文件或目录
 | 
				
			||||||
File_AptSourceList=/etc/apt/sources.list
 | 
					File_AptSourceList=/etc/apt/sources.list
 | 
				
			||||||
@@ -412,7 +414,7 @@ function collect_system_info() {
 | 
				
			|||||||
    if [ -s "${File_DebianVersion}" ]; then
 | 
					    if [ -s "${File_DebianVersion}" ]; then
 | 
				
			||||||
        SYSTEM_FACTIONS="${SYSTEM_DEBIAN}"
 | 
					        SYSTEM_FACTIONS="${SYSTEM_DEBIAN}"
 | 
				
			||||||
    elif [ -s "${File_OracleLinuxRelease}" ]; then
 | 
					    elif [ -s "${File_OracleLinuxRelease}" ]; then
 | 
				
			||||||
        output_error "当前操作系统(Oracle Linux)不在本脚本的支持范围内,请前往官网查看支持列表!"
 | 
					        [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
 | 
				
			||||||
    elif [ -s "${File_RedHatRelease}" ]; then
 | 
					    elif [ -s "${File_RedHatRelease}" ]; then
 | 
				
			||||||
        SYSTEM_FACTIONS="${SYSTEM_REDHAT}"
 | 
					        SYSTEM_FACTIONS="${SYSTEM_REDHAT}"
 | 
				
			||||||
    elif [ -s "${File_openEulerRelease}" ]; then
 | 
					    elif [ -s "${File_openEulerRelease}" ]; then
 | 
				
			||||||
@@ -429,8 +431,18 @@ function collect_system_info() {
 | 
				
			|||||||
            [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
 | 
					            [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        SYSTEM_FACTIONS="${SYSTEM_ANOLISOS}" # 自 8.8 版本起不再基于红帽
 | 
					        SYSTEM_FACTIONS="${SYSTEM_ANOLISOS}" # 自 8.8 版本起不再基于红帽
 | 
				
			||||||
 | 
					    elif [ -s "${File_openKylinVersion}" ]; then
 | 
				
			||||||
 | 
					        [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统,请参考如下命令自行安装:\n\napt-get install -y docker\nsystemctl enable --now docker"
 | 
				
			||||||
 | 
					    elif [ -f "${File_ArchLinuxRelease}" ]; then
 | 
				
			||||||
 | 
					        [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统,请参考如下命令自行安装:\n\npacman -S docker\nsystemctl enable --now docker"
 | 
				
			||||||
 | 
					    elif [ -f "${File_GentooRelease}" ]; then
 | 
				
			||||||
 | 
					        [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统(Gentoo)"
 | 
				
			||||||
 | 
					    elif [[ "${SYSTEM_NAME}" == *"openSUSE"* ]]; then
 | 
				
			||||||
 | 
					        [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统,请参考如下命令自行安装:\n\nzypper install docker\nsystemctl enable --now docker"
 | 
				
			||||||
 | 
					    elif [[ "${SYSTEM_NAME}" == *"NixOS"* ]]; then
 | 
				
			||||||
 | 
					        [[ "${ONLY_REGISTRY}" != "true" ]] && output_error "不支持当前操作系统(NixOS)"
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        output_error "当前操作系统不在本脚本的支持范围内,请前往官网查看支持列表!"
 | 
					        output_error "不支持当前操作系统"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    ## 判定系统类型、版本、版本号
 | 
					    ## 判定系统类型、版本、版本号
 | 
				
			||||||
    case "${SYSTEM_FACTIONS}" in
 | 
					    case "${SYSTEM_FACTIONS}" in
 | 
				
			||||||
@@ -528,7 +540,7 @@ function collect_system_info() {
 | 
				
			|||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
            esac
 | 
					            esac
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        "${SYSTEM_REDHAT}")
 | 
					        "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
				
			||||||
            case "${SYSTEM_JUDGMENT}" in
 | 
					            case "${SYSTEM_JUDGMENT}" in
 | 
				
			||||||
            "${SYSTEM_FEDORA}")
 | 
					            "${SYSTEM_FEDORA}")
 | 
				
			||||||
                SOURCE_BRANCH="fedora"
 | 
					                SOURCE_BRANCH="fedora"
 | 
				
			||||||
@@ -537,16 +549,16 @@ function collect_system_info() {
 | 
				
			|||||||
                SOURCE_BRANCH="rhel"
 | 
					                SOURCE_BRANCH="rhel"
 | 
				
			||||||
                # 拦截 RHEL 最新的 10 版本
 | 
					                # 拦截 RHEL 最新的 10 版本
 | 
				
			||||||
                if [[ "${SYSTEM_VERSION_ID_MAJOR}" == 10 ]]; then
 | 
					                if [[ "${SYSTEM_VERSION_ID_MAJOR}" == 10 ]]; then
 | 
				
			||||||
                    output_error "暂不支持当前操作系统(RHEL 10),请等待 Docker 官方适配或使用正版操作系统软件源进行安装。"
 | 
					                    output_error "暂不支持当前操作系统(RHEL 10),请等待 Docker 官方适配或使用正版操作系统软件源进行安装"
 | 
				
			||||||
                fi
 | 
					                fi
 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
            *)
 | 
					            *)
 | 
				
			||||||
                SOURCE_BRANCH="centos"
 | 
					                SOURCE_BRANCH="centos"
 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
            esac
 | 
					            esac
 | 
				
			||||||
            ;;
 | 
					            if [[ "${DEVICE_ARCH_RAW}" == "s390x" ]]; then
 | 
				
			||||||
        "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
					                output_error "请查阅 RHEL 发行版声明以了解 s390x 支持"
 | 
				
			||||||
            SOURCE_BRANCH="centos"
 | 
					            fi
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        esac
 | 
					        esac
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@@ -965,17 +977,10 @@ function install_docker_engine() {
 | 
				
			|||||||
    ## 安装
 | 
					    ## 安装
 | 
				
			||||||
    function install_main() {
 | 
					    function install_main() {
 | 
				
			||||||
        local target_docker_version
 | 
					        local target_docker_version
 | 
				
			||||||
 | 
					        local pkgs=""
 | 
				
			||||||
        local commands=()
 | 
					        local commands=()
 | 
				
			||||||
        if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
 | 
					        if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
 | 
				
			||||||
            case "${SYSTEM_FACTIONS}" in
 | 
					            pkgs="docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
 | 
				
			||||||
            "${SYSTEM_DEBIAN}")
 | 
					 | 
				
			||||||
                commands+=("apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin")
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
					 | 
				
			||||||
                local package_manager="$(get_package_manager)"
 | 
					 | 
				
			||||||
                commands+=("${package_manager} install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin")
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            esac
 | 
					 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            export_version_list
 | 
					            export_version_list
 | 
				
			||||||
            if [ ! -s "${File_DockerVersionTmp}" ]; then
 | 
					            if [ ! -s "${File_DockerVersionTmp}" ]; then
 | 
				
			||||||
@@ -1020,31 +1025,41 @@ function install_docker_engine() {
 | 
				
			|||||||
                fi
 | 
					                fi
 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
            rm -rf $File_DockerVersionTmp
 | 
					            rm -rf $File_DockerVersionTmp
 | 
				
			||||||
 | 
					            local major_version="$(echo ${target_docker_version} | cut -d'.' -f1)"
 | 
				
			||||||
 | 
					            local minor_version="$(echo ${target_docker_version} | cut -d'.' -f2)"
 | 
				
			||||||
            case "${SYSTEM_FACTIONS}" in
 | 
					            case "${SYSTEM_FACTIONS}" in
 | 
				
			||||||
            "${SYSTEM_DEBIAN}")
 | 
					            "${SYSTEM_DEBIAN}")
 | 
				
			||||||
                local major_version="$(echo ${target_docker_version} | cut -c1-2)"
 | 
					                if [[ $major_version -gt 18 ]] || [[ $major_version -eq 18 && $minor_version -ge 9 ]]; then
 | 
				
			||||||
                local minor_version="$(echo ${target_docker_version} | cut -c4-5)"
 | 
					                    local tmp_version="$(apt-cache madison docker-ce-cli | grep "${target_docker_version}" | head -1 | awk '{print $3}' | awk -F "${target_docker_version}" '{print$1}')"
 | 
				
			||||||
                case "${major_version}" in
 | 
					                    pkgs="docker-ce=${tmp_version}${target_docker_version}* docker-ce-cli=${tmp_version}${target_docker_version}*"
 | 
				
			||||||
                18)
 | 
					 | 
				
			||||||
                    if [ "${minor_version}" == "09" ]; then
 | 
					 | 
				
			||||||
                        INSTALL_JUDGMENT="5:"
 | 
					 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                        INSTALL_JUDGMENT=""
 | 
					                    pkgs="docker-ce=${target_docker_version}* docker-ce-cli=${target_docker_version}*"
 | 
				
			||||||
                fi
 | 
					                fi
 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
                *)
 | 
					
 | 
				
			||||||
                    INSTALL_JUDGMENT="5:"
 | 
					            "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
				
			||||||
 | 
					                pkgs="docker-ce-${target_docker_version}"
 | 
				
			||||||
 | 
					                if [[ $major_version -gt 18 ]] || [[ $major_version -eq 18 && $minor_version -ge 9 ]]; then
 | 
				
			||||||
 | 
					                    pkgs="${pkgs} docker-ce-cli-${target_docker_version}"
 | 
				
			||||||
 | 
					                fi
 | 
				
			||||||
                ;;
 | 
					                ;;
 | 
				
			||||||
            esac
 | 
					            esac
 | 
				
			||||||
                commands+=("apt-get install -y docker-ce=${INSTALL_JUDGMENT}${target_docker_version}* docker-ce-cli=5:${target_docker_version}* containerd.io docker-buildx-plugin docker-compose-plugin")
 | 
					            pkgs="${pkgs} containerd.io"
 | 
				
			||||||
 | 
					            if [[ $major_version -gt 20 ]] || [[ $major_version -eq 20 && $minor_version -ge 10 ]]; then
 | 
				
			||||||
 | 
					                pkgs="${pkgs} docker-compose-plugin"
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					            if [[ $major_version -ge 23 ]]; then
 | 
				
			||||||
 | 
					                pkgs="${pkgs} docker-buildx-plugin"
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        case "${SYSTEM_FACTIONS}" in
 | 
				
			||||||
 | 
					        "${SYSTEM_DEBIAN}")
 | 
				
			||||||
 | 
					            commands+=("apt-get install -y ${pkgs}")
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
					        "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
				
			||||||
                local package_manager="$(get_package_manager)"
 | 
					            commands+=("$(get_package_manager) install -y ${pkgs}")
 | 
				
			||||||
                commands+=("${package_manager} install -y docker-ce-${target_docker_version} docker-ce-cli-${target_docker_version} containerd.io docker-buildx-plugin docker-compose-plugin")
 | 
					 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        esac
 | 
					        esac
 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        echo ''
 | 
					 | 
				
			||||||
        if [[ "${PURE_MODE}" == "true" ]]; then
 | 
					        if [[ "${PURE_MODE}" == "true" ]]; then
 | 
				
			||||||
            local exec_cmd=""
 | 
					            local exec_cmd=""
 | 
				
			||||||
            for cmd in "${commands[@]}"; do
 | 
					            for cmd in "${commands[@]}"; do
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user