From 23fffa720d328eb8639d1b7450d0b0c71b26d056 Mon Sep 17 00:00:00 2001 From: SuperManito <68613938+SuperManito@users.noreply.github.com> Date: Sun, 7 May 2023 23:34:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=93=E5=8D=B0=E6=BA=90?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BF=AE=E6=94=B9=E5=89=8D=E5=90=8E=E5=B7=AE?= =?UTF-8?q?=E5=BC=82=E5=91=BD=E4=BB=A4=E9=80=89=E9=A1=B9=20&&=20=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-docs.yml | 1 + ChangeMirrors.sh | 153 +++++++- MirrorZ.sh | 654 +++++++++++-------------------- docs/use/command-options.md | 1 + docs/use/index.md | 3 +- 5 files changed, 385 insertions(+), 427 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 67ae9eb..452877e 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -22,5 +22,6 @@ jobs: mkdocs-material- - run: pip install mkdocs-material mkdocs-glightbox - run: cp -rvf ./ChangeMirrors.sh ./docs/main.sh + - run: cp -rvf ./MirrorZ.sh ./docs/edu.sh - run: cp -rvf ./DockerInstallation.sh ./docs/docker.sh - run: mkdocs gh-deploy --force diff --git a/ChangeMirrors.sh b/ChangeMirrors.sh index edae965..3d6ccb2 100644 --- a/ChangeMirrors.sh +++ b/ChangeMirrors.sh @@ -216,22 +216,39 @@ function CheckCommandOptions() { esac ;; "${SYSTEM_OPENEULER}") + if [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then + Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!" + fi + if [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then + Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!" + fi if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" fi ;; "${SYSTEM_OPENSUSE}") + if [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then + Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!" + fi + if [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then + Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!" + fi if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" fi ;; "${SYSTEM_ARCH}") + if [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then + Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!" + fi + if [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then + Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!" + fi if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" fi ;; esac - } ## 系统判定变量 @@ -256,7 +273,7 @@ function EnvJudgment() { elif [[ "${SYSTEM_NAME}" == *"openSUSE"* ]]; then SYSTEM_FACTIONS="${SYSTEM_OPENSUSE}" else - Output_Error "无法判断当前运行环境,请先确认本脚本是否已经适配当前操作系统" + Output_Error "无法判断当前运行环境,当前系统不在本脚本的支持范围内" fi ## 判定系统名称、版本、版本号 case "${SYSTEM_FACTIONS}" in @@ -264,7 +281,7 @@ function EnvJudgment() { if [ ! -x /usr/bin/lsb_release ]; then apt-get install -y lsb-release if [ $? -ne 0 ]; then - Output_Error "lsb-release 软件包安装失败\n本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!" + Output_Error "lsb-release 软件包安装失败\n 本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!" fi fi SYSTEM_JUDGMENT="$(lsb_release -is)" @@ -289,6 +306,59 @@ function EnvJudgment() { SYSTEM_JUDGMENT="${SYSTEM_ARCH}" ;; esac + ## 判断系统是否在脚本支持范围内 + case "${SYSTEM_JUDGMENT}" in + "${SYSTEM_DEBIAN}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [8-9] && "${SYSTEM_VERSION_NUMBER:0:2}" != 1[0-2] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_UBUNTU}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 1[4-9] && "${SYSTEM_VERSION_NUMBER:0:2}" != 2[0-3] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_RHEL}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [7-9] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_CENTOS}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [7-8] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [8-9] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_FEDORA}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 3[0-8] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_OPENEULER}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 2[1-3] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_OPENSUSE}") + if [[ "${SYSTEM_ID}" != "opensuse-leap" && "${SYSTEM_ID}" != "opensuse-tumbleweed" ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + else + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 15 ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + fi + ;; + "${SYSTEM_KALI}" | "${SYSTEM_ARCH}") + # 理论全部支持 + ;; + *) + Output_Error "当前系统不在本脚本的支持范围内" + ;; + esac ## 判定系统处理器架构 case "$(uname -m)" in x86_64) @@ -612,6 +682,7 @@ function CloseFirewall() { ## 备份原有软件源 function BackupOriginMirrors() { + BACKUPED="false" if [[ "${BACKUP}" == "true" ]]; then local VERIFICATION_FILES=1 local VERIFICATION_BACKUPFILES=1 @@ -665,6 +736,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $File_DebianSourceList $File_DebianSourceListBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -674,6 +746,7 @@ function BackupOriginMirrors() { else echo '' cp -rvf $File_DebianSourceList $File_DebianSourceListBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 list 源文件" sleep 1s fi @@ -694,6 +767,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_DebianExtendSource/* $Dir_DebianExtendSourceBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -704,6 +778,7 @@ function BackupOriginMirrors() { [ ! -d $Dir_DebianExtendSourceBackup ] && mkdir -p $Dir_DebianExtendSourceBackup echo '' cp -rvf $Dir_DebianExtendSource/* $Dir_DebianExtendSourceBackup 2>&1 + BACKUPED="true" echo -e "$COMPLETE 已备份原有 list 扩展源文件" sleep 1s fi @@ -722,6 +797,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_RedHatRepos/* $Dir_RedHatReposBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -731,7 +807,8 @@ function BackupOriginMirrors() { else [ ! -d $Dir_RedHatReposBackup ] && mkdir -p $Dir_RedHatReposBackup echo '' - cp -vrf $Dir_RedHatRepos/* $Dir_RedHatReposBackup 2>&1 + cp -rvf $Dir_RedHatRepos/* $Dir_RedHatReposBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 repo 源文件" sleep 1s fi @@ -752,6 +829,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_openEulerRepos/* $Dir_openEulerReposBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -761,7 +839,8 @@ function BackupOriginMirrors() { else [ ! -d $Dir_openEulerReposBackup ] && mkdir -p $Dir_openEulerReposBackup echo '' - cp -vrf $Dir_openEulerRepos/* $Dir_openEulerReposBackup 2>&1 + cp -rvf $Dir_openEulerRepos/* $Dir_openEulerReposBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 repo 源文件" sleep 1s fi @@ -782,6 +861,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_openSUSERepos/* $Dir_openSUSEReposBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -791,7 +871,8 @@ function BackupOriginMirrors() { else [ ! -d $Dir_openSUSEReposBackup ] && mkdir -p $Dir_openSUSEReposBackup echo '' - cp -vrf $Dir_openSUSERepos/* $Dir_openSUSEReposBackup 2>&1 + cp -rvf $Dir_openSUSERepos/* $Dir_openSUSEReposBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 repo 源文件" sleep 1s fi @@ -812,6 +893,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $File_ArchMirrorList $File_ArchMirrorListBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -821,6 +903,7 @@ function BackupOriginMirrors() { else echo '' cp -rvf $File_ArchMirrorList $File_ArchMirrorListBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有软件源文件" sleep 1s fi @@ -872,6 +955,57 @@ function RemoveOriginMirrors() { ## 换源 function ChangeMirrors() { + ## 打印修改前后差异 + function PrintDiff() { + ## Debian/Arch 比较模式 + function DiffMode1() { + local backup_file=$1 + local origin_file=$2 + if [[ -s $backup_file && -s $origin_file ]]; then + if [[ "$(cat $backup_file)" != "$(cat $origin_file)" ]]; then + echo -e "\n${BLUE}${backup_file}${PLAIN} -> ${BLUE}${origin_file}${PLAIN}" + diff $backup_file $origin_file -d --color=always -I -B -E + fi + fi + } + ## RedHat/openEuler/openSUSE 比较模式 + function DiffMode2() { + local backup_dir=$1 + local origin_dir=$2 + local backup_file origin_file + for item in $(ls $backup_dir | xargs); do + backup_file="$backup_dir/$item" + origin_file="$origin_dir/$item" + if [[ "$(cat $backup_file)" != "$(cat $origin_file)" ]]; then + echo -e "\n${BLUE}${backup_file}${PLAIN} -> ${BLUE}${origin_file}${PLAIN}" + diff $backup_file $origin_file -d --color=always -I -B -E + fi + done + } + + if [[ "${PRINT_DIFF}" == "true" ]]; then + if [[ -x /usr/bin/diff && "${BACKUPED}" == "true" ]]; then + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + DiffMode1 $File_DebianSourceListBackup $File_DebianSourceList + ;; + "${SYSTEM_REDHAT}") + DiffMode2 $Dir_RedHatReposBackup $Dir_RedHatRepos + ;; + "${SYSTEM_OPENEULER}") + DiffMode2 $Dir_openEulerReposBackup $Dir_openEulerRepos + ;; + "${SYSTEM_OPENSUSE}") + DiffMode2 $Dir_openSUSEReposBackup $Dir_openSUSERepos + ;; + "${SYSTEM_ARCH}") + DiffMode1 $File_ArchMirrorListBackup $File_ArchMirrorList + ;; + esac + fi + fi + } + case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") DebianMirrors @@ -889,6 +1023,7 @@ function ChangeMirrors() { ArchMirrors ;; esac + PrintDiff echo -e "\n${WORKING} 开始${SYNC_TXT}软件源...\n" case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") @@ -4487,6 +4622,7 @@ function CommandOptions() { --ignore-backup-tips 忽略覆盖备份提示 无 --updata-software 更新软件包 true 或 false --clean-cache 清理下载缓存 true 或 false + --print-diff 打印源文件修改前后差异 无 问题报告 https://github.com/SuperManito/LinuxMirrors/issues " @@ -4684,6 +4820,10 @@ function CommandOptions() { Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; + ## 打印源文件修改前后差异 + --print-diff) + PRINT_DIFF="true" + ;; --help) Output_Help_Info exit @@ -4698,6 +4838,7 @@ function CommandOptions() { ONLY_EPEL="${ONLY_EPEL:-"false"}" BACKUP="${BACKUP:-"true"}" IGNORE_BACKUP_TIPS="${IGNORE_BACKUP_TIPS:-"false"}" + PRINT_DIFF="${PRINT_DIFF:-"false"}" } ## 组合函数 diff --git a/MirrorZ.sh b/MirrorZ.sh index 38d7e5e..6d6b986 100644 --- a/MirrorZ.sh +++ b/MirrorZ.sh @@ -1,7 +1,10 @@ #!/bin/bash ## Author: SuperManito ## Modified: 2023-05-07 -## 中国教育网专用 +## License: MIT +## Github: https://github.com/SuperManito/LinuxMirrors +## Website: https://linuxmirrors.cn +## 中国大陆教育网专用、校园网联合镜像站定制版 ## 指定软件源地址和分支(字符串) SOURCE="" @@ -14,13 +17,12 @@ SOURCE_VAULT="" SOURCE_BRANCH_VAULT="" ## WEB 协议(http/https) WEB_PROTOCOL="" -## 安装 EPEL 附加软件包(true/false) -ONLY_EPEL="" -INSTALL_EPEL="" ## 备份原有软件源(true/false) -BACKUP="" +BACKUP="true" ## 忽略覆盖备份提示(true/false) -IGNORE_BACKUP_TIPS="" +IGNORE_BACKUP_TIPS="false" +## 打印源文件修改前后差异(true/false) +PRINT_DIFF="true" ## 软件源列表 mirror_list_default=( @@ -92,10 +94,10 @@ YELLOW='\033[33m' BLUE='\033[34m' PLAIN='\033[0m' BOLD='\033[1m' -SUCCESS='[\033[32mOK\033[0m]' -COMPLETE='[\033[32mDONE\033[0m]' -WARN='[\033[33mWARN\033[0m]' -ERROR='[\033[31mERROR\033[0m]' +SUCCESS='[\033[32m成功\033[0m]' +COMPLETE='[\033[32m完成\033[0m]' +WARN='[\033[33m警告\033[0m]' +ERROR='[\033[31m错误\033[0m]' WORKING='[\033[34m*\033[0m]' function StartTitle() { @@ -116,6 +118,70 @@ function PermissionJudgment() { fi } +## 换源前用户确认 +function UserConfirm() { + local TargetFiles i + ## Debian/Arch 获取模式 + function GetFileMode1() { + local file_tmp="$1" + [ -s "${file_tmp}" ] && TargetFiles="${file_tmp}" + } + ## RedHat/openEuler/openSUSE 获取模式 + function GetFileMode2() { + local dir_tmp="$1" + ls $dir_tmp | grep -Ev "epel|docker" | grep '\.repo$' -q + if [ $? -eq 0 ]; then + local tmp_arr=( + $(ls $dir_tmp | grep -Ev "epel|docker" | grep '\.repo$') + ) + for ((i = 0; i < ${#tmp_arr[@]}; i++)); do + if [[ "${TargetFiles}" ]]; then + TargetFiles="$TargetFiles\n$dir_tmp/${tmp_arr[$i]}" + else + TargetFiles="$dir_tmp/${tmp_arr[$i]}" + fi + done + fi + } + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + GetFileMode1 $File_DebianSourceList + ;; + "${SYSTEM_REDHAT}") + GetFileMode2 $Dir_RedHatRepos + ;; + "${SYSTEM_OPENEULER}") + GetFileMode2 $Dir_openEulerRepos + ;; + "${SYSTEM_OPENSUSE}") + GetFileMode2 $Dir_openSUSERepos + ;; + "${SYSTEM_ARCH}") + GetFileMode1 $File_ArchMirrorList + ;; + esac + if [[ ! -z "${TargetFiles}" ]]; then + echo -e "\n$WARN 在此之前,本脚本没有对你的系统进行任何更改,接下来可能会修改下列提到的文件\n" + echo -e "${BLUE}${TargetFiles}${PLAIN}" + echo -e "\n如果你想中断本脚本的运行请输入 \"${BLUE}n${PLAIN}\" 或直接键入 ${BLUE}Ctrl + C${PLAIN},否则请在接下来的提示中输入 \"${GREEN}Y${PLAIN}\" 以开始进行换源操作" + local CHOICE=$(echo -e "\n${BOLD}└─ 请阅读上方提示并选择是否允许本脚本修改系统文件 [Y/n]:${PLAIN}") + while true; do + read -p "${CHOICE}" INPUT + case "${INPUT}" in + [Yy] | [Yy][Ee][Ss]) + break + ;; + [Nn] | [Nn][Oo]) + exit + ;; + *) + echo -e "\n$WARN 请输入 \"${BLUE}Y${PLAIN}\" 或 \"${BLUE}n${PLAIN}\" !" + ;; + esac + done + fi +} + ## 命令选项兼容性判断 function CheckCommandOptions() { case "${SYSTEM_FACTIONS}" in @@ -125,9 +191,6 @@ function CheckCommandOptions() { Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!" fi fi - if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then - Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" - fi ;; "${SYSTEM_REDHAT}") if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_CENTOS}" && "${SYSTEM_JUDGMENT}" != "${SYSTEM_RHEL}" ]]; then @@ -135,31 +198,16 @@ function CheckCommandOptions() { Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!" fi fi - case "${SYSTEM_JUDGMENT}" in - "${SYSTEM_FEDORA}") - if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then - Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" - fi - ;; - esac ;; - "${SYSTEM_OPENEULER}") - if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then - Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" + "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENSUSE}" | "${SYSTEM_ARCH}") + if [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then + Output_Error "当前系统不支持使用 debian-security 仓库故无法使用相关参数,请确认后重试!" fi - ;; - "${SYSTEM_OPENSUSE}") - if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then - Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" - fi - ;; - "${SYSTEM_ARCH}") - if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then - Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!" + if [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then + Output_Error "当前系统不支持使用 centos-vault 仓库故无法使用相关参数,请确认后重试!" fi ;; esac - } ## 系统判定变量 @@ -184,7 +232,7 @@ function EnvJudgment() { elif [[ "${SYSTEM_NAME}" == *"openSUSE"* ]]; then SYSTEM_FACTIONS="${SYSTEM_OPENSUSE}" else - Output_Error "无法判断当前运行环境,请先确认本脚本是否已经适配当前操作系统" + Output_Error "无法判断当前运行环境,当前系统不在本脚本的支持范围内" fi ## 判定系统名称、版本、版本号 case "${SYSTEM_FACTIONS}" in @@ -192,7 +240,7 @@ function EnvJudgment() { if [ ! -x /usr/bin/lsb_release ]; then apt-get install -y lsb-release if [ $? -ne 0 ]; then - Output_Error "lsb-release 软件包安装失败\n本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!" + Output_Error "lsb-release 软件包安装失败\n 本脚本需要通过 lsb_release 指令判断系统类型,当前可能为精简安装的系统,因为正常情况下系统会自带该软件包,请自行安装后重新执行脚本!" fi fi SYSTEM_JUDGMENT="$(lsb_release -is)" @@ -217,6 +265,59 @@ function EnvJudgment() { SYSTEM_JUDGMENT="${SYSTEM_ARCH}" ;; esac + ## 判断系统是否在脚本支持范围内 + case "${SYSTEM_JUDGMENT}" in + "${SYSTEM_DEBIAN}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [8-9] && "${SYSTEM_VERSION_NUMBER:0:2}" != 1[0-2] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_UBUNTU}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 1[4-9] && "${SYSTEM_VERSION_NUMBER:0:2}" != 2[0-3] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_RHEL}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [7-9] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_CENTOS}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [7-8] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}") + if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [8-9] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_FEDORA}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 3[0-8] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_OPENEULER}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 2[1-3] ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_OPENSUSE}") + if [[ "${SYSTEM_ID}" != "opensuse-leap" && "${SYSTEM_ID}" != "opensuse-tumbleweed" ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + else + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 15 ]]; then + Output_Error "当前系统版本不在本脚本的支持范围内" + fi + fi + ;; + "${SYSTEM_KALI}" | "${SYSTEM_ARCH}") + # 理论全部支持 + ;; + *) + Output_Error "当前系统不在本脚本的支持范围内" + ;; + esac ## 判定系统处理器架构 case "$(uname -m)" in x86_64) @@ -360,6 +461,21 @@ function ChooseMirrors() { echo -e '' echo -e " 运行环境 ${BLUE}${system_name} ${arch}${PLAIN}" echo -e " 系统时间 ${BLUE}${date} ${timezone}${PLAIN}" + local CHOICE=$(echo -e "\n${BOLD}└─ 请确认脚本检测到的系统及版本与实际无误 [Y/n]:${PLAIN}") + while true; do + read -p "${CHOICE}" INPUT + case "${INPUT}" in + [Yy] | [Yy][Ee][Ss]) + break + ;; + [Nn] | [Nn][Oo]) + exit + ;; + *) + echo -e "\n$WARN 请输入 \"${BLUE}Y${PLAIN}\" 或 \"${BLUE}n${PLAIN}\" !" + ;; + esac + done } Title @@ -416,54 +532,9 @@ function ChooseWebProtocol() { WEB_PROTOCOL="${WEB_PROTOCOL,,}" } -# 适用于 RHEL/CentOS(Stream)/RockyLinux 的 EPEL 附加软件包(安装/换源) -function ChooseInstallEPEL() { - function Check() { - ## 判断是否已安装 EPEL 软件包 - rpm -qa | grep epel-release -q - VERIFICATION_EPEL=$? - ## 判断 /etc/yum.repos.d 目录下是否存在 epel 附加软件包 repo 源文件 - [ -d $Dir_RedHatRepos ] && ls $Dir_RedHatRepos | grep epel -q - VERIFICATION_EPELFILES=$? - ## 判断 /etc/yum.repos.d.bak 目录下是否存在 epel 附加软件包 repo 源文件 - [ -d $Dir_RedHatReposBackup ] && ls $Dir_RedHatReposBackup | grep epel -q - VERIFICATION_EPELBACKUPFILES=$? - } - - if [[ "${SYSTEM_FACTIONS}" == "${SYSTEM_REDHAT}" ]]; then - if [[ -z "${INSTALL_EPEL}" ]]; then - case "${SYSTEM_JUDGMENT}" in - "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}") - Check - if [ ${VERIFICATION_EPEL} -eq 0 ]; then - local CHOICE=$(echo -e "\n${BOLD}└─ 检测到系统已安装 EPEL 附加软件包,是否替换/覆盖软件源? [Y/n] ${PLAIN}") - else - local CHOICE=$(echo -e "\n${BOLD}└─ 是否安装 EPEL 附加软件包? [Y/n] ${PLAIN}") - fi - read -p "${CHOICE}" INPUT - [[ -z "${INPUT}" ]] && INPUT=Y - case "${INPUT}" in - [Yy] | [Yy][Ee][Ss]) - INSTALL_EPEL="True" - ;; - [Nn] | [Nn][Oo]) - INSTALL_EPEL="False" - ;; - *) - echo -e "\n$WARN 输入错误,默认不更换!" - INSTALL_EPEL="False" - ;; - esac - ;; - esac - elif [[ "${INSTALL_EPEL}" == "true" ]]; then - Check - fi - fi -} - ## 备份原有软件源 function BackupOriginMirrors() { + BACKUPED="false" if [[ "${BACKUP}" == "true" ]]; then local VERIFICATION_FILES=1 local VERIFICATION_BACKUPFILES=1 @@ -517,6 +588,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $File_DebianSourceList $File_DebianSourceListBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -526,6 +598,7 @@ function BackupOriginMirrors() { else echo '' cp -rvf $File_DebianSourceList $File_DebianSourceListBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 list 源文件" sleep 1s fi @@ -546,6 +619,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_DebianExtendSource/* $Dir_DebianExtendSourceBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -556,6 +630,7 @@ function BackupOriginMirrors() { [ ! -d $Dir_DebianExtendSourceBackup ] && mkdir -p $Dir_DebianExtendSourceBackup echo '' cp -rvf $Dir_DebianExtendSource/* $Dir_DebianExtendSourceBackup 2>&1 + BACKUPED="true" echo -e "$COMPLETE 已备份原有 list 扩展源文件" sleep 1s fi @@ -574,6 +649,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_RedHatRepos/* $Dir_RedHatReposBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -583,7 +659,8 @@ function BackupOriginMirrors() { else [ ! -d $Dir_RedHatReposBackup ] && mkdir -p $Dir_RedHatReposBackup echo '' - cp -vrf $Dir_RedHatRepos/* $Dir_RedHatReposBackup 2>&1 + cp -rvf $Dir_RedHatRepos/* $Dir_RedHatReposBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 repo 源文件" sleep 1s fi @@ -604,6 +681,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_openEulerRepos/* $Dir_openEulerReposBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -613,7 +691,8 @@ function BackupOriginMirrors() { else [ ! -d $Dir_openEulerReposBackup ] && mkdir -p $Dir_openEulerReposBackup echo '' - cp -vrf $Dir_openEulerRepos/* $Dir_openEulerReposBackup 2>&1 + cp -rvf $Dir_openEulerRepos/* $Dir_openEulerReposBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 repo 源文件" sleep 1s fi @@ -634,6 +713,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $Dir_openSUSERepos/* $Dir_openSUSEReposBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -643,7 +723,8 @@ function BackupOriginMirrors() { else [ ! -d $Dir_openSUSEReposBackup ] && mkdir -p $Dir_openSUSEReposBackup echo '' - cp -vrf $Dir_openSUSERepos/* $Dir_openSUSEReposBackup 2>&1 + cp -rvf $Dir_openSUSERepos/* $Dir_openSUSEReposBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有 repo 源文件" sleep 1s fi @@ -664,6 +745,7 @@ function BackupOriginMirrors() { [Nn] | [Nn][Oo]) echo '' cp -rvf $File_ArchMirrorList $File_ArchMirrorListBackup 2>&1 + BACKUPED="true" ;; *) echo -e "\n$WARN 输入错误,默认不覆盖!" @@ -673,6 +755,7 @@ function BackupOriginMirrors() { else echo '' cp -rvf $File_ArchMirrorList $File_ArchMirrorListBackup 2>&1 + BACKUPED="true" echo -e "\n$COMPLETE 已备份原有软件源文件" sleep 1s fi @@ -699,12 +782,10 @@ function RemoveOriginMirrors() { rm -rf $Dir_RedHatRepos/fedora* ;; *) - if [[ "${ONLY_EPEL}" == "false" ]]; then - if [ -f $Dir_RedHatRepos/epel.repo ]; then - ls $Dir_RedHatRepos/ | egrep -v epel | xargs rm -rf - else - rm -rf $Dir_RedHatRepos/* - fi + if [ -f $Dir_RedHatRepos/epel.repo ]; then + ls $Dir_RedHatRepos/ | egrep -v epel | xargs rm -rf + else + rm -rf $Dir_RedHatRepos/* fi ;; esac @@ -724,6 +805,57 @@ function RemoveOriginMirrors() { ## 换源 function ChangeMirrors() { + ## 打印修改前后差异 + function PrintDiff() { + ## Debian/Arch 比较模式 + function DiffMode1() { + local backup_file=$1 + local origin_file=$2 + if [[ -s $backup_file && -s $origin_file ]]; then + if [[ "$(cat $backup_file)" != "$(cat $origin_file)" ]]; then + echo -e "\n${BLUE}${backup_file}${PLAIN} -> ${BLUE}${origin_file}${PLAIN}" + diff $backup_file $origin_file -d --color=always -I -B -E + fi + fi + } + ## RedHat/openEuler/openSUSE 比较模式 + function DiffMode2() { + local backup_dir=$1 + local origin_dir=$2 + local backup_file origin_file + for item in $(ls $backup_dir | xargs); do + backup_file="$backup_dir/$item" + origin_file="$origin_dir/$item" + if [[ "$(cat $backup_file)" != "$(cat $origin_file)" ]]; then + echo -e "\n${BLUE}${backup_file}${PLAIN} -> ${BLUE}${origin_file}${PLAIN}" + diff $backup_file $origin_file -d --color=always -I -B -E + fi + done + } + + if [[ "${PRINT_DIFF}" == "true" ]]; then + if [[ -x /usr/bin/diff && "${BACKUPED}" == "true" ]]; then + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + DiffMode1 $File_DebianSourceListBackup $File_DebianSourceList + ;; + "${SYSTEM_REDHAT}") + DiffMode2 $Dir_RedHatReposBackup $Dir_RedHatRepos + ;; + "${SYSTEM_OPENEULER}") + DiffMode2 $Dir_openEulerReposBackup $Dir_openEulerRepos + ;; + "${SYSTEM_OPENSUSE}") + DiffMode2 $Dir_openSUSEReposBackup $Dir_openSUSERepos + ;; + "${SYSTEM_ARCH}") + DiffMode1 $File_ArchMirrorListBackup $File_ArchMirrorList + ;; + esac + fi + fi + } + case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") DebianMirrors @@ -741,18 +873,19 @@ function ChangeMirrors() { ArchMirrors ;; esac + PrintDiff case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - echo -e "\n$COMPLETE 软件源更换完毕,请在之后使用 apt-get update 命令${SYNC_TXT}软件源\n" + echo -e "\n$COMPLETE 软件源更换完毕,你可以在之后使用 ${BLUE}apt-get update${PLAIN} 命令${SYNC_TXT}软件源\n" ;; "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}") - echo -e "\n$COMPLETE 软件源更换完毕,请在之后使用 yum makecache 命令${SYNC_TXT}软件源\n" + echo -e "\n$COMPLETE 软件源更换完毕,你可以在之后使用 ${BLUE}yum makecache${PLAIN} 命令${SYNC_TXT}软件源\n" ;; "${SYSTEM_OPENSUSE}") - echo -e "\n$COMPLETE 软件源更换完毕,请在之后使用 zypper ref 命令${SYNC_TXT}软件源\n" + echo -e "\n$COMPLETE 软件源更换完毕,你可以在之后使用 ${BLUE}zypper ref${PLAIN} 命令${SYNC_TXT}软件源\n" ;; "${SYSTEM_ARCH}") - echo -e "\n$COMPLETE 软件源更换完毕,请在之后使用 pacman -Sy 命令${SYNC_TXT}软件源\n" + echo -e "\n$COMPLETE 软件源更换完毕,你可以在之后使用 ${BLUE}pacman -Sy${PLAIN} 命令${SYNC_TXT}软件源\n" ;; esac } @@ -818,44 +951,6 @@ deb ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} ## 更换基于 RedHat 系 Linux 发行版软件源 function RedHatMirrors() { - ## 安装/更换 EPEL (Extra Packages for Enterprise Linux) 附加软件包软件源 - function EPELMirrors() { - ## 安装 EPEL 软件包 - if [ ${VERIFICATION_EPEL} -ne 0 ]; then - echo -e "${WORKING} 开始安装 epel-release 软件包..." - yum install -y https://mirrors.cloud.tencent.com/epel/epel-release-latest-${SYSTEM_VERSION_NUMBER:0:1}.noarch.rpm - fi - ## 删除原有 repo 源文件 - [ ${VERIFICATION_EPELFILES} -eq 0 ] && rm -rf $Dir_RedHatRepos/epel* - [ ${VERIFICATION_EPELBACKUPFILES} -eq 0 ] && rm -rf $Dir_RedHatReposBackup/epel* - ## 生成 repo 源文件 - GenRepoFiles_EPEL - - # 更换 WEB 协议(HTTP/HTTPS) - case ${SYSTEM_VERSION_NUMBER:0:1} in - 9 | 8) - sed -i "s|^#baseurl=https|baseurl=${WEB_PROTOCOL}|g" $Dir_RedHatRepos/epel* - ;; - 7) - sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" $Dir_RedHatRepos/epel* - ;; - esac - # 修改源 - sed -i 's|^metalink=|#metalink=|g' $Dir_RedHatRepos/epel* - case ${SYSTEM_VERSION_NUMBER:0:1} in - 9) - sed -i "s|download.example/pub|${SOURCE}|g" $Dir_RedHatRepos/epel* - ;; - 8 | 7) - sed -i "s|download.fedoraproject.org/pub|${SOURCE}|g" $Dir_RedHatRepos/epel* - ;; - esac - } - ## 仅 EPEL 模式 - if [[ "${ONLY_EPEL}" == "true" ]]; then - EPELMirrors - return - fi ## 生成基于 RedHat 发行版和及其衍生发行版的官方 repo 源文件 case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}") @@ -1027,13 +1122,6 @@ function RedHatMirrors() { fedora-updates-testing-modular.repo ;; esac - - ## EPEL 附加软件包(安装/换源) - case "${SYSTEM_JUDGMENT}" in - "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMA}") - [[ "${INSTALL_EPEL}" == "True" ]] && EPELMirrors - ;; - esac } ## 更换基于 openEuler 发行版的软件源 @@ -3955,263 +4043,6 @@ EOF esac } -## 生成 EPEL 附加软件包官方 repo 源文件 -function GenRepoFiles_EPEL() { - case ${SYSTEM_VERSION_NUMBER:0:1} in - 9) - cat >$Dir_RedHatRepos/epel.repo <<\EOF -[epel] -name=Extra Packages for Enterprise Linux $releasever - $basearch -# It is much more secure to use the metalink, but if you wish to use a local mirror -# place its address here. -#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=1 -gpgcheck=1 -countme=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever - -[epel-debuginfo] -name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug -# It is much more secure to use the metalink, but if you wish to use a local mirror -# place its address here. -#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever -gpgcheck=1 - -[epel-source] -name=Extra Packages for Enterprise Linux $releasever - $basearch - Source -# It is much more secure to use the metalink, but if you wish to use a local mirror -# place its address here. -#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever -gpgcheck=1 -EOF - cat >$Dir_RedHatRepos/epel-testing.repo <<\EOF -[epel-testing] -name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch -# It is much more secure to use the metalink, but if you wish to use a local mirror -# place its address here. -#baseurl=https://download.example/pub/epel/testing/$releasever/Everything/$basearch/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgcheck=1 -countme=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever - -[epel-testing-debuginfo] -name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch - Debug -# It is much more secure to use the metalink, but if you wish to use a local mirror -# place its address here. -#baseurl=https://download.example/pub/epel/testing/$releasever/Everything/$basearch/debug/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-debug-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever -gpgcheck=1 - -[epel-testing-source] -name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch - Source -# It is much more secure to use the metalink, but if you wish to use a local mirror -# place its address here. -#baseurl=https://download.example/pub/epel/testing/$releasever/Everything/source/tree/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-source-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever -gpgcheck=1 -EOF - ;; - 8) - cat >$Dir_RedHatRepos/epel.repo <<\EOF -[epel] -name=Extra Packages for Enterprise Linux $releasever - $basearch -#baseurl=https://download.fedoraproject.org/pub/epel/8/Everything/$basearch -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=1 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 - -[epel-debuginfo] -name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug -#baseurl=https://download.fedoraproject.org/pub/epel/8/Everything/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 - -[epel-source] -name=Extra Packages for Enterprise Linux $releasever - $basearch - Source -#baseurl=https://download.fedoraproject.org/pub/epel/8/Everything/SRPMS -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 -EOF - cat >$Dir_RedHatRepos/epel-modular.repo <<\EOF -[epel-modular] -name=Extra Packages for Enterprise Linux Modular $releasever - $basearch -#baseurl=https://download.fedoraproject.org/pub/epel/8/Modular/$basearch -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-modular-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=1 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 - -[epel-modular-debuginfo] -name=Extra Packages for Enterprise Linux Modular $releasever - $basearch - Debug -#baseurl=https://download.fedoraproject.org/pub/epel/8/Modular/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-modular-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 - -[epel-modular-source] -name=Extra Packages for Enterprise Linux Modular $releasever - $basearch - Source -#baseurl=https://download.fedoraproject.org/pub/epel/8/Modular/SRPMS -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-modular-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 -EOF - cat >$Dir_RedHatRepos/epel-playground.repo <<\EOF -[epel-playground] -name=Extra Packages for Enterprise Linux $releasever - Playground - $basearch -#baseurl=https://download.fedoraproject.org/pub/epel/playground/$releasever/Everything/$basearch/os -metalink=https://mirrors.fedoraproject.org/metalink?repo=playground-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 - -[epel-playground-debuginfo] -name=Extra Packages for Enterprise Linux $releasever - Playground - $basearch - Debug -#baseurl=https://download.fedoraproject.org/pub/epel/playground/$releasever/Everything/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=playground-debug-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 - -[epel-playground-source] -name=Extra Packages for Enterprise Linux $releasever - Playground - $basearch - Source -#baseurl=https://download.fedoraproject.org/pub/epel/playground/$releasever/Everything/source/tree/ -metalink=https://mirrors.fedoraproject.org/metalink?repo=playground-source-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 -EOF - cat >$Dir_RedHatRepos/epel-testing.repo <<\EOF -[epel-testing] -name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch -#baseurl=https://download.fedoraproject.org/pub/epel/testing/$releasever/Everything/$basearch -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 - -[epel-testing-debuginfo] -name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch - Debug -#baseurl=https://download.fedoraproject.org/pub/epel/testing/$releasever/Everything/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-debug-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 - -[epel-testing-source] -name=Extra Packages for Enterprise Linux $releasever - Testing - $basearch - Source -#baseurl=https://download.fedoraproject.org/pub/epel/testing/$releasever/Everything/SRPMS -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-source-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 -EOF - cat >$Dir_RedHatRepos/epel-testing-modular.repo <<\EOF -[epel-testing-modular] -name=Extra Packages for Enterprise Linux Modular $releasever - Testing - $basearch -#baseurl=https://download.fedoraproject.org/pub/epel/testing/$releasever/Modular/$basearch -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-modular-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 - -[epel-testing-modular-debuginfo] -name=Extra Packages for Enterprise Linux Modular $releasever - Testing - $basearch - Debug -#baseurl=https://download.fedoraproject.org/pub/epel/testing/$releasever/Modular/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-modular-debug-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 - -[epel-testing-modular-source] -name=Extra Packages for Enterprise Linux Modular $releasever - Testing - $basearch - Source -#baseurl=https://download.fedoraproject.org/pub/epel/testing/$releasever/Modular/SRPMS -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-modular-source-epel$releasever&arch=$basearch&infra=$infra&content=$contentdir -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 -gpgcheck=1 -EOF - ;; - 7) - cat >$Dir_RedHatRepos/epel.repo <<\EOF -[epel] -name=Extra Packages for Enterprise Linux 7 - $basearch -#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch -failovermethod=priority -enabled=1 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 - -[epel-debuginfo] -name=Extra Packages for Enterprise Linux 7 - $basearch - Debug -#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch -failovermethod=priority -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 -gpgcheck=1 - -[epel-source] -name=Extra Packages for Enterprise Linux 7 - $basearch - Source -#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS -metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch -failovermethod=priority -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 -gpgcheck=1 -EOF - cat >$Dir_RedHatRepos/epel-testing.repo <<\EOF -[epel-testing] -name=Extra Packages for Enterprise Linux 7 - Testing - $basearch -#baseurl=http://download.fedoraproject.org/pub/epel/testing/7/$basearch -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-epel7&arch=$basearch -failovermethod=priority -enabled=0 -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 - -[epel-testing-debuginfo] -name=Extra Packages for Enterprise Linux 7 - Testing - $basearch - Debug -#baseurl=http://download.fedoraproject.org/pub/epel/testing/7/$basearch/debug -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-debug-epel7&arch=$basearch -failovermethod=priority -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 -gpgcheck=1 - -[epel-testing-source] -name=Extra Packages for Enterprise Linux 7 - Testing - $basearch - Source -#baseurl=http://download.fedoraproject.org/pub/epel/testing/7/SRPMS -metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-source-epel7&arch=$basearch -failovermethod=priority -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 -gpgcheck=1 -EOF - ;; - esac -} - ## 处理命令选项 function CommandOptions() { ## 命令帮助 @@ -4226,10 +4057,9 @@ function CommandOptions() { --branch-security 指定 debian-security 软件源分支(路径) 分支名 --branch-vault 指定 centos-vault 软件源分支(路径) 分支名 --web-protocol 指定 WEB 协议 http 或 https - --install-epel 安装 EPEL 附加软件包 true 或 false - --only-epel 仅更换 EPEL 软件源模式 无 --backup 备份原有软件源 true 或 false --ignore-backup-tips 忽略覆盖备份提示 无 + --print-diff 打印源文件修改前后差异 无 " } @@ -4318,26 +4148,6 @@ function CommandOptions() { Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!" fi ;; - ## 安装 EPEL 附加软件包 - --install-epel) - if [ $2 ]; then - case $2 in - [Tt]rue | [Ff]alse) - INSTALL_EPEL="${2,,}" - shift - ;; - *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" - ;; - esac - else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" - fi - ;; - --only-epel) - ONLY_EPEL="true" - INSTALL_EPEL="true" - ;; ## 备份原有软件源 --backup) if [ $2 ]; then @@ -4358,6 +4168,10 @@ function CommandOptions() { --ignore-backup-tips) IGNORE_BACKUP_TIPS="true" ;; + ## 打印源文件修改前后差异 + --print-diff) + PRINT_DIFF="true" + ;; --help) Output_Help_Info exit @@ -4369,9 +4183,9 @@ function CommandOptions() { shift done ## 赋予部分命令参数默认值 - ONLY_EPEL="${ONLY_EPEL:-"false"}" BACKUP="${BACKUP:-"true"}" IGNORE_BACKUP_TIPS="${IGNORE_BACKUP_TIPS:-"false"}" + PRINT_DIFF="${PRINT_DIFF:-"false"}" } ## 组合函数 @@ -4382,7 +4196,7 @@ function Combin_Function() { StartTitle ChooseMirrors ChooseWebProtocol - ChooseInstallEPEL + UserConfirm BackupOriginMirrors RemoveOriginMirrors ChangeMirrors diff --git a/docs/use/command-options.md b/docs/use/command-options.md index 4f70922..d5a6b1c 100644 --- a/docs/use/command-options.md +++ b/docs/use/command-options.md @@ -16,6 +16,7 @@ | `--ignore-backup-tips` | 忽略覆盖备份提示 | 无 | | `--updata-software` | 更新软件包 | `true` 或 `false` | | `--clean-cache` | 清理下载缓存 | `true` 或 `false` | +| `--print-diff` | 打印源文件修改前后差异 | `true` 或 `false` | | `--help` | 查看帮助菜单 | 无 | ## 示例 diff --git a/docs/use/index.md b/docs/use/index.md index ec79b16..56af46c 100644 --- a/docs/use/index.md +++ b/docs/use/index.md @@ -16,8 +16,9 @@ bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ### 中国教育网专用(实验性) ``` bash -bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/MirrorZ.sh) +bash <(curl -sSL https://linuxmirrors.cn/edu.sh) ``` +> 针对校园网联合镜像站定制,移除了部分功能,额外增加了一些操作确认提示 ## 注意事项