新增打印源文件修改前后差异命令选项 && 一些优化

This commit is contained in:
SuperManito
2023-05-07 23:34:28 +08:00
parent 2f4f403ca2
commit 23fffa720d
5 changed files with 385 additions and 427 deletions

View File

@@ -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

View File

@@ -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
@@ -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"}"
}
## 组合函数

View File

@@ -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 附件软件包故无法使用相关参数,请确认后重试!"
;;
"${SYSTEM_OPENEULER}" | "${SYSTEM_OPENSUSE}" | "${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
;;
esac
;;
"${SYSTEM_OPENEULER}")
if [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then
Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关参数,请确认后重试!"
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 附件软件包故无法使用相关参数,请确认后重试!"
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
@@ -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,13 +782,11 @@ 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
fi
;;
esac
fi
@@ -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

View File

@@ -16,6 +16,7 @@
| `--ignore-backup-tips` | 忽略覆盖备份提示 | 无 |
| `--updata-software` | 更新软件包 | `true``false` |
| `--clean-cache` | 清理下载缓存 | `true``false` |
| `--print-diff` | 打印源文件修改前后差异 | `true``false` |
| `--help` | 查看帮助菜单 | 无 |
## 示例

View File

@@ -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)
```
> 针对校园网联合镜像站定制,移除了部分功能,额外增加了一些操作确认提示
## 注意事项