mirror of
				https://gitee.com/SuperManito/LinuxMirrors
				synced 2025-11-04 08:20:28 +08:00 
			
		
		
		
	优化
This commit is contained in:
		
							
								
								
									
										227
									
								
								ChangeMirrors.sh
									
									
									
									
									
								
							
							
						
						
									
										227
									
								
								ChangeMirrors.sh
									
									
									
									
									
								
							@@ -229,20 +229,13 @@ PURPLE='\033[35m'
 | 
			
		||||
AZURE='\033[36m'
 | 
			
		||||
PLAIN='\033[0m'
 | 
			
		||||
BOLD='\033[1m'
 | 
			
		||||
SUCCESS=" \033[1;32m✔${PLAIN}"
 | 
			
		||||
COMPLETE=" \033[1;32m✔${PLAIN}"
 | 
			
		||||
WARN=" \033[1;43m 警告 ${PLAIN}"
 | 
			
		||||
ERROR=" \033[1;31m✘${PLAIN}"
 | 
			
		||||
FAIL=" \033[1;31m✘${PLAIN}"
 | 
			
		||||
TIP=" \033[1;44m 提示 ${PLAIN}"
 | 
			
		||||
WORKING=" \033[1;36m>_${PLAIN}"
 | 
			
		||||
# SUCCESS="[\033[1;32m成功${PLAIN}]"
 | 
			
		||||
# COMPLETE="[\033[1;32m完成${PLAIN}]"
 | 
			
		||||
# WARN="[\033[1;5;33m注意${PLAIN}]"
 | 
			
		||||
# ERROR="[\033[1;31m错误${PLAIN}]"
 | 
			
		||||
# FAIL="[\033[1;31m失败${PLAIN}]"
 | 
			
		||||
# TIP="[\033[1;32m提示${PLAIN}]"
 | 
			
		||||
# WORKING="[\033[1;36m >_ ${PLAIN}]"
 | 
			
		||||
SUCCESS="\033[1;32m✔${PLAIN}"
 | 
			
		||||
COMPLETE="\033[1;32m✔${PLAIN}"
 | 
			
		||||
WARN="\033[1;43m 警告 ${PLAIN}"
 | 
			
		||||
ERROR="\033[1;31m✘${PLAIN}"
 | 
			
		||||
FAIL="\033[1;31m✘${PLAIN}"
 | 
			
		||||
TIP="\033[1;44m 提示 ${PLAIN}"
 | 
			
		||||
WORKING="\033[1;36m>_${PLAIN}"
 | 
			
		||||
 | 
			
		||||
function main() {
 | 
			
		||||
    permission_judgment
 | 
			
		||||
@@ -252,7 +245,6 @@ function main() {
 | 
			
		||||
    choose_mirrors
 | 
			
		||||
    choose_protocol
 | 
			
		||||
    choose_install_epel_packages
 | 
			
		||||
    close_firewall_service
 | 
			
		||||
    backup_original_mirrors
 | 
			
		||||
    remove_original_mirrors
 | 
			
		||||
    change_mirrors_main
 | 
			
		||||
@@ -285,7 +277,6 @@ function handle_command_options() {
 | 
			
		||||
  --use-intranet-source    是否优先使用内网软件源地址                                     true 或 false
 | 
			
		||||
  --use-official-source    是否使用目标操作系统的官方软件源                               true 或 false
 | 
			
		||||
  --install-epel           是否安装 EPEL 附加软件包                                       true 或 false
 | 
			
		||||
  --close-firewall         是否关闭防火墙                                                 true 或 false
 | 
			
		||||
  --backup                 是否备份原有软件源                                             true 或 false
 | 
			
		||||
  --upgrade-software       是否更新软件包                                                 true 或 false
 | 
			
		||||
  --clean-cache            是否清理下载缓存                                               true 或 false
 | 
			
		||||
@@ -513,22 +504,6 @@ function handle_command_options() {
 | 
			
		||||
            ONLY_EPEL="true"
 | 
			
		||||
            INSTALL_EPEL="true"
 | 
			
		||||
            ;;
 | 
			
		||||
        ## 关闭防火墙
 | 
			
		||||
        --close-firewall)
 | 
			
		||||
            if [ "$2" ]; then
 | 
			
		||||
                case "$2" in
 | 
			
		||||
                [Tt]rue | [Ff]alse)
 | 
			
		||||
                    CLOSE_FIREWALL="${2,,}"
 | 
			
		||||
                    shift
 | 
			
		||||
                    ;;
 | 
			
		||||
                *)
 | 
			
		||||
                    output_error "命令选项 ${BLUE}$2${PLAIN} 无效,请在该选项后指定 true 或 false !"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            else
 | 
			
		||||
                output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定 true 或 false !"
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
        ## 备份原有软件源
 | 
			
		||||
        --backup)
 | 
			
		||||
            if [ "$2" ]; then
 | 
			
		||||
@@ -626,15 +601,15 @@ function run_start() {
 | 
			
		||||
    elif [ "${CLEAN_SCREEN}" == "true" ]; then
 | 
			
		||||
        clear
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e ' +-----------------------------------+'
 | 
			
		||||
    echo -e " | \033[0;1;35;95m⡇\033[0m  \033[0;1;33;93m⠄\033[0m \033[0;1;32;92m⣀⡀\033[0m \033[0;1;36;96m⡀\033[0;1;34;94m⢀\033[0m \033[0;1;35;95m⡀⢀\033[0m \033[0;1;31;91m⡷\033[0;1;33;93m⢾\033[0m \033[0;1;32;92m⠄\033[0m \033[0;1;36;96m⡀⣀\033[0m \033[0;1;34;94m⡀\033[0;1;35;95m⣀\033[0m \033[0;1;31;91m⢀⡀\033[0m \033[0;1;33;93m⡀\033[0;1;32;92m⣀\033[0m \033[0;1;36;96m⢀⣀\033[0m |"
 | 
			
		||||
    echo -e " | \033[0;1;31;91m⠧\033[0;1;33;93m⠤\033[0m \033[0;1;32;92m⠇\033[0m \033[0;1;36;96m⠇⠸\033[0m \033[0;1;34;94m⠣\033[0;1;35;95m⠼\033[0m \033[0;1;31;91m⠜⠣\033[0m \033[0;1;33;93m⠇\033[0;1;32;92m⠸\033[0m \033[0;1;36;96m⠇\033[0m \033[0;1;34;94m⠏\033[0m  \033[0;1;35;95m⠏\033[0m  \033[0;1;33;93m⠣⠜\033[0m \033[0;1;32;92m⠏\033[0m  \033[0;1;34;94m⠭⠕\033[0m |"
 | 
			
		||||
    echo -e ' +-----------------------------------+'
 | 
			
		||||
    echo -e ' 欢迎使用 GNU/Linux 更换系统软件源脚本'
 | 
			
		||||
    echo -e '+-----------------------------------+'
 | 
			
		||||
    echo -e "| \033[0;1;35;95m⡇\033[0m  \033[0;1;33;93m⠄\033[0m \033[0;1;32;92m⣀⡀\033[0m \033[0;1;36;96m⡀\033[0;1;34;94m⢀\033[0m \033[0;1;35;95m⡀⢀\033[0m \033[0;1;31;91m⡷\033[0;1;33;93m⢾\033[0m \033[0;1;32;92m⠄\033[0m \033[0;1;36;96m⡀⣀\033[0m \033[0;1;34;94m⡀\033[0;1;35;95m⣀\033[0m \033[0;1;31;91m⢀⡀\033[0m \033[0;1;33;93m⡀\033[0;1;32;92m⣀\033[0m \033[0;1;36;96m⢀⣀\033[0m |"
 | 
			
		||||
    echo -e "| \033[0;1;31;91m⠧\033[0;1;33;93m⠤\033[0m \033[0;1;32;92m⠇\033[0m \033[0;1;36;96m⠇⠸\033[0m \033[0;1;34;94m⠣\033[0;1;35;95m⠼\033[0m \033[0;1;31;91m⠜⠣\033[0m \033[0;1;33;93m⠇\033[0;1;32;92m⠸\033[0m \033[0;1;36;96m⠇\033[0m \033[0;1;34;94m⠏\033[0m  \033[0;1;35;95m⠏\033[0m  \033[0;1;33;93m⠣⠜\033[0m \033[0;1;32;92m⠏\033[0m  \033[0;1;34;94m⠭⠕\033[0m |"
 | 
			
		||||
    echo -e '+-----------------------------------+'
 | 
			
		||||
    echo -e '欢迎使用 GNU/Linux 更换系统软件源脚本'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function run_end() {
 | 
			
		||||
    echo -e "\n ✨️ \033[1;34mPowered by https://linuxmirrors.cn\033[0m\n"
 | 
			
		||||
    echo -e "\n✨️ \033[1;34mPowered by https://linuxmirrors.cn\033[0m\n"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 报错退出
 | 
			
		||||
@@ -976,7 +951,7 @@ function choose_mirrors() {
 | 
			
		||||
                for ((j = 1; j <= ${tmp_spaces_nums}; j++)); do
 | 
			
		||||
                    tmp_mirror_name="${tmp_mirror_name} "
 | 
			
		||||
                done
 | 
			
		||||
                printf " ❖  %-$((default_mirror_name_length + tmp_mirror_name_length))s %4s\n" "${tmp_mirror_name}" "$arr_num)"
 | 
			
		||||
                printf "❖  %-$((default_mirror_name_length + tmp_mirror_name_length))s %4s\n" "${tmp_mirror_name}" "$arr_num)"
 | 
			
		||||
            done
 | 
			
		||||
        else
 | 
			
		||||
            for ((i = 0; i < ${#list_arr[@]}; i++)); do
 | 
			
		||||
@@ -1038,8 +1013,8 @@ function choose_mirrors() {
 | 
			
		||||
        time_zone="$(timedatectl status 2>/dev/null | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')"
 | 
			
		||||
 | 
			
		||||
        echo -e ''
 | 
			
		||||
        echo -e " 运行环境 ${BLUE}${system_name} ${arch}${PLAIN}"
 | 
			
		||||
        echo -e " 系统时间 ${BLUE}${date_time} ${time_zone}${PLAIN}"
 | 
			
		||||
        echo -e "运行环境 ${BLUE}${system_name} ${arch}${PLAIN}"
 | 
			
		||||
        echo -e "系统时间 ${BLUE}${date_time} ${time_zone}${PLAIN}"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    print_title
 | 
			
		||||
@@ -1063,7 +1038,7 @@ function choose_mirrors() {
 | 
			
		||||
        if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
            eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想使用的软件源:\${PLAIN}\\n\""
 | 
			
		||||
            SOURCE="${_SELECT_RESULT#*@}"
 | 
			
		||||
            echo -e "\n ${GREEN}➜${PLAIN}  ${BOLD}${_SELECT_RESULT%@*}${PLAIN}" | sed "s| · | |g"
 | 
			
		||||
            echo -e "\n${GREEN}➜${PLAIN}  ${BOLD}${_SELECT_RESULT%@*}${PLAIN}" | sed "s| · | |g"
 | 
			
		||||
        else
 | 
			
		||||
            print_mirrors_list "${mirror_list_name}" $mirror_list_print_length
 | 
			
		||||
            local CHOICE=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的软件源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}")
 | 
			
		||||
@@ -1136,12 +1111,6 @@ function choose_install_epel_packages() {
 | 
			
		||||
        ## 判断是否已安装 EPEL 软件包
 | 
			
		||||
        rpm -qa | grep epel-release -q
 | 
			
		||||
        VERIFICATION_EPEL=$?
 | 
			
		||||
        ## 判断 /etc/yum.repos.d 目录下是否存在 epel 附加软件包 repo 源文件
 | 
			
		||||
        [ -d $Dir_YumRepos ] && ls $Dir_YumRepos | grep epel -q
 | 
			
		||||
        VERIFICATION_EPELFILES=$?
 | 
			
		||||
        ## 判断 /etc/yum.repos.d.bak 目录下是否存在 epel 附加软件包 repo 源文件
 | 
			
		||||
        [ -d $Dir_YumReposBackup ] && ls $Dir_YumReposBackup | grep epel -q
 | 
			
		||||
        VERIFICATION_EPELBACKUPFILES=$?
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ## 判断是否支持且需要处理 EPEL 附加软件包
 | 
			
		||||
@@ -1197,42 +1166,6 @@ function choose_install_epel_packages() {
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 关闭防火墙和SELinux
 | 
			
		||||
function close_firewall_service() {
 | 
			
		||||
    if [ ! -x /usr/bin/systemctl ]; then
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "$(systemctl is-active firewalld)" == "active" ]]; then
 | 
			
		||||
        if [[ -z "${CLOSE_FIREWALL}" ]]; then
 | 
			
		||||
            if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
                echo ''
 | 
			
		||||
                interactive_select_boolean "${BOLD}是否关闭防火墙和 SELinux ?${PLAIN}"
 | 
			
		||||
                if [[ "${_SELECT_RESULT}" == "true" ]]; then
 | 
			
		||||
                    CLOSE_FIREWALL="true"
 | 
			
		||||
                fi
 | 
			
		||||
            else
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 是否关闭防火墙和 SELinux ? [Y/n] ${PLAIN}")
 | 
			
		||||
                read -rp "${CHOICE}" INPUT
 | 
			
		||||
                [[ -z "${INPUT}" ]] && INPUT=Y
 | 
			
		||||
                case "${INPUT}" in
 | 
			
		||||
                [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
                    CLOSE_FIREWALL="true"
 | 
			
		||||
                    ;;
 | 
			
		||||
                [Nn] | [Nn][Oo]) ;;
 | 
			
		||||
                *)
 | 
			
		||||
                    echo -e "\n$WARN 输入错误,默认不关闭!"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "${CLOSE_FIREWALL}" == "true" ]]; then
 | 
			
		||||
            local SelinuxConfig=/etc/selinux/config
 | 
			
		||||
            systemctl disable --now firewalld >/dev/null 2>&1
 | 
			
		||||
            [ -s $SelinuxConfig ] && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" $SelinuxConfig && setenforce 0 >/dev/null 2>&1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 备份原有软件源(文件/目录)
 | 
			
		||||
function backup_original_mirrors() {
 | 
			
		||||
    function backup_file() {
 | 
			
		||||
@@ -1252,14 +1185,14 @@ function backup_original_mirrors() {
 | 
			
		||||
            fi
 | 
			
		||||
            if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
                echo ''
 | 
			
		||||
                interactive_select_boolean "${BOLD}检测到系统中存在已备份的 ${type} 源文件,是否跳过覆盖备份?${PLAIN}"
 | 
			
		||||
                interactive_select_boolean "${BOLD}检测到系统存在已备份的 ${type} 源文件,是否跳过覆盖备份?${PLAIN}"
 | 
			
		||||
                if [[ "${_SELECT_RESULT}" == "false" ]]; then
 | 
			
		||||
                    echo ''
 | 
			
		||||
                    cp -rvf "${target_file}" "${backup_file}" 2>&1
 | 
			
		||||
                    BACKED_UP="true"
 | 
			
		||||
                fi
 | 
			
		||||
            else
 | 
			
		||||
                local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 ${type} 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
 | 
			
		||||
                local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到系统存在已备份的 ${type} 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
 | 
			
		||||
                read -rp "${CHOICE_BACKUP}" INPUT
 | 
			
		||||
                [[ -z "${INPUT}" ]] && INPUT=Y
 | 
			
		||||
                case "${INPUT}" in
 | 
			
		||||
@@ -1300,14 +1233,14 @@ function backup_original_mirrors() {
 | 
			
		||||
            fi
 | 
			
		||||
            if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
                echo ''
 | 
			
		||||
                interactive_select_boolean "${BOLD}检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份?${PLAIN}"
 | 
			
		||||
                interactive_select_boolean "${BOLD}检测到系统存在已备份的 repo 源文件,是否跳过覆盖备份?${PLAIN}"
 | 
			
		||||
                if [[ "${_SELECT_RESULT}" == "false" ]]; then
 | 
			
		||||
                    echo ''
 | 
			
		||||
                    cp -rvf $target_dir/* "${backup_dir}" 2>&1
 | 
			
		||||
                    BACKED_UP="true"
 | 
			
		||||
                fi
 | 
			
		||||
            else
 | 
			
		||||
                local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到系统中存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
 | 
			
		||||
                local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到系统存在已备份的 repo 源文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
 | 
			
		||||
                read -rp "${CHOICE_BACKUP}" INPUT
 | 
			
		||||
                [[ -z "${INPUT}" ]] && INPUT=Y
 | 
			
		||||
                case "${INPUT}" in
 | 
			
		||||
@@ -1662,66 +1595,12 @@ function change_mirrors_main() {
 | 
			
		||||
 | 
			
		||||
## 升级软件包
 | 
			
		||||
function upgrade_software() {
 | 
			
		||||
    function clean_cache() {
 | 
			
		||||
        ## 交互确认
 | 
			
		||||
        if [[ -z "${CLEAN_CACHE}" ]]; then
 | 
			
		||||
            CLEAN_CACHE="false"
 | 
			
		||||
            if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
                echo ''
 | 
			
		||||
                interactive_select_boolean "${BOLD}是否清理已下载的软件包缓存?${PLAIN}"
 | 
			
		||||
                if [[ "${_SELECT_RESULT}" == "true" ]]; then
 | 
			
		||||
                    CLEAN_CACHE="true"
 | 
			
		||||
                fi
 | 
			
		||||
            else
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 是否清理已下载的软件包缓存? [Y/n] ${PLAIN}")
 | 
			
		||||
                read -rp "${CHOICE}" INPUT
 | 
			
		||||
                [[ -z "${INPUT}" ]] && INPUT=Y
 | 
			
		||||
                case "${INPUT}" in
 | 
			
		||||
                [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
                    CLEAN_CACHE="true"
 | 
			
		||||
                    ;;
 | 
			
		||||
                [Nn] | [Nn][Oo]) ;;
 | 
			
		||||
                *)
 | 
			
		||||
                    echo -e "\n$WARN 输入错误,默认不清理!"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "${CLEAN_CACHE}" == "false" ]]; then
 | 
			
		||||
            return
 | 
			
		||||
        fi
 | 
			
		||||
        ## 调用系统命令
 | 
			
		||||
        case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
        "${SYSTEM_DEBIAN}" | "${SYSTEM_OPENKYLIN}")
 | 
			
		||||
            apt-get autoremove -y >/dev/null 2>&1
 | 
			
		||||
            apt-get clean >/dev/null 2>&1
 | 
			
		||||
            ;;
 | 
			
		||||
        "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
			
		||||
            local package_manager="$(get_package_manager)"
 | 
			
		||||
            $package_manager autoremove -y >/dev/null 2>&1
 | 
			
		||||
            $package_manager clean packages -y >/dev/null 2>&1
 | 
			
		||||
            ;;
 | 
			
		||||
        "${SYSTEM_OPENSUSE}")
 | 
			
		||||
            rm -rf /var/cache/zypp/* >/dev/null 2>&1
 | 
			
		||||
            ;;
 | 
			
		||||
        "${SYSTEM_ALPINE}")
 | 
			
		||||
            rm -rf /var/cache/apk/* >/dev/null 2>&1
 | 
			
		||||
            ;;
 | 
			
		||||
        "${SYSTEM_GENTOO}")
 | 
			
		||||
            eclean-dist --deep >/dev/null 2>&1
 | 
			
		||||
            eclean-packages --deep >/dev/null 2>&1
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
        echo -e "\n$COMPLETE 清理完毕"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ## 跳过特殊系统
 | 
			
		||||
    case "${SYSTEM_JUDGMENT}" in
 | 
			
		||||
    "${SYSTEM_ARCH}")
 | 
			
		||||
        return
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    ## 交互确认
 | 
			
		||||
    if [[ -z "${UPGRADE_SOFTWARE}" ]]; then
 | 
			
		||||
        UPGRADE_SOFTWARE="false"
 | 
			
		||||
@@ -1749,8 +1628,31 @@ function upgrade_software() {
 | 
			
		||||
    if [[ "${UPGRADE_SOFTWARE}" == "false" ]]; then
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -z "${CLEAN_CACHE}" ]]; then
 | 
			
		||||
        CLEAN_CACHE="false"
 | 
			
		||||
        if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
            echo ''
 | 
			
		||||
            interactive_select_boolean "${BOLD}在更新软件包后,是否自动清理下载缓存?${PLAIN}"
 | 
			
		||||
            if [[ "${_SELECT_RESULT}" == "true" ]]; then
 | 
			
		||||
                CLEAN_CACHE="true"
 | 
			
		||||
            fi
 | 
			
		||||
        else
 | 
			
		||||
            local CHOICE=$(echo -e "\n${BOLD}└─ 在更新软件包后,是否自动清理下载缓存? [Y/n] ${PLAIN}")
 | 
			
		||||
            read -rp "${CHOICE}" INPUT
 | 
			
		||||
            [[ -z "${INPUT}" ]] && INPUT=Y
 | 
			
		||||
            case "${INPUT}" in
 | 
			
		||||
            [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
                CLEAN_CACHE="true"
 | 
			
		||||
                ;;
 | 
			
		||||
            [Nn] | [Nn][Oo]) ;;
 | 
			
		||||
            *)
 | 
			
		||||
                echo -e "\n$WARN 输入错误,默认不清理!"
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    ## 调用系统命令
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}" | "${SYSTEM_OPENKYLIN}")
 | 
			
		||||
        apt-get upgrade -y
 | 
			
		||||
@@ -1769,8 +1671,31 @@ function upgrade_software() {
 | 
			
		||||
        emerge --update --deep --with-bdeps=y --ask=n @world
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    ## 清理缓存
 | 
			
		||||
    clean_cache
 | 
			
		||||
    if [[ "${CLEAN_CACHE}" == "false" ]]; then
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}" | "${SYSTEM_OPENKYLIN}")
 | 
			
		||||
        apt-get autoremove -y >/dev/null 2>&1
 | 
			
		||||
        apt-get clean >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
 | 
			
		||||
        local package_manager="$(get_package_manager)"
 | 
			
		||||
        $package_manager autoremove -y >/dev/null 2>&1
 | 
			
		||||
        $package_manager clean packages -y >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_OPENSUSE}")
 | 
			
		||||
        rm -rf /var/cache/zypp/* >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_ALPINE}")
 | 
			
		||||
        rm -rf /var/cache/apk/* >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_GENTOO}")
 | 
			
		||||
        eclean-dist --deep >/dev/null 2>&1
 | 
			
		||||
        eclean-packages --deep >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    echo -e "\n$COMPLETE 清理完毕"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
@@ -2389,15 +2314,21 @@ function change_mirrors_or_install_EPEL() {
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
    ## 安装 EPEL 软件包
 | 
			
		||||
    if [ "${VERIFICATION_EPEL}" -ne 0 ]; then
 | 
			
		||||
    if [ $VERIFICATION_EPEL -ne 0 ]; then
 | 
			
		||||
        echo -e "\n${WORKING} 安装 epel-release 软件包...\n"
 | 
			
		||||
        local package_manager="$(get_package_manager)"
 | 
			
		||||
        $package_manager install -y https://mirrors.cloud.tencent.com/epel/epel-release-latest-${target_version}.noarch.rpm
 | 
			
		||||
        rm -rf $Dir_YumRepos/epel*
 | 
			
		||||
    fi
 | 
			
		||||
    ## 删除原有 repo 源文件
 | 
			
		||||
    [ "${VERIFICATION_EPELFILES}" -eq 0 ] && rm -rf $Dir_YumRepos/epel*
 | 
			
		||||
    [ "${VERIFICATION_EPELBACKUPFILES}" -eq 0 ] && rm -rf $Dir_YumReposBackup/epel*
 | 
			
		||||
    if [ -d $Dir_YumRepos ]; then
 | 
			
		||||
        ls $Dir_YumRepos | grep epel -q
 | 
			
		||||
        [ $? -eq 0 ] && rm -rf $Dir_YumRepos/epel*
 | 
			
		||||
    fi
 | 
			
		||||
    if [ -d $Dir_YumReposBackup ]; then
 | 
			
		||||
        ls $Dir_YumReposBackup | grep epel -q
 | 
			
		||||
        [ $? -eq 0 ] && rm -rf $Dir_YumReposBackup/epel*
 | 
			
		||||
    fi
 | 
			
		||||
    ## 生成 repo 源文件
 | 
			
		||||
    gen_repo_files_EPEL "${SYSTEM_VERSION_NUMBER_MAJOR}"
 | 
			
		||||
    if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then
 | 
			
		||||
 
 | 
			
		||||
@@ -112,20 +112,13 @@ PURPLE='\033[35m'
 | 
			
		||||
AZURE='\033[36m'
 | 
			
		||||
PLAIN='\033[0m'
 | 
			
		||||
BOLD='\033[1m'
 | 
			
		||||
SUCCESS=" \033[1;32m✔${PLAIN}"
 | 
			
		||||
COMPLETE=" \033[1;32m✔${PLAIN}"
 | 
			
		||||
WARN=" \033[1;43m 警告 ${PLAIN}"
 | 
			
		||||
ERROR=" \033[1;31m✘${PLAIN}"
 | 
			
		||||
FAIL=" \033[1;31m✘${PLAIN}"
 | 
			
		||||
TIP=" \033[1;44m 提示 ${PLAIN}"
 | 
			
		||||
WORKING=" \033[1;36m>_${PLAIN}"
 | 
			
		||||
# SUCCESS="[\033[1;32m成功${PLAIN}]"
 | 
			
		||||
# COMPLETE="[\033[1;32m完成${PLAIN}]"
 | 
			
		||||
# WARN="[\033[1;5;33m注意${PLAIN}]"
 | 
			
		||||
# ERROR="[\033[1;31m错误${PLAIN}]"
 | 
			
		||||
# FAIL="[\033[1;31m失败${PLAIN}]"
 | 
			
		||||
# TIP="[\033[1;32m提示${PLAIN}]"
 | 
			
		||||
# WORKING="[\033[1;36m >_ ${PLAIN}]"
 | 
			
		||||
SUCCESS="\033[1;32m✔${PLAIN}"
 | 
			
		||||
COMPLETE="\033[1;32m✔${PLAIN}"
 | 
			
		||||
WARN="\033[1;43m 警告 ${PLAIN}"
 | 
			
		||||
ERROR="\033[1;31m✘${PLAIN}"
 | 
			
		||||
FAIL="\033[1;31m✘${PLAIN}"
 | 
			
		||||
TIP="\033[1;44m 提示 ${PLAIN}"
 | 
			
		||||
WORKING="\033[1;36m>_${PLAIN}"
 | 
			
		||||
 | 
			
		||||
function main() {
 | 
			
		||||
    permission_judgment
 | 
			
		||||
@@ -147,12 +140,13 @@ function handle_command_options() {
 | 
			
		||||
        echo -e "
 | 
			
		||||
命令选项(名称/含义/值):
 | 
			
		||||
 | 
			
		||||
  --source                 指定 Docker CE 源地址                     地址
 | 
			
		||||
  --source-registry        指定 Docker Registry 源地址               地址
 | 
			
		||||
  --codename               指定 Debian 系操作系统的版本代号          代号名称
 | 
			
		||||
  --install-latest         是否安装最新版本的 Docker Engine          true 或 false
 | 
			
		||||
  --clean-screen           是否在运行前清除屏幕上的所有内容          true 或 false
 | 
			
		||||
  --ignore-backup-tips     忽略覆盖备份提示                          无
 | 
			
		||||
  --source                 指定 Docker CE 源地址                地址
 | 
			
		||||
  --source-registry        指定 Docker Registry 源地址          地址
 | 
			
		||||
  --codename               指定 Debian 系操作系统的版本代号     代号名称
 | 
			
		||||
  --install-latest         是否安装最新版本的 Docker Engine     true 或 false
 | 
			
		||||
  --close-firewall         是否关闭防火墙                       true 或 false
 | 
			
		||||
  --clean-screen           是否在运行前清除屏幕上的所有内容     true 或 false
 | 
			
		||||
  --ignore-backup-tips     忽略覆盖备份提示                     无
 | 
			
		||||
 | 
			
		||||
问题报告 https://github.com/SuperManito/LinuxMirrors/issues
 | 
			
		||||
  "
 | 
			
		||||
@@ -218,6 +212,22 @@ function handle_command_options() {
 | 
			
		||||
        --ignore-backup-tips)
 | 
			
		||||
            IGNORE_BACKUP_TIPS="true"
 | 
			
		||||
            ;;
 | 
			
		||||
        ## 关闭防火墙
 | 
			
		||||
        --close-firewall)
 | 
			
		||||
            if [ "$2" ]; then
 | 
			
		||||
                case "$2" in
 | 
			
		||||
                [Tt]rue | [Ff]alse)
 | 
			
		||||
                    CLOSE_FIREWALL="${2,,}"
 | 
			
		||||
                    shift
 | 
			
		||||
                    ;;
 | 
			
		||||
                *)
 | 
			
		||||
                    output_error "命令选项 ${BLUE}$2${PLAIN} 无效,请在该选项后指定 true 或 false !"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            else
 | 
			
		||||
                output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定 true 或 false !"
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
        ## 清除屏幕上的所有内容
 | 
			
		||||
        --clean-screen)
 | 
			
		||||
            if [ "$2" ]; then
 | 
			
		||||
@@ -255,16 +265,16 @@ function run_start() {
 | 
			
		||||
    elif [ "${CLEAN_SCREEN}" == "true" ]; then
 | 
			
		||||
        clear
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e ' +-----------------------------------+'
 | 
			
		||||
    echo -e " | \033[0;1;35;95m⡇\033[0m  \033[0;1;33;93m⠄\033[0m \033[0;1;32;92m⣀⡀\033[0m \033[0;1;36;96m⡀\033[0;1;34;94m⢀\033[0m \033[0;1;35;95m⡀⢀\033[0m \033[0;1;31;91m⡷\033[0;1;33;93m⢾\033[0m \033[0;1;32;92m⠄\033[0m \033[0;1;36;96m⡀⣀\033[0m \033[0;1;34;94m⡀\033[0;1;35;95m⣀\033[0m \033[0;1;31;91m⢀⡀\033[0m \033[0;1;33;93m⡀\033[0;1;32;92m⣀\033[0m \033[0;1;36;96m⢀⣀\033[0m |"
 | 
			
		||||
    echo -e " | \033[0;1;31;91m⠧\033[0;1;33;93m⠤\033[0m \033[0;1;32;92m⠇\033[0m \033[0;1;36;96m⠇⠸\033[0m \033[0;1;34;94m⠣\033[0;1;35;95m⠼\033[0m \033[0;1;31;91m⠜⠣\033[0m \033[0;1;33;93m⠇\033[0;1;32;92m⠸\033[0m \033[0;1;36;96m⠇\033[0m \033[0;1;34;94m⠏\033[0m  \033[0;1;35;95m⠏\033[0m  \033[0;1;33;93m⠣⠜\033[0m \033[0;1;32;92m⠏\033[0m  \033[0;1;34;94m⠭⠕\033[0m |"
 | 
			
		||||
    echo -e ' +-----------------------------------+'
 | 
			
		||||
    echo -e ' 欢迎使用 Docker Engine 安装与换源脚本'
 | 
			
		||||
    echo -e '+-----------------------------------+'
 | 
			
		||||
    echo -e "| \033[0;1;35;95m⡇\033[0m  \033[0;1;33;93m⠄\033[0m \033[0;1;32;92m⣀⡀\033[0m \033[0;1;36;96m⡀\033[0;1;34;94m⢀\033[0m \033[0;1;35;95m⡀⢀\033[0m \033[0;1;31;91m⡷\033[0;1;33;93m⢾\033[0m \033[0;1;32;92m⠄\033[0m \033[0;1;36;96m⡀⣀\033[0m \033[0;1;34;94m⡀\033[0;1;35;95m⣀\033[0m \033[0;1;31;91m⢀⡀\033[0m \033[0;1;33;93m⡀\033[0;1;32;92m⣀\033[0m \033[0;1;36;96m⢀⣀\033[0m |"
 | 
			
		||||
    echo -e "| \033[0;1;31;91m⠧\033[0;1;33;93m⠤\033[0m \033[0;1;32;92m⠇\033[0m \033[0;1;36;96m⠇⠸\033[0m \033[0;1;34;94m⠣\033[0;1;35;95m⠼\033[0m \033[0;1;31;91m⠜⠣\033[0m \033[0;1;33;93m⠇\033[0;1;32;92m⠸\033[0m \033[0;1;36;96m⠇\033[0m \033[0;1;34;94m⠏\033[0m  \033[0;1;35;95m⠏\033[0m  \033[0;1;33;93m⠣⠜\033[0m \033[0;1;32;92m⠏\033[0m  \033[0;1;34;94m⠭⠕\033[0m |"
 | 
			
		||||
    echo -e '+-----------------------------------+'
 | 
			
		||||
    echo -e '欢迎使用 Docker Engine 安装与换源脚本'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 运行结束
 | 
			
		||||
function run_end() {
 | 
			
		||||
    echo -e "\n ✨️ \033[1;34mPowered by https://linuxmirrors.cn\033[0m\n"
 | 
			
		||||
    echo -e "\n✨️ \033[1;34mPowered by https://linuxmirrors.cn\033[0m\n"
 | 
			
		||||
    # echo -e "\n     ------ 脚本运行结束 ------"
 | 
			
		||||
    # echo -e ' \033[0;1;35;95m┌─\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m──\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m──\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m┐\033[0m'
 | 
			
		||||
    # echo -e ' \033[0;1;31;91m│▞\033[0;1;33;93m▀▖\033[0m            \033[0;1;32;92m▙▗\033[0;1;36;96m▌\033[0m      \033[0;1;31;91m▗\033[0;1;33;93m▐\033[0m     \033[0;1;34;94m│\033[0m'
 | 
			
		||||
@@ -469,7 +479,7 @@ function choose_mirrors() {
 | 
			
		||||
                for ((j = 1; j <= ${tmp_spaces_nums}; j++)); do
 | 
			
		||||
                    tmp_mirror_name="${tmp_mirror_name} "
 | 
			
		||||
                done
 | 
			
		||||
                printf " ❖  %-$(($default_mirror_name_length + ${tmp_mirror_name_length}))s %4s\n" "${tmp_mirror_name}" "$arr_num)"
 | 
			
		||||
                printf "❖  %-$(($default_mirror_name_length + ${tmp_mirror_name_length}))s %4s\n" "${tmp_mirror_name}" "$arr_num)"
 | 
			
		||||
            done
 | 
			
		||||
        else
 | 
			
		||||
            for ((i = 0; i < ${#list_arr[@]}; i++)); do
 | 
			
		||||
@@ -489,8 +499,8 @@ function choose_mirrors() {
 | 
			
		||||
        timezone="$(timedatectl status 2>/dev/null | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')"
 | 
			
		||||
 | 
			
		||||
        echo -e ''
 | 
			
		||||
        echo -e " 运行环境 ${BLUE}${system_name} ${arch}${PLAIN}"
 | 
			
		||||
        echo -e " 系统时间 ${BLUE}${date_time} ${timezone}${PLAIN}"
 | 
			
		||||
        echo -e "运行环境 ${BLUE}${system_name} ${arch}${PLAIN}"
 | 
			
		||||
        echo -e "系统时间 ${BLUE}${date_time} ${timezone}${PLAIN}"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    print_title
 | 
			
		||||
@@ -534,7 +544,7 @@ function choose_mirrors() {
 | 
			
		||||
        if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
            eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想使用的 Docker CE 源:\${PLAIN}\\n\""
 | 
			
		||||
            SOURCE="${_SELECT_RESULT#*@}"
 | 
			
		||||
            echo -e "\n ${GREEN}➜${PLAIN}  ${BOLD}${_SELECT_RESULT%@*}${PLAIN}"
 | 
			
		||||
            echo -e "\n${GREEN}➜${PLAIN}  ${BOLD}${_SELECT_RESULT%@*}${PLAIN}"
 | 
			
		||||
        else
 | 
			
		||||
            print_mirrors_list "${mirror_list_name}" 38
 | 
			
		||||
            local CHOICE_B=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker CE 源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}")
 | 
			
		||||
@@ -563,7 +573,7 @@ function choose_mirrors() {
 | 
			
		||||
        if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
            eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想使用的 Docker Registry 源:\${PLAIN}\\n\""
 | 
			
		||||
            SOURCE_REGISTRY="${_SELECT_RESULT#*@}"
 | 
			
		||||
            echo -e "\n ${GREEN}➜${PLAIN}  Docker Registry:${BOLD}${_SELECT_RESULT%@*}${PLAIN}"
 | 
			
		||||
            echo -e "\n${GREEN}➜${PLAIN}  Docker Registry:${BOLD}${_SELECT_RESULT%@*}${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}")
 | 
			
		||||
@@ -597,12 +607,12 @@ function close_firewall_service() {
 | 
			
		||||
        if [[ -z "${CLOSE_FIREWALL}" ]]; then
 | 
			
		||||
            if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
 | 
			
		||||
                echo ''
 | 
			
		||||
                interactive_select_boolean "${BOLD}是否关闭防火墙和 SELinux ?${PLAIN}"
 | 
			
		||||
                interactive_select_boolean "${BOLD}是否关闭系统防火墙和 SELinux ?${PLAIN}"
 | 
			
		||||
                if [[ "${_SELECT_RESULT}" == "true" ]]; then
 | 
			
		||||
                    CLOSE_FIREWALL="true"
 | 
			
		||||
                fi
 | 
			
		||||
            else
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 是否关闭防火墙和 SELinux ? [Y/n] ${PLAIN}")
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 是否关闭系统防火墙和 SELinux ? [Y/n] ${PLAIN}")
 | 
			
		||||
                read -rp "${CHOICE}" INPUT
 | 
			
		||||
                [[ -z "${INPUT}" ]] && INPUT=Y
 | 
			
		||||
                case "${INPUT}" in
 | 
			
		||||
 
 | 
			
		||||
@@ -80,6 +80,7 @@ hide:
 | 
			
		||||
| `--source-registry` | 指定镜像仓库地址(域名或IP) | 地址 |
 | 
			
		||||
| `--codename` | 指定 Debian 系操作系统的版本代号 | 代号名称 |
 | 
			
		||||
| `--install-latest` | 是否安装最新版本的 Docker Engine | `true` 或 `false` |
 | 
			
		||||
| `--close-firewall` | 是否关闭防火墙 | `true` 或 `false` |
 | 
			
		||||
| `--clean-screen` | 是否在运行前清除屏幕上的所有内容 | `true` 或 `false` |
 | 
			
		||||
| `--ignore-backup-tips` | 忽略覆盖备份提示(即不覆盖备份) | 无 |
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -118,9 +118,11 @@ hide:
 | 
			
		||||
 | 
			
		||||
        !!! quote ""
 | 
			
		||||
 | 
			
		||||
            此报错是因为系统没有预装 `curl` 软件包,下面是安装命令
 | 
			
		||||
 | 
			
		||||
            === "Debian 系 / openKylin"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                apt-get install -y curl
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
@@ -130,7 +132,7 @@ hide:
 | 
			
		||||
 | 
			
		||||
            === "RedHat 系 / OpenCloudOS / openEuler / Anolis OS"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                dnf install -y curl || yum install -y curl
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
@@ -138,28 +140,48 @@ hide:
 | 
			
		||||
 | 
			
		||||
            === "openSUSE"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                zypper install curl
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            === "Arch Linux"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                pacman -S curl
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            === "Alpine Linux"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                apk --no-cache add -f curl bash
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            === "Gentoo"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                emerge --ask curl
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            ??? tip "安装不上?(点击展开查看其它解决方法)"
 | 
			
		||||
 | 
			
		||||
                假如有这么一种情况:系统原有软件源是坏的安装不上 `curl` 软件包,那么对于 Linux 初学者来说可能会比较麻烦,这里提供两个在线获取脚本的应急方法,否则就只能手动复制粘贴源代码了
 | 
			
		||||
 | 
			
		||||
                === "使用 Python 下载脚本"
 | 
			
		||||
 | 
			
		||||
                    适用于大部分操作系统(`Alpine Linux` 除外),`python3` 要是不存在那就再试试 `python` 指令
 | 
			
		||||
                    ``` bash
 | 
			
		||||
                    python3 -c "import urllib.request; urllib.request.urlretrieve('https://linuxmirrors.cn/main.sh', 'linuxmirrors-main.sh')"
 | 
			
		||||
                    ```
 | 
			
		||||
 | 
			
		||||
                === "使用 wget 下载脚本"
 | 
			
		||||
 | 
			
		||||
                    一般没有预装 `curl` 软件包的系统也不会预装 `wget` 软件包,所以大概率这个方法应该是不行的
 | 
			
		||||
                    ``` bash
 | 
			
		||||
                    wget -O linuxmirrors-main.sh https://linuxmirrors.cn/main.sh
 | 
			
		||||
                    ```
 | 
			
		||||
 | 
			
		||||
                之后再执行 `bash linuxmirrors-main.sh` 即可
 | 
			
		||||
 | 
			
		||||
    - #### 关于开启 SSH 远程登录的方法
 | 
			
		||||
 | 
			
		||||
        !!! quote ""
 | 
			
		||||
@@ -197,7 +219,7 @@ hide:
 | 
			
		||||
 | 
			
		||||
            === "Debian 系 / openKylin"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                cp -rf /etc/apt/sources.list.bak /etc/apt/sources.list
 | 
			
		||||
                apt-get update
 | 
			
		||||
                ```
 | 
			
		||||
@@ -206,7 +228,7 @@ hide:
 | 
			
		||||
 | 
			
		||||
            === "RedHat 系 / OpenCloudOS / openEuler / Anolis OS"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                cp -rf /etc/yum.repos.d.bak /etc/yum.repos.d
 | 
			
		||||
                yum makecache
 | 
			
		||||
                ```
 | 
			
		||||
@@ -215,28 +237,28 @@ hide:
 | 
			
		||||
 | 
			
		||||
            === "openSUSE"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                cp -rf /etc/zypp/repos.d.bak /etc/zypp/repos.d
 | 
			
		||||
                zypper ref
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            === "Arch Linux"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                cp -rf /etc/pacman.d/mirrorlist.bak /etc/pacman.d/mirrorlist
 | 
			
		||||
                pacman -Sy
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            === "Alpine Linux"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                cp -rf /etc/apk/repositories.bak /etc/apk/repositories
 | 
			
		||||
                apk update -f
 | 
			
		||||
                ```
 | 
			
		||||
 | 
			
		||||
            === "Gentoo"
 | 
			
		||||
 | 
			
		||||
                ``` sh
 | 
			
		||||
                ``` bash
 | 
			
		||||
                cp -rf /etc/portage/make.conf.bak /etc/portage/make.conf
 | 
			
		||||
                [ -d /etc/portage/repos.conf ] && cp -rf /etc/portage/repos.conf/gentoo.conf.bak /etc/portage/repos.conf/gentoo.conf
 | 
			
		||||
                emerge --sync --quiet
 | 
			
		||||
@@ -300,7 +322,6 @@ hide:
 | 
			
		||||
| `--use-intranet-source` | 是否优先使用内网软件源地址 | `true` 或 `false` |
 | 
			
		||||
| `--use-official-source` | 是否使用目标操作系统的官方软件源 | `true` 或 `false` |
 | 
			
		||||
| `--install-epel` | 是否安装 EPEL 附加软件包 | `true` 或 `false` |
 | 
			
		||||
| `--close-firewall` | 是否关闭防火墙 | `true` 或 `false` |
 | 
			
		||||
| `--backup` | 是否备份原有软件源 | `true` 或 `false` |
 | 
			
		||||
| `--upgrade-software` | 是否更新软件包 | `true` 或 `false` |
 | 
			
		||||
| `--clean-cache` | 是否清理下载缓存 | `true` 或 `false` |
 | 
			
		||||
@@ -461,7 +482,7 @@ hide:
 | 
			
		||||
5.  如果你想要缩减脚本体积那么可以删除一些不必要的内容,除了上面提到的软件源列表还有一些涉及脚本工作的部分模块内容,具体如下:
 | 
			
		||||
    1. 首先在删除内容时应尽可能保留脚本原始结构,直接把涉及函数中的内容删除即可,使其保留为空函数
 | 
			
		||||
    2. 可以删除一些不使用(操作系统)的软件源原始内容 `gen_repo_files_xxx`,这些内容占据了脚本 `60%` 以上的体积
 | 
			
		||||
    3. 如果你不使用某些功能那么可以删除对应功能模块函数中的内容,`命令选项 handle_command_options`、`关闭防火墙 close_firewall_service`、`备份原有软件源 backup_original_mirrors`、`更新软件包 upgrade_software`
 | 
			
		||||
    3. 如果你不使用某些功能那么可以删除对应功能模块函数中的内容,`命令选项 handle_command_options`、`备份原有软件源 backup_original_mirrors`、`更新软件包 upgrade_software`
 | 
			
		||||
6.  脚本主要功能配置是由统一的变量控制的,命令选项亦是如此,这些全局变量由全大写字母构成并遵循下划线命名法,具体变量详见如下表格,你只需要将这些变量声明在脚本头部(预留注释区域)即可快速完成定制
 | 
			
		||||
 | 
			
		||||
| 变量名 | 含义 | 值类型 |
 | 
			
		||||
@@ -484,7 +505,6 @@ hide:
 | 
			
		||||
| `WEB_PROTOCOL` | 指定 WEB 协议 | `http` 或 `https` |
 | 
			
		||||
| `INSTALL_EPEL` | 是否安装 EPEL 附加软件包 | `true` 或 `false` |
 | 
			
		||||
| `ONLY_EPEL` | 仅更换 EPEL 软件源模式 | `true` 或 `false` |
 | 
			
		||||
| `CLOSE_FIREWALL` | 是否关闭防火墙 | `true` 或 `false` |
 | 
			
		||||
| `BACKUP` | 是否备份原有软件源 | `true` 或 `false` |
 | 
			
		||||
| `IGNORE_BACKUP_TIPS` | 忽略覆盖备份提示(即不覆盖备份) | `true` 或 `false` |
 | 
			
		||||
| `UPGRADE_SOFTWARE` | 是否更新软件包 | `true` 或 `false` |
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user