From cb7067467c6fc2dccba4766fca576d1c172d0ade Mon Sep 17 00:00:00 2001 From: SuperManito <68613938+SuperManito@users.noreply.github.com> Date: Thu, 25 Jul 2024 10:21:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=82=E9=85=8D=20Linux=20?= =?UTF-8?q?Mint=20=E6=93=8D=E4=BD=9C=E7=B3=BB=E7=BB=9F=20&=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChangeMirrors.sh | 554 ++++++++++++++----------- DockerInstallation.sh | 206 ++++----- README.md | 4 + docs/assets/images/icon/linux-mint.ico | Bin 0 -> 9662 bytes docs/index.md | 40 +- docs/mirrors/index.md | 32 +- docs/other/index.md | 35 +- docs/stylesheets/extra.css | 5 +- docs/use/command-options.md | 5 +- docs/use/help.md | 4 +- docs/use/index.md | 4 +- mkdocs.yml | 2 +- requirements.txt | 2 +- 13 files changed, 503 insertions(+), 390 deletions(-) create mode 100644 docs/assets/images/icon/linux-mint.ico diff --git a/ChangeMirrors.sh b/ChangeMirrors.sh index c34970c..3910a36 100755 --- a/ChangeMirrors.sh +++ b/ChangeMirrors.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2024-07-15 +## Modified: 2024-07-25 ## License: MIT ## GitHub: https://github.com/SuperManito/LinuxMirrors ## Website: https://linuxmirrors.cn @@ -23,6 +23,37 @@ mirror_list_default=( "中国科学技术大学@mirrors.ustc.edu.cn" "中国科学院软件研究所@mirror.iscas.ac.cn" ) +# 中国大陆教育网格式:"软件源名称@软件源地址" +mirror_list_edu=( + "清华大学@mirrors.tuna.tsinghua.edu.cn" + "北京大学@mirrors.pku.edu.cn" + "南京大学@mirrors.nju.edu.cn" + "重庆大学@mirrors.cqu.edu.cn" + "兰州大学@mirror.lzu.edu.cn" + "浙江大学@mirrors.zju.edu.cn" + "山东大学@mirrors.sdu.edu.cn" + "吉林大学@mirrors.jlu.edu.cn" + "上海交通大学@mirror.sjtu.edu.cn" + "上海科技大学@mirrors.shanghaitech.edu.cn" + "南方科技大学@mirrors.sustech.edu.cn" + "南京邮电大学@mirrors.njupt.edu.cn" + "南京工业大学@mirrors.njtech.edu.cn" + "电子科技大学@mirrors.uestc.cn" + "北京交通大学@mirror.bjtu.edu.cn" + "北京邮电大学@mirrors.bupt.edu.cn" + "齐鲁工业大学@mirrors.qlu.edu.cn" + "华南农业大学@mirrors.scau.edu.cn" + "西安交通大学@mirrors.xjtu.edu.cn" + "江西理工大学@mirrors.jxust.edu.cn" + "重庆邮电大学@mirrors.cqupt.edu.cn" + "南阳理工学院@mirror.nyist.edu.cn" + "武昌首义学院@mirrors.wsyu.edu.cn" + "荆楚理工学院@mirrors.jcut.edu.cn" + "北京外国语大学@mirrors.bfsu.edu.cn" + "中国科学技术大学@mirrors.ustc.edu.cn" + "西北农林科技大学@mirrors.nwafu.edu.cn" + "大连东软信息学院@mirrors.neusoft.edu.cn" +) # 海外格式:"洲 · 软件源名称 · 国家/地区@软件源地址",修改前请先前往官网阅读添加规范 mirror_list_abroad=( "亚洲 · xTom · 香港@mirrors.xtom.hk" @@ -92,37 +123,6 @@ mirror_list_abroad=( "非洲 · Liquid Telecom · 肯尼亚@mirror.liquidtelecom.com" "非洲 · Dimension Data · 南非@mirror.dimensiondata.com" ) -# 中国大陆教育网格式:"软件源名称@软件源地址" -mirror_list_edu=( - "清华大学@mirrors.tuna.tsinghua.edu.cn" - "北京大学@mirrors.pku.edu.cn" - "南京大学@mirrors.nju.edu.cn" - "重庆大学@mirrors.cqu.edu.cn" - "兰州大学@mirror.lzu.edu.cn" - "浙江大学@mirrors.zju.edu.cn" - "山东大学@mirrors.sdu.edu.cn" - "吉林大学@mirrors.jlu.edu.cn" - "上海交通大学@mirror.sjtu.edu.cn" - "上海科技大学@mirrors.shanghaitech.edu.cn" - "南方科技大学@mirrors.sustech.edu.cn" - "南京邮电大学@mirrors.njupt.edu.cn" - "南京工业大学@mirrors.njtech.edu.cn" - "电子科技大学@mirrors.uestc.cn" - "北京交通大学@mirror.bjtu.edu.cn" - "北京邮电大学@mirrors.bupt.edu.cn" - "齐鲁工业大学@mirrors.qlu.edu.cn" - "华南农业大学@mirrors.scau.edu.cn" - "西安交通大学@mirrors.xjtu.edu.cn" - "江西理工大学@mirrors.jxust.edu.cn" - "重庆邮电大学@mirrors.cqupt.edu.cn" - "南阳理工学院@mirror.nyist.edu.cn" - "武昌首义学院@mirrors.wsyu.edu.cn" - "荆楚理工学院@mirrors.jcut.edu.cn" - "北京外国语大学@mirrors.bfsu.edu.cn" - "中国科学技术大学@mirrors.ustc.edu.cn" - "西北农林科技大学@mirrors.nwafu.edu.cn" - "大连东软信息学院@mirrors.neusoft.edu.cn" -) ## 配置需要区分公网地址和内网地址的软件源(不分地域) # 配置方法:需要同时在两个数组变量中分别定义软件源地址,并且保证排列顺序一致 @@ -149,6 +149,7 @@ SYSTEM_DEBIAN="Debian" SYSTEM_UBUNTU="Ubuntu" SYSTEM_KALI="Kali" SYSTEM_DEEPIN="Deepin" +SYSTEM_LINUX_MINT="Linuxmint" SYSTEM_REDHAT="RedHat" SYSTEM_RHEL="Red Hat Enterprise Linux" SYSTEM_CENTOS="CentOS" @@ -184,6 +185,8 @@ File_ArmbianSourceList=/etc/apt/sources.list.d/armbian.list File_ArmbianSourceListBackup=/etc/apt/sources.list.d/armbian.list.bak File_ProxmoxSourceList=/etc/apt/sources.list.d/pve-no-subscription.list File_ProxmoxSourceListBackup=/etc/apt/sources.list.d/pve-no-subscription.list.bak +File_LinuxMintSourceList=/etc/apt/sources.list.d/official-package-repositories.list +File_LinuxMintSourceListBackup=/etc/apt/sources.list.d/official-package-repositories.list.bak Dir_DebianExtendSource=/etc/apt/sources.list.d Dir_DebianExtendSourceBackup=/etc/apt/sources.list.d.bak File_ArchMirrorList=/etc/pacman.d/mirrorlist @@ -212,7 +215,23 @@ FAIL="[\033[1;31m失败${PLAIN}]" TIP="[\033[1;32m提示${PLAIN}]" WORKING="[\033[1;36m >_ ${PLAIN}]" -function StartTitle() { +function main() { + permission_judgment + collect_system_info + check_command_options + print_start_title + choose_mirrors + choose_protocol + choose_install_epel_packages + close_firewall_service + backup_original_mirrors + remove_original_mirrors + change_mirrors_main + upgrade_software + run_end +} + +function print_start_title() { [ -z "${SOURCE}" ] && clear 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 |" @@ -222,20 +241,20 @@ function StartTitle() { } ## 报错退出 -function Output_Error() { +function output_error() { [ "$1" ] && echo -e "\n$ERROR $1\n" exit 1 } ## 权限判定 -function PermissionJudgment() { +function permission_judgment() { if [ $UID -ne 0 ]; then - Output_Error "权限不足,请使用 Root 用户运行本脚本" + output_error "权限不足,请使用 Root 用户运行本脚本" fi } -## 系统判定变量 -function EnvJudgment() { +## 收集系统信息 +function collect_system_info() { ## 定义系统名称 SYSTEM_NAME="$(cat $File_LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" cat $File_LinuxRelease | grep "PRETTY_NAME=" -q @@ -260,7 +279,7 @@ function EnvJudgment() { elif [[ "${SYSTEM_NAME}" == *"openSUSE"* ]]; then SYSTEM_FACTIONS="${SYSTEM_OPENSUSE}" else - Output_Error "无法判断当前运行环境,当前系统不在本脚本的支持范围内" + output_error "无法判断当前运行环境,当前系统不在本脚本的支持范围内" fi ## 判定系统名称、版本、版本号 case "${SYSTEM_FACTIONS}" in @@ -268,7 +287,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\n本脚本需要通过 lsb_release 指令判断系统具体类型和版本,当前系统可能为精简安装,请自行安装后重新执行脚本!" + output_error "lsb-release 软件包安装失败\n\n本脚本需要通过 lsb_release 指令判断系统具体类型和版本,当前系统可能为精简安装,请自行安装后重新执行脚本!" fi fi SYSTEM_JUDGMENT="$(lsb_release -is)" @@ -289,49 +308,54 @@ function EnvJudgment() { case "${SYSTEM_JUDGMENT}" in "${SYSTEM_DEBIAN}") if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [8-9] && "${SYSTEM_VERSION_NUMBER:0:2}" != 1[0-3] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_UBUNTU}") if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 1[4-9] && "${SYSTEM_VERSION_NUMBER:0:2}" != 2[0-4] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" + fi + ;; + "${SYSTEM_LINUX_MINT}") + if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 19 && "${SYSTEM_VERSION_NUMBER:0:2}" != 2[0-1] && "${SYSTEM_VERSION_NUMBER:0:2}" != 6 ]]; then + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_RHEL}") if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [7-9] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_CENTOS}") if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [7-8] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_OPENCLOUDOS}") if [[ "${SYSTEM_VERSION_NUMBER:0:1}" != [8-9] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_FEDORA}") if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != [3-4][0-9] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_OPENEULER}") if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 2[1-4] ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "${SYSTEM_OPENSUSE}") case "${SYSTEM_ID}" in "opensuse-leap") if [[ "${SYSTEM_VERSION_NUMBER:0:2}" != 15 ]]; then - Output_Error "当前系统版本不在本脚本的支持范围内" + output_error "当前系统版本不在本脚本的支持范围内" fi ;; "opensuse-tumbleweed") ;; *) - Output_Error "当前系统不在本脚本的支持范围内" + output_error "当前系统不在本脚本的支持范围内" ;; esac ;; @@ -339,7 +363,7 @@ function EnvJudgment() { # 理论全部支持或不作判断 ;; *) - Output_Error "当前系统不在本脚本的支持范围内" + output_error "当前系统不在本脚本的支持范围内" ;; esac ## 判定系统处理器架构 @@ -448,28 +472,28 @@ function EnvJudgment() { } ## 命令选项兼容性判断 -function CheckCommandOptions() { +function check_command_options() { if [[ "${USE_ABROAD_SOURCE}" == "true" && "${USE_EDU_SOURCE}" == "true" ]]; then - Output_Error "两种模式不可同时使用!" + output_error "两种模式不可同时使用!" fi if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_DEBIAN}" ]] && [[ "${SOURCE_SECURITY}" == "true" || "${SOURCE_BRANCH_SECURITY}" == "true" ]]; then - Output_Error "当前系统不支持使用 security 仓库相关命令选项,请确认后重试!" + output_error "当前系统不支持使用 security 仓库相关命令选项,请确认后重试!" fi if [[ "${SYSTEM_FACTIONS}" != "${SYSTEM_DEBIAN}" ]] && [[ "${DEBIAN_CODENAME}" ]]; then - Output_Error "当前系统不支持使用指定版本代号命令选项,请确认后重试!" + output_error "当前系统不支持使用指定版本代号命令选项,请确认后重试!" fi if [[ "${SYSTEM_FACTIONS}" != "${SYSTEM_REDHAT}" || "${SYSTEM_JUDGMENT}" == "${SYSTEM_FEDORA}" ]] && [[ "${INSTALL_EPEL}" == "true" || "${ONLY_EPEL}" == "true" ]]; then - Output_Error "当前系统不支持安装 EPEL 附件软件包故无法使用相关命令选项,请确认后重试!" + output_error "当前系统不支持安装 EPEL 附件软件包故无法使用相关命令选项,请确认后重试!" fi if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_CENTOS}" && "${SYSTEM_JUDGMENT}" != "${SYSTEM_RHEL}" && "${SYSTEM_JUDGMENT}" != "${SYSTEM_ALMALINUX}" ]] && [[ "${SOURCE_VAULT}" == "true" || "${SOURCE_BRANCH_VAULT}" == "true" ]]; then - Output_Error "当前系统不支持使用 vault 仓库相关命令选项,请确认后重试!" + output_error "当前系统不支持使用 vault 仓库相关命令选项,请确认后重试!" fi } ## 选择软件源 -function ChooseMirrors() { +function choose_mirrors() { ## 打印软件源列表 - function PrintMirrorsList() { + function print_mirrors_list() { local tmp_mirror_name tmp_mirror_url arr_num default_mirror_name_length tmp_mirror_name_length tmp_spaces_nums a i j ## 计算字符串长度 function StringLength() { @@ -517,7 +541,7 @@ function ChooseMirrors() { ## 选择软件源内网地址 # 例如部分云计算厂商的镜像站区分外网(公网)地址和内网地址,内网地址仅面向云计算厂商云服务器用户使用 # 内网地址一般不支持使用 HTTPS 协议,所以默认设置为 HTTP 协议 - function ChooseMirrorIntranetAddress() { + function choose_intranet_address() { local intranet_source for ((i = 0; i < ${#mirror_list_extranet[@]}; i++)); do if [[ "${SOURCE}" == "${mirror_list_extranet[i]}" ]]; then @@ -551,7 +575,7 @@ function ChooseMirrors() { fi } - function Title() { + function print_title() { local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}" local arch="${DEVICE_ARCH}" local date_time time_zone @@ -563,7 +587,7 @@ function ChooseMirrors() { echo -e " 系统时间 ${BLUE}${date_time} ${time_zone}${PLAIN}" } - Title + print_title if [[ -z "${SOURCE}" ]]; then ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then @@ -572,13 +596,13 @@ function ChooseMirrors() { if [[ ${USE_ABROAD_SOURCE} = "true" ]]; then local mirror_list_name="mirror_list_abroad" - PrintMirrorsList "${mirror_list_name}" 60 + print_mirrors_list "${mirror_list_name}" 60 elif [[ ${USE_EDU_SOURCE} = "true" ]]; then local mirror_list_name="mirror_list_edu" - PrintMirrorsList "${mirror_list_name}" 31 + print_mirrors_list "${mirror_list_name}" 31 else local mirror_list_name="mirror_list_default" - PrintMirrorsList "${mirror_list_name}" 31 + print_mirrors_list "${mirror_list_name}" 31 fi local CHOICE @@ -607,12 +631,12 @@ function ChooseMirrors() { ## 选择软件源内网地址 if [[ "${mirror_list_extranet[*]}" =~ (^|[^[:alpha:]])"${SOURCE}"([^[:alpha:]]|$) ]]; then - ChooseMirrorIntranetAddress + choose_intranet_address fi } -## 选择同步软件源所使用的 WEB 协议( HTTP:80 端口,HTTPS:443 端口) -function ChooseWebProtocol() { +## 选择同步或更新软件源所使用的 WEB 协议( HTTP/HTTPS) +function choose_protocol() { if [[ -z "${WEB_PROTOCOL}" ]]; then if [[ "${ONLY_HTTP}" == "True" ]]; then WEB_PROTOCOL="http" @@ -639,8 +663,8 @@ function ChooseWebProtocol() { } # 适用于部分红帽系统的 EPEL 附加软件包(安装/换源) -function ChooseInstallEPEL() { - function CheckInstallStatus() { +function choose_install_epel_packages() { + function check_install_status() { ## 判断是否已安装 EPEL 软件包 rpm -qa | grep epel-release -q VERIFICATION_EPEL=$? @@ -656,7 +680,7 @@ function ChooseInstallEPEL() { if [[ -z "${INSTALL_EPEL}" ]]; then case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_OPENCLOUDOS}") - CheckInstallStatus + check_install_status if [ ${VERIFICATION_EPEL} -eq 0 ]; then local CHOICE CHOICE=$(echo -e "\n${BOLD}└─ 检测到系统已安装 EPEL 附加软件包,是否替换/覆盖软件源? [Y/n] ${PLAIN}") @@ -681,13 +705,13 @@ function ChooseInstallEPEL() { ;; esac elif [[ "${INSTALL_EPEL}" == "true" ]]; then - CheckInstallStatus + check_install_status fi fi } ## 关闭防火墙和SELinux -function CloseFirewall() { +function close_firewall_service() { if [ ! -x /usr/bin/systemctl ]; then return fi @@ -716,8 +740,8 @@ function CloseFirewall() { } ## 备份原有软件源(文件/目录) -function BackupOriginalMirrors() { - function BackupFile() { +function backup_original_mirrors() { + function backup_file() { local target_file=$1 local backup_file=$2 local type="$3" @@ -755,7 +779,7 @@ function BackupOriginalMirrors() { sleep 1s fi } - function BackupDir() { + function backup_dir() { local target_dir=$1 local backup_dir=$2 [ -d "${target_dir}" ] || mkdir -p "${target_dir}" @@ -799,69 +823,81 @@ function BackupOriginalMirrors() { if [[ "${BACKUP}" == "true" ]]; then case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - # /etc/apt/sources.list - BackupFile $File_DebianSourceList $File_DebianSourceListBackup "sources.list" + if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_LINUX_MINT}" ]]; then + # /etc/apt/sources.list + backup_file $File_DebianSourceList $File_DebianSourceListBackup "sources.list" + fi ## 自新版本的 Debian 与 Ubuntu 起,软件源文件格式统一为 DEB822 格式,涉及 Debian 12 的容器镜像、Ubuntu 24.04 和未来尚未发布的版本 - ## Debian DEB822 格式源文件 + # Debian DEB822 格式源文件 if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_DEBIAN}" ]]; then - BackupFile $File_DebianSources $File_DebianSourcesBackup "debian.sources" + [ -f $File_DebianSources ] && backup_file $File_DebianSources $File_DebianSourcesBackup "debian.sources" fi - ## Ubuntu DEB822 格式源文件 + # Ubuntu DEB822 格式源文件 if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_UBUNTU}" ]]; then - BackupFile $File_UbuntuSources $File_UbuntuSourcesBackup "ubuntu.sources" + [ -f $File_UbuntuSources ] && backup_file $File_UbuntuSources $File_UbuntuSourcesBackup "ubuntu.sources" fi - ## Armbian + # Armbian if [ -f $File_ArmbianRelease ]; then - BackupFile $File_ArmbianSourceList $File_ArmbianSourceListBackup "armbian.list" + backup_file $File_ArmbianSourceList $File_ArmbianSourceListBackup "armbian.list" fi - ## Proxmox + # Proxmox if [ -f $File_ProxmoxVersion ]; then - BackupFile $File_ProxmoxSourceList $File_ProxmoxSourceListBackup "pve-no-subscription.list" + backup_file $File_ProxmoxSourceList $File_ProxmoxSourceListBackup "pve-no-subscription.list" + fi + # Linux Mint + if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_LINUX_MINT}" ]]; then + backup_file $File_LinuxMintSourceList $File_LinuxMintSourceListBackup "official-package-repositories.list" fi ;; "${SYSTEM_REDHAT}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_OPENEULER}") # /etc/yum.repos.d - BackupDir $Dir_YumRepos $Dir_YumReposBackup + backup_dir $Dir_YumRepos $Dir_YumReposBackup ;; "${SYSTEM_OPENSUSE}") # /etc/zypp/repos.d - BackupDir $Dir_openSUSERepos $Dir_openSUSEReposBackup + backup_dir $Dir_openSUSERepos $Dir_openSUSEReposBackup ;; "${SYSTEM_ARCH}") # /etc/pacman.d/mirrorlist - BackupFile $File_ArchMirrorList $File_ArchMirrorListBackup "mirrorlist" + backup_file $File_ArchMirrorList $File_ArchMirrorListBackup "mirrorlist" ;; "${SYSTEM_ALPINE}") # /etc/apk/repositories - BackupFile $File_AlpineRepositories $File_AlpineRepositoriesBackup "repositories" + backup_file $File_AlpineRepositories $File_AlpineRepositoriesBackup "repositories" ;; esac fi } ## 移除原有软件源 -function RemoveOriginMirrors() { +function remove_original_mirrors() { case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - [ -f $File_DebianSourceList ] && sed -i '1,$d' $File_DebianSourceList + if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_LINUX_MINT}" ]]; then + [ -f $File_DebianSourceList ] && sed -i '1,$d' $File_DebianSourceList + fi [ -d $Dir_DebianExtendSource ] || mkdir -p $Dir_DebianExtendSource ## 自新版本的 Debian 与 Ubuntu 起,软件源文件格式统一为 DEB822 格式,涉及 Debian 12 的容器镜像、Ubuntu 24.04 和未来尚未发布的版本 - ## Debian DEB822 格式源文件 + # Debian DEB822 格式源文件 if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_DEBIAN}" ]]; then [ -f $File_DebianSources ] && rm -rf $File_DebianSources fi - ## Ubuntu DEB822 格式源文件 + # Ubuntu DEB822 格式源文件 if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_UBUNTU}" ]]; then [ -f $File_UbuntuSources ] && rm -rf $File_UbuntuSources fi - ## Armbian + # Armbian if [ -f $File_ArmbianRelease ]; then [ -f $File_ArmbianSourceList ] && sed -i '1,$d' $File_ArmbianSourceList fi - ## Proxmox + # Proxmox if [ -f $File_ProxmoxVersion ]; then [ -f $File_ProxmoxSourceList ] && sed -i '1,$d' $File_ProxmoxSourceList fi + # Linux Mint + if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_LINUX_MINT}" ]]; then + [ -f $File_LinuxMintSourceList ] && sed -i '1,$d' $File_LinuxMintSourceList + fi ;; "${SYSTEM_REDHAT}") if [ ! -d $Dir_YumRepos ]; then @@ -943,11 +979,11 @@ function RemoveOriginMirrors() { } ## 换源 -function ChangeMirrors() { +function change_mirrors_main() { ## 打印修改前后差异 - function PrintDiff() { + function print_diff() { ## 单一文件比较模式 - function DiffFile() { + function diff_file() { local diff_file=$1 local origin_file=$2 if [[ -s $diff_file ]] && [[ -s $origin_file ]]; then @@ -958,38 +994,44 @@ function ChangeMirrors() { fi } ## 目录文件比较模式 - function DiffDir() { + function diff_dir() { local diff_dir=$1 local origin_dir=$2 for item in $(ls $diff_dir | xargs); do - DiffFile "${diff_dir}/${item}" "${origin_dir}/${item}" + diff_file "${diff_dir}/${item}" "${origin_dir}/${item}" done } if [[ -x /usr/bin/diff && "${BACKED_UP}" == "true" ]]; then case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - DiffFile $File_DebianSourceListBackup $File_DebianSourceList - ## Armbian - if [ -f $File_ArmbianRelease ]; then - DiffFile $File_ArmbianSourceListBackup $File_ArmbianSourceList + if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_LINUX_MINT}" ]]; then + diff_file $File_DebianSourceListBackup $File_DebianSourceList fi - ## Proxmox + # Armbian + if [ -f $File_ArmbianRelease ]; then + diff_file $File_ArmbianSourceListBackup $File_ArmbianSourceList + fi + # Proxmox if [ -f $File_ProxmoxVersion ]; then - DiffFile $File_ProxmoxSourceListBackup $File_ProxmoxSourceList + diff_file $File_ProxmoxSourceListBackup $File_ProxmoxSourceList + fi + # Linux Mint + if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_LINUX_MINT}" ]]; then + diff_file $File_LinuxMintSourceListBackup $File_LinuxMintSourceList fi ;; "${SYSTEM_REDHAT}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_OPENEULER}") - DiffDir $Dir_YumReposBackup $Dir_YumRepos + diff_dir $Dir_YumReposBackup $Dir_YumRepos ;; "${SYSTEM_OPENSUSE}") - DiffDir $Dir_openSUSEReposBackup $Dir_openSUSERepos + diff_dir $Dir_openSUSEReposBackup $Dir_openSUSERepos ;; "${SYSTEM_ARCH}") - DiffFile $File_ArchMirrorListBackup $File_ArchMirrorList + diff_file $File_ArchMirrorListBackup $File_ArchMirrorList ;; "${SYSTEM_ALPINE}") - DiffFile $File_AlpineRepositoriesBackup $File_AlpineRepositories + diff_file $File_AlpineRepositoriesBackup $File_AlpineRepositories ;; esac fi @@ -998,30 +1040,30 @@ function ChangeMirrors() { ## 调用换源函数 case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - DebianMirrors + change_mirrors_Debian ;; "${SYSTEM_REDHAT}") - RedHatMirrors + change_mirrors_RedHat ;; "${SYSTEM_OPENCLOUDOS}") - OpenCloudOSMirrors + change_mirrors_OpenCloudOS ;; "${SYSTEM_OPENEULER}") - openEulerMirrors + change_mirrors_openEuler ;; "${SYSTEM_OPENSUSE}") - openSUSEMirrors + change_mirrors_openSUSE ;; "${SYSTEM_ARCH}") - ArchMirrors + change_mirrors_ArchLinux ;; "${SYSTEM_ALPINE}") - AlpineMirrors + change_mirrors_Alpine ;; esac ## 比较差异 if [[ "${PRINT_DIFF}" == "true" ]]; then - PrintDiff + print_diff fi ## 更新软件源 echo -e "\n$WORKING 开始${SYNC_MIRROR_TEXT}...\n" @@ -1055,8 +1097,8 @@ function ChangeMirrors() { } ## 升级软件包 -function UpgradeSoftware() { - function CleanCache() { +function upgrade_software() { + function clean_cache() { ## 跳过特殊系统 case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}" | "${SYSTEM_OPENSUSE}" | "${SYSTEM_ARCH}" | "${SYSTEM_ALPINE}") @@ -1139,11 +1181,12 @@ function UpgradeSoftware() { apk upgrade --no-cache ;; esac - CleanCache + ## 清理缓存 + clean_cache } ## 运行结束 -function RunEnd() { +function run_end() { echo -e "\n---------- 脚本执行结束 ----------" echo -e "\n\033[1;34mPowered by https://linuxmirrors.cn\033[0m\n" } @@ -1151,7 +1194,34 @@ function RunEnd() { ############################################################################## ## 更换基于 Debian 系 Linux 发行版的软件源 -function DebianMirrors() { +function change_mirrors_Debian() { + function gen_debian_source() { + echo "deb ${1} ${2} ${3} +# deb-src ${1} ${2} ${3} +deb ${1} ${2}-updates ${3} +# deb-src ${1} ${2}-updates ${3} +deb ${1} ${2}-backports ${3} +# deb-src ${1} ${2}-backports ${3}" + } + function gen_debian_security_source() { + echo "deb ${1} ${2}-security ${3} +# deb-src ${1} ${2}-security ${3}" + } + function gen_ubuntu_source() { + echo "deb ${1} ${2} ${3} +# deb-src ${1} ${2} ${3} +deb ${1} ${2}-updates ${3} +# deb-src ${1} ${2}-updates ${3} +deb ${1} ${2}-backports ${3} +# deb-src ${1} ${2}-backports ${3} +deb ${1} ${2}-security ${3} +# deb-src ${1} ${2}-security ${3} + +## 预发布软件源(不建议启用) +# deb ${1} ${2}-proposed ${3} +# deb-src ${1} ${2}-proposed ${3}" + } + ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then case "${SYSTEM_JUDGMENT}" in @@ -1167,68 +1237,95 @@ function DebianMirrors() { "${SYSTEM_DEEPIN}") SOURCE="community-packages.deepin.com" ;; + "${SYSTEM_LINUX_MINT}") + SOURCE="packages.linuxmint.com" + ;; esac fi - local source_suffix + local repository_sections # 仓库区域 local tips="## 默认禁用源码镜像以提高速度,如需启用请自行取消注释" - local basic_url="${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}" + local base_url="${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}" case "${SYSTEM_JUDGMENT}" in "${SYSTEM_DEBIAN}") case "${SYSTEM_VERSION_NUMBER}" in 8 | 9 | 10 | 11) - source_suffix="main contrib non-free" + repository_sections="main contrib non-free" ;; *) - source_suffix="main contrib non-free non-free-firmware" + repository_sections="main contrib non-free non-free-firmware" ;; esac if [[ "${SYSTEM_VERSION_CODENAME}" != "sid" ]]; then echo "${tips} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix}" >>$File_DebianSourceList - ## 处理 debian-security 仓库源 - local security_url="${WEB_PROTOCOL}://${SOURCE_SECURITY:-"${SOURCE}"}/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}" - echo "deb ${security_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix} -# deb-src ${security_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix}" >>$File_DebianSourceList +$(gen_debian_source "${base_url}" "${SYSTEM_VERSION_CODENAME}" "${repository_sections}")" >>$File_DebianSourceList + # 处理 debian-security 仓库源 + base_url="${WEB_PROTOCOL}://${SOURCE_SECURITY:-"${SOURCE}"}/${SOURCE_BRANCH_SECURITY:-"${SOURCE_BRANCH}-security"}" + echo "$(gen_debian_security_source "${base_url}" "${SYSTEM_VERSION_CODENAME}" "${repository_sections}")" >>$File_DebianSourceList else - echo "deb ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix}" >>$File_DebianSourceList + echo "deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} +# deb-src ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections}" >>$File_DebianSourceList fi ;; "${SYSTEM_UBUNTU}") - source_suffix="main restricted universe multiverse" + repository_sections="main restricted universe multiverse" echo "${tips} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-updates ${source_suffix} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-backports ${source_suffix} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-security ${source_suffix} - -## 预发布软件源(不建议启用) -# deb ${basic_url} ${SYSTEM_VERSION_CODENAME}-proposed ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME}-proposed ${source_suffix}" >>$File_DebianSourceList +$(gen_ubuntu_source "${base_url}" "${SYSTEM_VERSION_CODENAME}" "${repository_sections}")" >>$File_DebianSourceList ;; "${SYSTEM_KALI}") - source_suffix="main non-free contrib" + repository_sections="main non-free contrib" echo "${tips} -deb ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix} -# deb-src ${basic_url} ${SYSTEM_VERSION_CODENAME} ${source_suffix}" >>$File_DebianSourceList +deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} +# deb-src ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections}" >>$File_DebianSourceList ;; "${SYSTEM_DEEPIN}") - source_suffix="apricot main contrib non-free" + repository_sections="apricot main contrib non-free" echo "${tips} -deb ${basic_url} ${source_suffix} -# deb-src ${basic_url} ${source_suffix}" >>$File_DebianSourceList +deb ${base_url} ${repository_sections} +# deb-src ${base_url} ${repository_sections}" >>$File_DebianSourceList + ;; + "${SYSTEM_LINUX_MINT}") + ## 专用源 + repository_sections="main upstream import backport" + echo "${tips} +deb ${base_url} ${SYSTEM_VERSION_CODENAME} ${repository_sections} +" >>$File_LinuxMintSourceList + ## 底层系统软件源 + local base_system_source_branch base_system_codename + if [[ "${SYSTEM_VERSION_NUMBER}" == 6 ]]; then + # Debian 版(LMDE) + base_system_source_branch="debian" + base_system_codename="bookworm" + repository_sections="main contrib non-free non-free-firmware" + base_url="${WEB_PROTOCOL}://${SOURCE}/${base_system_source_branch}" + echo "$(gen_debian_source "${base_url}" "${base_system_codename}" "${repository_sections}")" >>$File_LinuxMintSourceList + # 处理 debian-security 仓库源 + base_url="${WEB_PROTOCOL}://${SOURCE_SECURITY:-"${SOURCE}"}/${SOURCE_BRANCH_SECURITY:-"${base_system_source_branch}-security"}" + echo "$(gen_debian_security_source "${base_url}" "${base_system_codename}" "${repository_sections}")" >>$File_LinuxMintSourceList + else + # Ubuntu 版 + if [[ "${DEVICE_ARCH}" == "x86_64" ]] || [[ "${DEVICE_ARCH}" == *i?86* ]]; then + base_system_source_branch="ubuntu" + else + base_system_source_branch="ubuntu-ports" + fi + case "${SYSTEM_VERSION_NUMBER:0:2}" in + 21) + base_system_codename="jammy" + ;; + 20) + base_system_codename="focal" + ;; + 19) + base_system_codename="bionic" + ;; + esac + repository_sections="main restricted universe multiverse" + base_url="${WEB_PROTOCOL}://${SOURCE}/${base_system_source_branch}" + echo "$(gen_ubuntu_source "${base_url}" "${base_system_codename}" "${repository_sections}")" >>$File_LinuxMintSourceList + fi ;; esac - ## 处理其它衍生系统的专用源 + ## 处理其它衍生操作系统的专用源 # Armbian if [ -f $File_ArmbianRelease ]; then echo "deb [signed-by=/usr/share/keyrings/armbian.gpg] ${WEB_PROTOCOL}://${SOURCE}/armbian ${SYSTEM_VERSION_CODENAME} main ${SYSTEM_VERSION_CODENAME}-utils ${SYSTEM_VERSION_CODENAME}-desktop" >>$File_ArmbianSourceList @@ -1243,9 +1340,9 @@ deb ${basic_url} ${source_suffix} } ## 更换基于 RedHat 系 Linux 发行版软件源 -function RedHatMirrors() { +function change_mirrors_RedHat() { ## 安装/更换 EPEL (Extra Packages for Enterprise Linux) 附加软件包软件源 - function EPELMirrors() { + function change_mirrors_EPEL() { ## 安装 EPEL 软件包 if [ "${VERIFICATION_EPEL}" -ne 0 ]; then echo -e "\n${WORKING} 安装 epel-release 软件包...\n" @@ -1256,7 +1353,7 @@ function RedHatMirrors() { [ "${VERIFICATION_EPELFILES}" -eq 0 ] && rm -rf $Dir_YumRepos/epel* [ "${VERIFICATION_EPELBACKUPFILES}" -eq 0 ] && rm -rf $Dir_YumReposBackup/epel* ## 生成 repo 源文件 - GenRepoFiles_EPEL + gen_repo_files_EPEL if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then return fi @@ -1284,7 +1381,7 @@ function RedHatMirrors() { } ## 仅 EPEL 模式 if [[ "${ONLY_EPEL}" == "true" ]]; then - EPELMirrors + change_mirrors_EPEL return fi ## 生成基于 RedHat 发行版和及其衍生发行版的官方 repo 源文件 @@ -1292,30 +1389,30 @@ function RedHatMirrors() { "${SYSTEM_RHEL}") case ${SYSTEM_VERSION_NUMBER:0:1} in 9) - GenRepoFiles_RockyLinux "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_RockyLinux "${SYSTEM_VERSION_NUMBER:0:1}" ;; *) - GenRepoFiles_CentOS "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_CentOS "${SYSTEM_VERSION_NUMBER:0:1}" ;; esac ;; "${SYSTEM_CENTOS}") - GenRepoFiles_CentOS "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_CentOS "${SYSTEM_VERSION_NUMBER:0:1}" ;; "${SYSTEM_CENTOS_STREAM}") - GenRepoFiles_CentOSStream "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_CentOSStream "${SYSTEM_VERSION_NUMBER:0:1}" ;; "${SYSTEM_ROCKY}") - GenRepoFiles_RockyLinux "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_RockyLinux "${SYSTEM_VERSION_NUMBER:0:1}" ;; "${SYSTEM_ALMALINUX}") - GenRepoFiles_AlmaLinux "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_AlmaLinux "${SYSTEM_VERSION_NUMBER:0:1}" ;; "${SYSTEM_FEDORA}") - GenRepoFiles_Fedora + gen_repo_files_Fedora ;; "${SYSTEM_OPENCLOUDOS}") - GenRepoFiles_OpenCloudOS "${SYSTEM_VERSION_NUMBER:0:1}" + gen_repo_files_OpenCloudOS "${SYSTEM_VERSION_NUMBER:0:1}" ;; esac ## 使用官方源 @@ -1481,14 +1578,14 @@ function RedHatMirrors() { ## EPEL 附加软件包(安装/换源) case "${SYSTEM_JUDGMENT}" in "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_OPENCLOUDOS}") - [[ "${INSTALL_EPEL}" == "true" ]] && EPELMirrors + [[ "${INSTALL_EPEL}" == "true" ]] && change_mirrors_EPEL ;; esac } ## 更换基于 OpenCloudOS 发行版的软件源 -function OpenCloudOSMirrors() { - GenRepoFiles_OpenCloudOS "${SYSTEM_VERSION_NUMBER:0:1}" +function change_mirrors_OpenCloudOS() { + gen_repo_files_OpenCloudOS "${SYSTEM_VERSION_NUMBER:0:1}" ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then return @@ -1507,8 +1604,8 @@ function OpenCloudOSMirrors() { } ## 更换基于 openEuler 发行版的软件源 -function openEulerMirrors() { - GenRepoFiles_openEuler +function change_mirrors_openEuler() { + gen_repo_files_openEuler ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then return @@ -1525,13 +1622,13 @@ function openEulerMirrors() { } ## 更换基于 openSUSE 发行版的软件源 -function openSUSEMirrors() { +function change_mirrors_openSUSE() { case "${SYSTEM_ID}" in "opensuse-leap") - GenRepoFiles_openSUSE "leap" "${SYSTEM_VERSION_NUMBER}" + gen_repo_files_openSUSE "leap" "${SYSTEM_VERSION_NUMBER}" ;; "opensuse-tumbleweed") - GenRepoFiles_openSUSE "tumbleweed" + gen_repo_files_openSUSE "tumbleweed" ;; esac ## 使用官方源 @@ -1591,7 +1688,7 @@ function openSUSEMirrors() { } ## 更换基于 Arch Linux 发行版的软件源 -function ArchMirrors() { +function change_mirrors_ArchLinux() { ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then SOURCE="mirrors.aliyun.com" @@ -1612,7 +1709,7 @@ function ArchMirrors() { } ## 更换基于 Alpine Linux 发行版的软件源 -function AlpineMirrors() { +function change_mirrors_Alpine() { ## 使用官方源 if [[ "${USE_OFFICIAL_SOURCE}" == "true" ]]; then SOURCE="dl-cdn.alpinelinux.org" @@ -1630,9 +1727,9 @@ ${WEB_PROTOCOL}://${SOURCE}/${SOURCE_BRANCH}/${version_name}/community" >>$File_ } ## 处理命令选项 -function CommandOptions() { +function handle_command_options() { ## 命令帮助 - function Output_Help_Info() { + function output_command_help() { echo -e " 命令选项(参数名/含义/参数值): @@ -1677,39 +1774,39 @@ function CommandOptions() { if [ "$2" ]; then echo "$2" | grep -Eq "\(|\)|\[|\]|\{|\}" if [ $? -eq 0 ]; then - Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" + output_error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" else SOURCE="$(echo "$2" | sed -e 's,^http[s]\?://,,g' -e 's,/$,,')" shift fi else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; --source-security) if [ "$2" ]; then echo "$2" | grep -Eq "\(|\)|\[|\]|\{|\}" if [ $? -eq 0 ]; then - Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" + output_error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" else SOURCE_SECURITY="$(echo "$2" | sed -e 's,^http[s]\?://,,g' -e 's,/$,,')" shift fi else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; --source-vault) if [ "$2" ]; then echo "$2" | grep -Eq "\(|\)|\[|\]|\{|\}" if [ $? -eq 0 ]; then - Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" + output_error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" else SOURCE_VAULT="$(echo "$2" | sed -e 's,^http[s]\?://,,g' -e 's,/$,,')" shift fi else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; ## 使用官方源 @@ -1722,7 +1819,7 @@ function CommandOptions() { SOURCE_BRANCH="$2" shift else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; --branch-security) @@ -1730,7 +1827,7 @@ function CommandOptions() { SOURCE_BRANCH_SECURITY="$2" shift else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; --branch-vault) @@ -1738,7 +1835,7 @@ function CommandOptions() { SOURCE_BRANCH_VAULT="$2" shift else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; ## 指定 Debian 系操作系统的版本代号 @@ -1747,7 +1844,7 @@ function CommandOptions() { DEBIAN_CODENAME="$2" shift else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定版本代号!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定版本代号!" fi ;; ## 优先使用内网地址 @@ -1759,11 +1856,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; ## WEB 协议(HTTP/HTTPS) @@ -1775,11 +1872,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 http 或 https 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 http 或 https 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 WEB 协议(HTTP/HTTPS)!" fi ;; ## 安装 EPEL 附加软件包 @@ -1791,11 +1888,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; --only-epel) @@ -1811,11 +1908,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; ## 备份原有软件源 @@ -1827,11 +1924,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; ## 忽略覆盖备份提示 @@ -1847,11 +1944,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; ## 清理下载缓存 @@ -1863,11 +1960,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; ## 打印源文件修改前后差异 @@ -1876,11 +1973,11 @@ function CommandOptions() { ;; ## 命令帮助 --help) - Output_Help_Info + output_command_help exit ;; *) - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!" ;; esac shift @@ -1896,7 +1993,7 @@ function CommandOptions() { ############################################################################## ## 生成 CentOS 官方 repo 源文件 -function GenRepoFiles_CentOS() { +function gen_repo_files_CentOS() { case "$1" in 8) cat >$Dir_YumRepos/CentOS-Linux-AppStream.repo <<\EOF @@ -2327,7 +2424,7 @@ EOF } ## 生成 CentOS Stream 官方 repo 源文件 -function GenRepoFiles_CentOSStream() { +function gen_repo_files_CentOSStream() { case "$1" in 9) cat >$Dir_YumRepos/centos.repo <<\EOF @@ -2829,7 +2926,7 @@ EOF } ## 生成 Rocky Linux 官方 repo 源文件 -function GenRepoFiles_RockyLinux() { +function gen_repo_files_RockyLinux() { case "$1" in 9) cat >$Dir_YumRepos/rocky.repo <<\EOF @@ -3514,7 +3611,7 @@ EOF } ## 生成 AlmaLinux 官方 repo 源文件 -function GenRepoFiles_AlmaLinux() { +function gen_repo_files_AlmaLinux() { case "$1" in 9) cat >$Dir_YumRepos/almalinux-appstream.repo <<\EOF @@ -4194,7 +4291,7 @@ EOF } ## 生成 Fedora 官方 repo 源文件 -function GenRepoFiles_Fedora() { +function gen_repo_files_Fedora() { cat >$Dir_YumRepos/fedora-cisco-openh264.repo <<\EOF [fedora-cisco-openh264] name=Fedora $releasever openh264 (From Cisco) - $basearch @@ -4449,7 +4546,7 @@ EOF } ## 生成 OpenCloudOS 官方 repo 源文件 -function GenRepoFiles_OpenCloudOS() { +function gen_repo_files_OpenCloudOS() { case "$1" in 9) cat >$Dir_YumRepos/OpenCloudOS.repo <<\EOF @@ -4685,7 +4782,7 @@ EOF } ## 生成 openEuler 官方 repo 源文件 -function GenRepoFiles_openEuler() { +function gen_repo_files_openEuler() { cat >$Dir_YumRepos/openEuler.repo <<\EOF #generic-repos is licensed under the Mulan PSL v2. #You can use this software according to the terms and conditions of the Mulan PSL v2. @@ -4748,7 +4845,7 @@ EOF } ## 生成 openSUSE 官方 repo 源文件 -function GenRepoFiles_openSUSE() { +function gen_repo_files_openSUSE() { case "$1" in "leap") case "$2" in @@ -5027,7 +5124,7 @@ EOF } ## 生成 EPEL 附加软件包官方 repo 源文件 -function GenRepoFiles_EPEL() { +function gen_repo_files_EPEL() { case ${SYSTEM_VERSION_NUMBER:0:1} in 9) cat >$Dir_YumRepos/epel.repo <<\EOF @@ -5392,22 +5489,5 @@ EOF ############################################################################## -## 组合函数 -function Combin_Functions() { - PermissionJudgment - EnvJudgment - CheckCommandOptions - StartTitle - ChooseMirrors - ChooseWebProtocol - ChooseInstallEPEL - CloseFirewall - BackupOriginalMirrors - RemoveOriginMirrors - ChangeMirrors - UpgradeSoftware - RunEnd -} - -CommandOptions "$@" -Combin_Functions +handle_command_options "$@" +main diff --git a/DockerInstallation.sh b/DockerInstallation.sh index a7f50c7..fe33486 100755 --- a/DockerInstallation.sh +++ b/DockerInstallation.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2024-06-07 +## Modified: 2024-07-25 ## License: MIT ## GitHub: https://github.com/SuperManito/LinuxMirrors ## Website: https://linuxmirrors.cn @@ -59,8 +59,10 @@ mirror_list_registry=( SYSTEM_DEBIAN="Debian" SYSTEM_UBUNTU="Ubuntu" SYSTEM_KALI="Kali" +SYSTEM_DEEPIN="Deepin" +SYSTEM_LINUX_MINT="Linuxmint" SYSTEM_REDHAT="RedHat" -SYSTEM_RHEL="RedHat" +SYSTEM_RHEL="Red Hat Enterprise Linux" SYSTEM_CENTOS="CentOS" SYSTEM_CENTOS_STREAM="CentOS Stream" SYSTEM_ROCKY="Rocky" @@ -68,13 +70,22 @@ SYSTEM_ALMALINUX="AlmaLinux" SYSTEM_FEDORA="Fedora" SYSTEM_OPENCLOUDOS="OpenCloudOS" SYSTEM_OPENEULER="openEuler" +SYSTEM_OPENSUSE="openSUSE" +SYSTEM_ARCH="Arch" +SYSTEM_ALPINE="Alpine" -## 定义目录和文件 +## 定义系统版本文件 File_LinuxRelease=/etc/os-release File_RedHatRelease=/etc/redhat-release +File_DebianVersion=/etc/debian_version +File_ArmbianRelease=/etc/armbian-release File_OpenCloudOSRelease=/etc/opencloudos-release File_openEulerRelease=/etc/openEuler-release -File_DebianVersion=/etc/debian_version +File_ArchRelease=/etc/arch-release +File_AlpineRelease=/etc/alpine-release +File_ProxmoxVersion=/etc/pve/.version + +## 定义软件源相关文件或目录 File_DebianSourceList=/etc/apt/sources.list Dir_DebianExtendSource=/etc/apt/sources.list.d Dir_YumRepos=/etc/yum.repos.d @@ -92,15 +103,32 @@ RED='\033[31m' GREEN='\033[32m' YELLOW='\033[33m' BLUE='\033[34m' +PURPLE='\033[35m' +AZURE='\033[36m' 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]' -WORKING='[\033[34m*\033[0m]' +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}]" -function StartTitle() { +function main() { + permission_judgment + collect_system_info + print_start_title + choose_mirrors + close_firewall_service + install_dependency_packages + configure_docker_ce_mirror + install_docker_engine + check_version + run_end +} + +function print_start_title() { [[ -z "${SOURCE}" || -z "${SOURCE_REGISTRY}" ]] && clear 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 |" @@ -110,21 +138,20 @@ function StartTitle() { } ## 报错退出 -function Output_Error() { +function output_error() { [ "$1" ] && echo -e "\n$ERROR $1\n" exit 1 } -## 基础环境判断 -function PermissionJudgment() { +## 权限判定 +function permission_judgment() { if [ $UID -ne 0 ]; then - echo -e "\n$ERROR 权限不足,请使用 Root 用户运行本脚本\n" - exit 1 + output_error "权限不足,请使用 Root 用户运行本脚本" fi } -## 系统判定变量 -function EnvJudgment() { +## 收集系统信息 +function collect_system_info() { ## 定义系统名称 SYSTEM_NAME="$(cat $File_LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")" cat $File_LinuxRelease | grep "PRETTY_NAME=" -q @@ -139,11 +166,11 @@ function EnvJudgment() { elif [ -s $File_openEulerRelease ]; then SYSTEM_FACTIONS="${SYSTEM_OPENEULER}" elif [ -s $File_RedHatRelease ]; then - SYSTEM_FACTIONS="${SYSTEM_REDHAT}" + SYSTEM_FACTIONS="${SYSTEM_REDHAT}" # 注:RedHat 判断优先级需要高于 OpenCloudOS,因为8版本基于红帽而9版本不是 elif [ -s $File_OpenCloudOSRelease ]; then - SYSTEM_FACTIONS="${SYSTEM_OPENCLOUDOS}" # 注:RedHat 判断优先级需要高于 OpenCloudOS,因为8版本基于红帽而9版本不是 + SYSTEM_FACTIONS="${SYSTEM_OPENCLOUDOS}" else - Output_Error "无法判断当前运行环境,当前系统不在本脚本的支持范围内" + output_error "无法判断当前运行环境,当前系统不在本脚本的支持范围内" fi ## 判定系统名称、版本、版本号 case "${SYSTEM_FACTIONS}" in @@ -151,51 +178,46 @@ 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\n本脚本需要通过 lsb_release 指令判断系统具体类型和版本,当前系统可能为精简安装,请自行安装后重新执行脚本!" fi fi SYSTEM_JUDGMENT="$(lsb_release -is)" SYSTEM_VERSION_CODENAME="${DEBIAN_CODENAME:-"$(lsb_release -cs)"}" ;; "${SYSTEM_REDHAT}") - SYSTEM_JUDGMENT="$(cat $File_RedHatRelease | awk -F ' ' '{printf$1}')" + SYSTEM_JUDGMENT="$(awk '{printf $1}' $File_RedHatRelease)" ## Red Hat Enterprise Linux - cat $File_RedHatRelease | grep -q "${SYSTEM_RHEL}" - [ $? -eq 0 ] && SYSTEM_JUDGMENT="${SYSTEM_RHEL}" + grep -q "${SYSTEM_RHEL}" $File_RedHatRelease && SYSTEM_JUDGMENT="${SYSTEM_RHEL}" ## CentOS Stream - cat $File_RedHatRelease | grep -q "${SYSTEM_CENTOS_STREAM}" - [ $? -eq 0 ] && SYSTEM_JUDGMENT="${SYSTEM_CENTOS_STREAM}" + grep -q "${SYSTEM_CENTOS_STREAM}" $File_RedHatRelease && SYSTEM_JUDGMENT="${SYSTEM_CENTOS_STREAM}" ;; - "${SYSTEM_OPENCLOUDOS}") - SYSTEM_JUDGMENT="${SYSTEM_OPENCLOUDOS}" - ;; - "${SYSTEM_OPENEULER}") - SYSTEM_JUDGMENT="${SYSTEM_OPENEULER}" + *) + SYSTEM_JUDGMENT="${SYSTEM_FACTIONS}" ;; esac ## 判定系统处理器架构 - case $(uname -m) in + case "$(uname -m)" in x86_64) - SYSTEM_ARCH="x86_64" + DEVICE_ARCH="x86_64" SOURCE_ARCH="amd64" ;; aarch64) - SYSTEM_ARCH="ARM64" + DEVICE_ARCH="ARM64" SOURCE_ARCH="arm64" ;; armv7l) - SYSTEM_ARCH="ARMv7" + DEVICE_ARCH="ARMv7" SOURCE_ARCH="armhf" ;; armv6l) - SYSTEM_ARCH="ARMv6" + DEVICE_ARCH="ARMv6" SOURCE_ARCH="armhf" ;; i386 | i686) - Output_Error "Docker Engine 不支持安装在 x86_32 架构的环境上!" + output_error "Docker Engine 不支持安装在 x86_32 架构的环境上!" ;; *) - SYSTEM_ARCH=$(uname -m) + DEVICE_ARCH=$(uname -m) SOURCE_ARCH=armhf ;; esac @@ -210,13 +232,13 @@ function EnvJudgment() { "${SYSTEM_RHEL}") SOURCE_BRANCH="rhel" ;; - "${SYSTEM_KALI}") - # Kali 使用 Debian 12 的 docker ce 源 + "${SYSTEM_KALI}" | "${SYSTEM_DEEPIN}" | "${SYSTEM_LINUX_MINT}") + # 部分 Debian 系统衍生操作系统使用 Debian 12 的 docker ce 源 SOURCE_BRANCH="debian" SYSTEM_VERSION_CODENAME="bullseye" ;; *) - Output_Error "当前系统不在本脚本的支持范围内" + output_error "当前系统不在本脚本的支持范围内" ;; esac ## 定义软件源更新文字 @@ -230,9 +252,9 @@ function EnvJudgment() { esac } -function ChooseMirrors() { +function choose_mirrors() { ## 打印软件源列表 - function PrintMirrorsList() { + function print_mirrors_list() { local tmp_mirror_name tmp_mirror_url arr_num default_mirror_name_length tmp_mirror_name_length tmp_spaces_nums a i j ## 计算字符串长度 function StringLength() { @@ -276,7 +298,7 @@ function ChooseMirrors() { fi } - function Title() { + function print_title() { local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}" local arch=""${DEVICE_ARCH}"" local date="$(date "+%Y-%m-%d %H:%M:%S")" @@ -287,7 +309,7 @@ function ChooseMirrors() { echo -e " 系统时间 ${BLUE}${date} ${timezone}${PLAIN}" } - Title + print_title if [[ -z "${INSTALL_LATESTED_DOCKER}" ]]; then ## 是否手动选择安装版本 local CHOICE_A=$(echo -e "\n${BOLD}└─ 是否安装最新版本的 Docker Engine? [Y/n] ${PLAIN}") @@ -312,7 +334,7 @@ function ChooseMirrors() { local mirror_list_name if [[ -z "${SOURCE}" ]]; then local mirror_list_name="mirror_list_docker_ce" - PrintMirrorsList "${mirror_list_name}" 38 + print_mirrors_list "${mirror_list_name}" 38 local CHOICE_B=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker CE 源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}") while true; do read -p "${CHOICE_B}" INPUT @@ -337,7 +359,7 @@ function ChooseMirrors() { if [[ -z "${SOURCE_REGISTRY}" ]]; then mirror_list_name="mirror_list_registry" - PrintMirrorsList "${mirror_list_name}" 44 + print_mirrors_list "${mirror_list_name}" 44 local CHOICE_C=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker Registry 源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}") while true; do read -p "${CHOICE_C}" INPUT @@ -362,7 +384,7 @@ function ChooseMirrors() { } ## 关闭防火墙和SELinux -function CloseFirewall() { +function close_firewall_service() { if [ ! -x /usr/bin/systemctl ]; then return fi @@ -391,7 +413,7 @@ function CloseFirewall() { } ## 安装环境包 -function EnvironmentInstall() { +function install_dependency_packages() { ## 删除原有源 case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") @@ -413,7 +435,7 @@ function EnvironmentInstall() { esac VERIFICATION_SOURCESYNC=$? if [ ${VERIFICATION_SOURCESYNC} -ne 0 ]; then - Output_Error "${SYNC_MIRROR_TEXT}出错,请先确保软件包管理工具可用!" + output_error "${SYNC_MIRROR_TEXT}出错,请先确保软件包管理工具可用!" fi echo -e "\n$COMPLETE ${SYNC_MIRROR_TEXT}结束\n" case "${SYSTEM_FACTIONS}" in @@ -434,8 +456,8 @@ function EnvironmentInstall() { esac } -## 卸载旧版本的 Docker Engine -function RemoveOldVersion() { +## 卸载 Docker Engine 原有版本软件包 +function uninstall_original_version() { systemctl disable --now docker >/dev/null 2>&1 sleep 2s case "${SYSTEM_FACTIONS}" in @@ -451,7 +473,7 @@ function RemoveOldVersion() { } ## 配置 Docker CE 源 -function ConfigureDockerCEMirror() { +function configure_docker_ce_mirror() { case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") ## 安装密钥 @@ -484,9 +506,9 @@ function ConfigureDockerCEMirror() { } ## 安装 Docker Engine -function DockerEngine() { +function install_docker_engine() { ## 导出可安装的版本列表 - function Export_VersionList() { + function export_version_list() { case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCEVersionFile @@ -503,7 +525,7 @@ function DockerEngine() { } ## 安装 - function Install() { + function install_main() { if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") @@ -514,7 +536,7 @@ function DockerEngine() { ;; esac else - Export_VersionList + export_version_list echo -e "\n${GREEN} --------- 请选择你要安装的版本,如:20.10.24 ---------- ${PLAIN}\n" cat $DockerVersionFile echo -e '\n注:以上可供选择的安装版本由官方源提供,此列表以外的版本则无法安装在当前操作系统上' @@ -537,9 +559,9 @@ function DockerEngine() { done case "${SYSTEM_FACTIONS}" in "${SYSTEM_DEBIAN}") - CheckVersion="$(echo ${DOCKER_VERSION} | cut -c1-2)" + check_version="$(echo ${DOCKER_VERSION} | cut -c1-2)" CheckSubversion="$(echo ${DOCKER_VERSION} | cut -c4-5)" - case ${CheckVersion} in + case ${check_version} in 18) if [ ${CheckSubversion} == "09" ]; then INSTALL_JUDGMENT="5:" @@ -560,8 +582,8 @@ function DockerEngine() { fi } - ## 修改 Docker Registry 源 - function RegistryMirror() { + ## 修改 Docker Registry 镜像仓库源 + function change_docker_registry_mirror() { if [[ "${REGISTRY_SOURCEL}" != "registry.hub.docker.com" ]]; then if [ -d $DockerDir ] && [ -e $DockerConfig ]; then if [ -e $DockerConfigBackup ]; then @@ -605,20 +627,20 @@ function DockerEngine() { ;; esac if [ $? -eq 0 ]; then - Export_VersionList + export_version_list DOCKER_INSTALLED_VERSION=$(docker -v | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}") DOCKER_VERSION_LATEST=$(cat $DockerVersionFile | head -n 1) if [[ "${DOCKER_INSTALLED_VERSION}" == "${DOCKER_VERSION_LATEST}" ]]; then if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then echo -e "\n$COMPLETE 检测到已安装最新版本的 Docker Engine,跳过安装" - RegistryMirror + change_docker_registry_mirror if [[ $(systemctl is-active docker) == "active" ]]; then systemctl restart docker fi echo '' systemctl enable --now docker >/dev/null 2>&1 - CheckVersion - RunEnd + check_version + run_end exit else local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装最新版本的 Docker Engine,是否继续安装其它版本? [Y/n] ${PLAIN}") @@ -635,9 +657,9 @@ function DockerEngine() { case $INPUT in [Yy] | [Yy][Ee][Ss]) echo -en "\n$WORKING 正在卸载之前的版本...\n" - RemoveOldVersion + uninstall_original_version echo -e "\n$COMPLETE 卸载完毕\n" - Install + install_main ;; [Nn] | [Nn][Oo]) ;; *) @@ -646,16 +668,16 @@ function DockerEngine() { esac rm -rf $DockerVersionFile else - RemoveOldVersion - Install + uninstall_original_version + install_main fi - RegistryMirror + change_docker_registry_mirror systemctl stop docker >/dev/null 2>&1 systemctl enable --now docker >/dev/null 2>&1 } ## 查看版本并验证安装结果 -function CheckVersion() { +function check_version() { if [ -x /usr/bin/docker ]; then echo -en "\n验证安装版本:" docker -v @@ -694,7 +716,7 @@ function CheckVersion() { } ## 运行结束 -function RunEnd() { +function run_end() { 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' @@ -706,9 +728,9 @@ function RunEnd() { } ## 处理命令选项 -function CommandOptions() { +function handle_command_options() { ## 命令帮助 - function Output_Help_Info() { + function output_command_help() { echo -e " 命令选项(参数名/含义/参数值): @@ -730,13 +752,13 @@ function CommandOptions() { if [ "$2" ]; then echo "$2" | grep -Eq "\(|\)|\[|\]|\{|\}" if [ $? -eq 0 ]; then - Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" + output_error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" else SOURCE="$(echo "$2" | sed -e 's,^http[s]\?://,,g' -e 's,/$,,')" shift fi else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; ## 指定 Docker Registry 仓库地址 @@ -744,13 +766,13 @@ function CommandOptions() { if [ "$2" ]; then echo "$2" | grep -Eq "\(|\)|\[|\]|\{|\}" if [ $? -eq 0 ]; then - Output_Error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" + output_error "检测到无效参数值 ${BLUE}$2${PLAIN} ,请输入有效的地址!" else SOURCE_REGISTRY="$(echo "$2" | sed -e 's,^http[s]\?://,,g' -e 's,/$,,')" shift fi else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定软件源地址!" fi ;; ## 指定 Debian 版本代号 @@ -759,7 +781,7 @@ function CommandOptions() { DEBIAN_CODENAME="$2" shift else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定版本代号!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定版本代号!" fi ;; ## 安装最新版本 @@ -771,11 +793,11 @@ function CommandOptions() { shift ;; *) - Output_Error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该参数后指定 true 或 false 作为参数值!" ;; esac else - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请在该参数后指定 true 或 false 作为参数值!" fi ;; ## 忽略覆盖备份提示 @@ -784,11 +806,11 @@ function CommandOptions() { ;; ## 命令帮助 --help) - Output_Help_Info + output_command_help exit ;; *) - Output_Error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!" + output_error "检测到 ${BLUE}$1${PLAIN} 为无效参数,请确认后重新输入!" ;; esac shift @@ -797,19 +819,5 @@ function CommandOptions() { IGNORE_BACKUP_TIPS="${IGNORE_BACKUP_TIPS:-"false"}" } -## 组合函数 -function Combin_Function() { - PermissionJudgment - EnvJudgment - StartTitle - ChooseMirrors - CloseFirewall - EnvironmentInstall - ConfigureDockerCEMirror - DockerEngine - CheckVersion - RunEnd -} - -CommandOptions "$@" -Combin_Function +handle_command_options "$@" +main diff --git a/README.md b/README.md index e73a8ee..812ca77 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,10 @@  Kali Linux 2.0 ~ 2024 + +  Linux Mint + 19.0 ~ 21 / LMDE 6 +  Deepin all diff --git a/docs/assets/images/icon/linux-mint.ico b/docs/assets/images/icon/linux-mint.ico new file mode 100644 index 0000000000000000000000000000000000000000..50089a321ba823597bb397594572f05c2debc92b GIT binary patch literal 9662 zcmds7TWnNC7@h_%k0zR+MiYGyHSvYSCyj2m5^pa?L)5?%A}Qyb(pDph`k-tAz9^Tf z(L^NhU`&9h5xQr)jUr8nv=n;r(x!#BX(2U{LT%SJw(GLv|LyK9b7s$N&+eA3)6CA9 zIsfJR|1)RKKmU}m8v0wimeKG1?C=`KRx`#Prb6IF~?vOM0dtq#SES3^;KU#+RP zQ5~jwmFiNi;u>RZpaCs-Dv8NU_PXyH?g+=UZ6Qt;j+oXPjvEh@f?4o}WBQ8~_PG`N_4jCw-t`v*jvy^P%T0v+-(~ar zb?m~XRLIn}2Ekq%)$4B{Zh;?dI&A7&im{=#ReOo}QdNQF8Kj(#gf!MpGBO~`OCQaLzw6rchuogSqvz^xCONL_jB)xS{_D&rFL(Ln z>IJU<{Gq!Yv@QXolMVEY-gfiDr-MiNwRF1N(DU-rJk1ZCk8)Z!9PJ3jw72Z=Kh>(; zL)aa^sgS!|<>2{NNBo2_VfURzT;=5Z?PoqA&)EC@pVShcT9^)0!E0Bb>&@;KM;pRX zW4HVa5Q{nazAk3)vBXq?nvvN_-qf|1 zH#+Isc6xV#?B8a__|t7ofpM$4o{2Z{!N0}}^fb^~q0;92QNzgNH}#(UxbhABdNf`j z_qEQQ&TyK)WT(p zt`nqNwNvV+v)GLd(pUj~@0DST%mG@bRr=3|zO{V6&<{cb*>ZtyRgT=J*yxp7)A(2( zQ?L84jL0H6`ZtnB)}323+vPF!x|;D5))>`M6|>y0YWz|C0%1jNpkPjjv8u*z>eGZ1 zIgXWzfAN2Sf2Gf#u@yUivhVK-Uq4s&_lxq68%v!(YK(#Xr7Bb1bNZq2j2|cuoXuxC z$8Ubte>KLNOV0CWs=q|v4}QdJYU#N=nAwkG zzuz-Gq~6Z-y=Xog`X=uKfk$f306PlhlbfV*3y&ZC>rcGPm#!skF$Nu6OeHzwI^jaz zJ&T_90NMTHf*q|N{NOtplvAFVenkN8gtjpGNu)aO~sM0=}L72i^S6 zk%z;YBXG+tJ%e`y4$&5iU+`f+`(E!CRQL1Eox5x?VI22C2YSKl)>7_dyNp@B#<>Ua z4#@mL@yjyGc-`lgKZGr6{?^alwv70kp8?IAaBDq|RXt0csjVkWRh2)-IglrCi2&yw z%i>p;y;EL4<<}%=zAvlc{D{t8G~a-22s3ku=3d?xe*9G)ngq^)Y#v#I4S;w+~x-kh_<2`9(k|8!66nvirEqUbLMsAul#VHJPh3xiQ*ngT~lkcLo#$ z5a*E^&Kct=+6SPWW$ZSz9gM9)8=?OnLJQ&alSaFPF(M}h#um}u#~85@BV!Y2Y4(b? z1N~Kui8g|M4P$DH;pHq5D6_%QfpH1%1p1Oa!cJkg@PqIRxhUhOyx%% ![](assets/images/brand/light/2.png#only-light){ width="300" } ![](assets/images/brand/dark/2.png#only-dark){ width="300" } -
GNU/Linux 更换系统软件源脚本
+
GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
-- :material-source-branch:{ .lg .middle } __多软件源适配__ +- :material-source-branch:{ .lg .middle } __多元软件源适配__ --- - 考察了国内镜像站的系统适配情况,测试了下载速度与IPv6协议的兼容性 - 另外,提供了全网收集的中国大陆教育网镜像站和海外镜像站供选择 + 深入考察了国内镜像站的系统适配情况,测试了下载速度与IPv6兼容性 + 另外提供全网搜集的中国大陆教育网镜像站和海外镜像站供用户选择 -- :material-rocket-launch-outline:{ .lg .middle } __低技术成本__ +- :material-rocket-launch-outline:{ .lg .middle } __零技术门槛__ --- - 无需掌握相关技术,文档提供了全面的相关知识储备和操作指引 - 还提供了一些常见问题的解决方法 + 无需了解相关技术,文档提供了全面的知识储备和操作指引,轻松上手 + 文档还提供了一些常见问题的解决方法以及一些高级用法的用例 -- :octicons-command-palette-24:{ .lg .middle } __脚本一键运行__ +- :material-vector-polyline:{ .lg .middle } __广泛的系统支持__ --- - 脚本使换源变得更简单,通过交互默认进行更换,并根据用户选择自动配置 - 同时,提供了强大的命令选项,可用于自动化项目以实现无交互操作 + 适配众多操作系统,涵盖主流版本,精准识别系统类型及其版本 + 脚本兼容性较高,不支持的系统会有相应提示并无操作跳出 + +- :material-arm-flex-outline:{ .lg .middle } __脚本功能强大__ + + --- + + 脚本使换源变得更简单,默认交互运行,逐步引导用户更换软件源 + 同时提供了强大的命令选项,可实现各种定制需求和无交互操作 - :material-scale-balance:{ .lg .middle } __开源,MIT__ --- - 项目已设立开源许可协议,传播时请在显著位置标注来源和作者 - 请尊重作者的知识成果,建议通过命令直接调用脚本 + 项目已设立开源许可协议,脚本代码完全开源且免费使用 + 请尊重作者的知识成果,传播时请在显著位置标注来源和作者 - :octicons-report-24:{ .lg .middle } __意见与建议__ --- - 如有适配请求或意见与建议你可以提交至 [Issues](https://github.com/SuperManito/LinuxMirrors/issues) - 如果你需要提交代码请前往 GitHub 仓库提交 [Pull Requests](https://github.com/SuperManito/LinuxMirrors/pulls) + 如有适配请求或意见与建议请可以提交至 [Issues](https://github.com/SuperManito/LinuxMirrors/issues) + 若愿意贡献代码,请前往 GitHub 仓库提交 [Pull Requests](https://github.com/SuperManito/LinuxMirrors/pulls)
| 系统名称 | 适配版本 | | --- | :---: | -| Debian | 8.0 ~ 13 | -| Ubuntu :material-information-outline:{ title="支持乌班图家族衍生操作系统,例如 优麒麟 Kubuntu
此外由于迭代速度较快并不直接支持所有非长期支持(LTS)的版本,具体详见使用文档中的高级用法" } | 14.04 ~ 24 | +| Debian | 8.0 ~ 13 | +| Ubuntu :material-information-outline:{ title="支持乌班图家族衍生操作系统,例如 优麒麟 Kubuntu
此外由于迭代速度较快并不直接支持所有非长期支持(LTS)的版本,具体详见使用文档中的高级用法" } | 14.04 ~ 24 | | Kali Linux | 2.0 ~ 2024 | +| Linux Mint | 19.0 ~ 21 / LMDE 6 | | Deepin | all | | Armbian | all | | Proxmox | all | diff --git a/docs/mirrors/index.md b/docs/mirrors/index.md index 6570abb..c636ff8 100644 --- a/docs/mirrors/index.md +++ b/docs/mirrors/index.md @@ -10,22 +10,22 @@ hide: > 下方列表中的镜像站均支持 `Debian` `Ubuntu` `CentOS` `openSUSE` `openEuler` 软件源,列表根据单位性质、地理位置、名称长度进行排序,与实际速度无关 -| 镜像站 | IPv6 | Arch | Kali | Deepin | Rocky | AlmaLinux | EPEL | Fedora | OpenCloudOS | Alpine | Armbian | Proxmox | -| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | -| [阿里云](https://mirrors.aliyun.com "mirrors.aliyun.com") | :supported: | :supported: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :unsupport: | -| [腾讯云](https://mirrors.tencent.com "mirrors.tencent.com") | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :unsupport: | -| [华为云](https://mirrors.huaweicloud.com "mirrors.huaweicloud.com") | :unsupport: | :supported: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | -| [网易](https://mirrors.163.com "mirrors.163.com") | :unsupport: | :supported: | :unsupport: | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | :unsupport: | :unsupport: | :unsupport: | :unsupport: | -| [火山引擎](https://mirrors.volces.com "mirrors.volces.com") | :unsupport: | :unsupport: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | -| [清华大学](https://mirrors.tuna.tsinghua.edu.cn "mirrors.tuna.tsinghua.edu.cn") | :supported: | :supported: | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | -| [北京大学](https://mirrors.pku.edu.cn "mirrors.pku.edu.cn") | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | :unsupport: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | :unsupport: | -| [浙江大学](https://mirrors.zju.edu.cn "mirrors.zju.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | -| [南京大学](https://mirrors.nju.edu.cn "mirrors.nju.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | -| [兰州大学](https://mirror.lzu.edu.cn "mirror.lzu.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | -| [上海交通大学](https://mirror.sjtu.edu.cn "mirror.sjtu.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :incompatible: | :supported: | :unsupport: | -| [重庆邮电大学](https://mirrors.cqupt.edu.cn "mirrors.cqu.edu.cn") | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | -| [中国科学技术大学](https://mirrors.ustc.edu.cn "mirrors.ustc.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | -| [中国科学院软件研究所](https://mirror.iscas.ac.cn "mirror.iscas.ac.cn") | :unsupport: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | +| 镜像站 | IPv6 | Arch Linux | Kali | Deepin | Rocky | AlmaLinux | EPEL | Fedora | OpenCloudOS | Alpine | Armbian | Proxmox | Linux Mint | +| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | +| [阿里云](https://mirrors.aliyun.com "mirrors.aliyun.com") | :supported: | :supported: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | +| [腾讯云](https://mirrors.tencent.com "mirrors.tencent.com") | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | +| [华为云](https://mirrors.huaweicloud.com "mirrors.huaweicloud.com") | :unsupport: | :supported: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | :supported: | +| [网易](https://mirrors.163.com "mirrors.163.com") | :unsupport: | :supported: | :unsupport: | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | :unsupport: | :unsupport: | :unsupport: | :unsupport: | :supported: | +| [火山引擎](https://developer.volcengine.com/mirror "mirrors.volces.com") | :unsupport: | :unsupport: | :supported: | :supported: | :incompatible: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | :unsupport: | +| [清华大学](https://mirrors.tuna.tsinghua.edu.cn "mirrors.tuna.tsinghua.edu.cn") | :supported: | :supported: | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :supported: | +| [北京大学](https://mirrors.pku.edu.cn "mirrors.pku.edu.cn") | :supported: | :supported: | :unsupport: | :unsupport: | :supported: | :unsupport: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | :unsupport: | :unsupport: | +| [浙江大学](https://mirrors.zju.edu.cn "mirrors.zju.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | :supported: | +| [南京大学](https://mirrors.nju.edu.cn "mirrors.nju.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :supported: | +| [兰州大学](https://mirror.lzu.edu.cn "mirror.lzu.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :unsupport: | :unsupport: | :supported: | +| [上海交通大学](https://mirror.sjtu.edu.cn "mirror.sjtu.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :incompatible: | :incompatible: | :supported: | :incompatible: | :supported: | :unsupport: | :supported: | +| [重庆邮电大学](https://mirrors.cqupt.edu.cn "mirrors.cqu.edu.cn") | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :unsupport: | +| [中国科学技术大学](https://mirrors.ustc.edu.cn "mirrors.ustc.edu.cn") | :supported: | :supported: | :supported: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :unsupport: | :supported: | :supported: | :supported: | :supported: | +| [中国科学院软件研究所](https://mirror.iscas.ac.cn "mirror.iscas.ac.cn") | :unsupport: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | :supported: | ???+ question "使用帮助" diff --git a/docs/other/index.md b/docs/other/index.md index af195b1..f5f2c95 100644 --- a/docs/other/index.md +++ b/docs/other/index.md @@ -5,28 +5,39 @@ hide: - footer --- -## :fontawesome-brands-docker:{style="color: #086dd7"} Docker 一键安装脚本 +## :fontawesome-brands-docker:{style="color: #086dd7"} Docker 安装脚本 + +支持 `选择或更换软件源以及镜像仓库`、`安装指定版本`、`重装` 等功能 +脚本参考 [官方文档](https://docs.docker.com/engine/install) 使用包管理工具实现安装,支持的系统详见下方表格 - - + + - - + + - - + + - - + + - - + + + + + + + + + +
 Debian CentOS Debian Red Hat Enterprise Linux
 Ubuntu Rocky Linux Ubuntu Fedora
 Kali Linux AlmaLinux Kali Linux CentOS
 Red Hat Enterprise Linux OpenCloudOS Linux Mint Rocky Linux
 Fedora openEuler Deepin AlmaLinux
Armbian OpenCloudOS
Proxmox openEuler
@@ -81,7 +92,7 @@ bash <(curl -sSL https://linuxmirrors.cn/docker.sh) apt-get remove -y docker* containerd.io runc && apt-get autoremove ``` - > `Debian`   `Ubuntu`   `Kali`   `Deepin`   `Armbian` + > `Debian`   `Ubuntu`   `Kali`   `Linux Mint`   `Deepin`   `Armbian`   `Proxmox` === "RedHat 系 / OpenCloudOS / openEuler" diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index de2f977..ec20274 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,5 +1,6 @@ :root { - --md-code-font: 'SF Mono'; + --md-text-font: system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", "Segoe UI", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --md-code-font: "SF Mono"; --md-primary-fg-color--light: hsl(0, 0%, 100%, 0.33); --md-default-bg-color--light: #ffffff; --md-default-bg-color--dark: hsla(var(--md-hue),15%,14%,1); @@ -17,7 +18,7 @@ background-color: hsla(240, 4%,11%, 0.33); } @font-face { - font-family: 'SF Mono'; + font-family: "SF Mono"; src: url('./fonts/SF-Mono-Regular.otf'); } @keyframes heart { diff --git a/docs/use/command-options.md b/docs/use/command-options.md index 7309e42..b0c21e9 100644 --- a/docs/use/command-options.md +++ b/docs/use/command-options.md @@ -44,9 +44,10 @@ bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
| 系统名称 | 涉及的分支名称 | | --- | :---: | -| Debian | debian / debian-archive | -| Ubuntu | ubuntu / ubuntu-ports | +| Debian | debian / debian-archive | +| Ubuntu | ubuntu / ubuntu-ports | | Kali Linux | kali | +| Linux Mint | linuxmint / ubuntu / debian | | Deepin | deepin | | Armbian | armbian | | Proxmox | proxmox | diff --git a/docs/use/help.md b/docs/use/help.md index 293db50..68f3dd0 100644 --- a/docs/use/help.md +++ b/docs/use/help.md @@ -9,7 +9,7 @@ apt-get install -y curl ``` - > `Debian`   `Ubuntu`   `Kali`   `Deepin`   `Armbian` + > `Debian`   `Ubuntu`   `Kali`   `Linux Mint`   `Deepin`   `Armbian`   `Proxmox` 新装系统需要先执行一遍更新 `apt-get update` @@ -81,7 +81,7 @@ apt-get update ``` - > `Debian`   `Ubuntu`   `Kali`   `Deepin`   `Armbian` + > `Debian`   `Ubuntu`   `Kali`   `Linux Mint`   `Deepin`   `Armbian`   `Proxmox` === "RedHat 系 / OpenCloudOS / openEuler" diff --git a/docs/use/index.md b/docs/use/index.md index 3dfbd10..e8310e3 100644 --- a/docs/use/index.md +++ b/docs/use/index.md @@ -95,7 +95,7 @@ hide: --- - 如果你使用的系统终端界面不支持 `UTF-8` 编码那么将无法正常显示中文内容,导致无法正确选择交互内容。大部分系统都会自动开启该服务,否则请参考[启用方法](help.md#关于开启-ssh-远程登录的方法) + 如果你使用的系统终端界面不支持 `UTF-8` 编码那么将无法正常显示中文内容,导致无法查看交互内容。大部分系统都会自动开启该服务,否则请参考[启用方法](help.md#关于开启-ssh-远程登录的方法) - :material-numeric-3:{style="color: #3CA7E5" .lg} __如果是在新系统上首次执行脚本__ @@ -113,7 +113,7 @@ hide: 默认禁用了`deb-src`源码仓库和`proposed`预发布软件源,若需启用请将 `/etc/apt/sources.list` 文件中相关内容的所在行取消注释 - > `Debian`   `Ubuntu`   `Kali`   `Deepin`   `Armbian` + > `Debian`   `Ubuntu`   `Kali`   `Linux Mint`   `Deepin`   `Armbian`   `Proxmox` === "RedHat 系 / OpenCloudOS / openEuler" diff --git a/mkdocs.yml b/mkdocs.yml index 8261bc7..9774f63 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -143,12 +143,12 @@ plugins: - glightbox nav: - "介绍": index.md - - "软件源": mirrors/index.md - "使用方法": - "使用方法": use/index.md - "常见问题": use/help.md - "执行流程": use/execution-flow.md - "高级用法": - "命令选项": use/command-options.md + - "软件源列表": mirrors/index.md - "其它工具": other/index.md - "社区": community/index.md diff --git a/requirements.txt b/requirements.txt index b45f3b6..61397f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -mkdocs-material==9.5.29 +mkdocs-material==9.5.30 mkdocs-glightbox==0.4.0 mkdocs-exclude-search==0.6.6 \ No newline at end of file