跳转至

使用方法

一键执行命令#

bash <(curl -sSL https://linuxmirrors.cn/main.sh)
bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh)
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)

实时同步、无延迟,国内网络环境下推荐使用

bash <(curl -sSL https://raw.gitcode.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)

同步存在1小时延迟

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/ChangeMirrors.sh)
bash <(curl -sSL https://edgeone.linuxmirrors.cn/main.sh)

不建议在国内网络环境下使用

bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad
bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) --abroad
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh) --abroad

实时同步、无延迟,国内网络环境下推荐使用

bash <(curl -sSL https://raw.gitcode.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh) --abroad

同步存在1小时延迟

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/ChangeMirrors.sh) --abroad
bash <(curl -sSL https://edgeone.linuxmirrors.cn/main.sh) --abroad

不建议在国内网络环境下使用

bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu
bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) --edu
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh) --edu

实时同步、无延迟,国内网络环境下推荐使用

bash <(curl -sSL https://raw.gitcode.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh) --edu

同步存在1小时延迟

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/ChangeMirrors.sh) --edu
bash <(curl -sSL https://edgeone.linuxmirrors.cn/main.sh) --edu

不建议在国内网络环境下使用

使用帮助

选项卡分别代表脚本内置软件源(镜像站)类型和获取脚本途径,请在使用前检查目标镜像站是否支持你所使用的操作系统,可以在软件源列表中查看。
默认自动备份原有软件源内容,如需了解更多请翻阅下方文档。若使用过程中的某些选项令你疑惑不解,那么在选择软件源后一路回车即是最佳实践。

支持在系统原有软件源损坏、缺失、无效等异常环境下使用,无需额外安装任何依赖。

关于软件源的选择(新用户必读)

如果你不了解这些镜像站那么建议使用 阿里云 (兼容性高、可用性强)中国科学技术大学 (速度快),请不要陷入测速焦虑,内置的软件源一般不会有太大的差异。
本项目脚本是一个自动化运维工具,不会对镜像站进行主观的优劣排序和定制适配,用户的选择应该是自由的,这也是为了开源软件精神能够得到更好的延续。

  • 需要 ROOT 权限


    请使用 root 账户运行本脚本,切换命令为 sudo -isu root。不同系统使用的命令不同,因为部分系统没有在初始安装时为 root 账户设置密码(例如 Ubuntu)或系统默认禁止 root 账户登录。

  • 建议使用现代化的 SSH 客户端应用


    如果系统命令行界面的中文显示乱码,将导致无法查看交互内容,此外部分系统 GUI 图形界面的终端应用可能存在一些无法预料的显示问题。部分系统会自动开启 SSH 服务,否则请参考开启方法

  • 如果是在新装系统上首次执行脚本


    当前依赖 curl 指令获取脚本内容,但部分操作系统未预装此软件包,将会报错 Command not found,安装方法详见下方 关于报错 Command not found。脚本本身与 curl wget 指令无关,不会下载任何内容。

  • 脚本运行期间需要交互选择配置


    请通过方向键 UpDownLeftRightWASD 控制选项并按 Enter 回车键确认。如果发现交互异常请改变终端软件的窗口大小后重试,避免窗口铺满全屏。

常见问题#

  • 关于报错 Command not found#

    此报错是由于系统没有安装 curl 软件包导致,安装命令如下

    apt-get install -y curl
    

    Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS   openKylin

    新装系统需要先执行一遍更新 apt-get update

    dnf install -y curl || yum install -y curl
    

    Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

    zypper install curl
    
    pacman -S curl
    
    apk --no-cache add -f curl bash ncurses
    
    emerge --ask curl
    
    nix-env -iA nixos.curl
    
    安装不上?(点击展开查看其它解决方法)

    假如系统原有软件源是无效的导致安装不上 curl 软件包,那么对于 Linux 初学者来说可能会比较麻烦,这里提供几个在线获取脚本的应急方法

    适用于大部分操作系统(Alpine Linux 除外),python3 要是不存在那就再试试 python 指令

    python3 -c "import urllib.request; urllib.request.urlretrieve('https://linuxmirrors.cn/main.sh', 'main.sh')"
    

    一般没有预装 curl 软件包的系统也不会预装 wget 软件包,所以大概率这个方法应该是不行的

    wget https://linuxmirrors.cn/main.sh
    

    如果可以访问系统 GUI 图像界面和桌面的话那可以直接在浏览器中打开链接下载脚本,很多系统都会预装 Firefox 火狐浏览器

    之后再执行脚本即可

    bash main.sh
    
    bash main.sh --abroad
    
    bash main.sh --edu
    

    如果以上方法试了都不行,那就复制源码至本地新建任意名称的 .sh 脚本,粘贴源码内容后通过 bash 指令手动执行。

  • 备份原有软件源#

    脚本会自动备份原有软件仓库配置文件,备份路径为原有文件或目录的绝对路径加上 .bak 后缀,例如 /etc/apt/sources.list => /etc/apt/sources.list.bak,当检查到已存在备份内容时会询问是否覆盖备份。

  • 还原已备份的软件源#

    点击展开查看
    cp -rf /etc/apt/sources.list.bak /etc/apt/sources.list
    apt-get update
    
    system_name="$(lsb_release -is | tr '[:upper:]' '[:lower:]')"
    cp -rf "/etc/apt/sources.list.d/${system_name}.sources.bak" "/etc/apt/sources.list.d/${system_name}.sources"
    apt-get update
    

    Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS   openKylin

    cp -rf /etc/yum.repos.d.bak /etc/yum.repos.d
    yum makecache
    

    Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

    cp -rf /etc/zypp/repos.d.bak /etc/zypp/repos.d
    zypper ref
    
    cp -rf /etc/pacman.d/mirrorlist.bak /etc/pacman.d/mirrorlist
    pacman -Sy
    
    cp -rf /etc/apk/repositories.bak /etc/apk/repositories
    apk update -f
    
    cp -rf /etc/portage/make.conf.bak /etc/portage/make.conf
    [ -d /etc/portage/repos.conf ] && cp -rf /etc/portage/repos.conf/gentoo.conf.bak /etc/portage/repos.conf/gentoo.conf
    emerge --sync --quiet
    
    cp -rf /etc/nix/nix.conf.bak /etc/nix/nix.conf
    
  • 关于开启 SSH 远程登录的方法#

    点击展开查看

    命令以及配置步骤仅供参考,注意灵活变通

    • 验证是否已安装 SSH 服务

      ls /etc | grep ssh
      

      如果没有这个文件夹说明系统未安装 SSH 服务,你需要通过包管理工具安装 openssh-server 软件包,安装命令如下:

      apt-get install -y openssh-server
      

      Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS   openKylin

      新装系统需要先执行一遍更新 apt-get update

      dnf install -y openssh-server || yum install -y openssh-server
      

      Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

      zypper install openssh-server
      
      pacman -S openssh
      
      apk --no-cache add -f openssh
      
      emerge --ask --changed-use --oneshot net-misc/openssh
      

      不同系统上的软件包名称有所差异,如果提示找不到该软件包可尝试使用通配符 openssh* 进行安装

    • 配置 SSH 服务

      允许 root 账户登录
      cat /etc/ssh/sshd_config | grep -Eq "^[# ]?PermitRootLogin " ; [ $? -eq 0 ] && sed -i 's/^[# ]\?PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config || echo -e "\nPermitRootLogin yes" >> /etc/ssh/sshd_config
      
      启用密码认证
      cat /etc/ssh/sshd_config | grep -Eq "^[# ]?PasswordAuthentication " ; [ $? -eq 0 ] && sed -i 's/^[# ]\?PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config || echo -e "\nPasswordAuthentication yes" >> /etc/ssh/sshd_config
      
    • 启动/重启 SSH 服务

      for ssh_svc in sshd ssh; do systemctl restart "${ssh_svc}" 2>/dev/null && break ; systemctl enable --now "${ssh_svc}" 2>/dev/null && break ; done
      

    友情提示:如果你正在使用公网服务器,建议关闭 SSH 密码认证方式并设置密钥登录。

  • 关于未显示方向键交互控制界面#

    如果发现交互界面是输入而不是新式的方向键控制,那么请自行安装 ncursesnano 软件包,新式的按键交互依赖 tput 指令实现。

  • 关于未启用的软件源仓库#

    很多系统的软件源会启用多个软件仓库配置,脚本遵循系统默认设置,默认不启用的软件源(仓库)不会在运行完本脚本后被启用,但是它们也随脚本更换了目标软件源(镜像站)地址,具体启用方法如下:

    默认禁用了deb-src源码仓库和proposed预发布软件源,若需启用请将 /etc/apt/sources.list 文件中相关内容的所在行取消注释

    Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS   openKylin

    部分仓库默认没有启用,若需启用请将 /etc/yum.repos.d 目录下相关 repo 文件中的 enabled 值修改为 1

    Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

    部分仓库默认没有启用,若需启用请将 /etc/zypp/repos.d 目录下相关 repo 文件中的 enabled 值修改为 1

  • 其它#

    关于调用脚本的互联网位置

    项目利用 GitHub Action 在每次提交后自动拷贝源码到文档目录作为网站资源发布,网站托管于 Netlify,几乎没有被劫持的风险请放心使用。

    当然你也可以使用代码托管仓库的原始地址来调用,这里只是想告诉你为什么会有几个不同的地址,默认的官网地址更易于记忆和访问。

    关于软件源下载速度问题

    首先,在软件源列表的使用帮助处有写使用推荐,这是根据以往经验总结出来的,但总有用户在纠结软件源速度的问题。

    软件源(镜像站)的网络延迟即 Ping 与下载速度没有太大的关联,双方地理位置间隔的远近不代表实际体验,有些镜像站下行总带宽很高但实际测速却并不理想,因为这与镜像站的负载策略有关。

    网上也有很多基于 C、Python 编写的镜像站测速开源脚本,而本项目脚本基于 Bash Shell 编写且不依赖任何第三方库,Bash 是 Linux 运维中最常用的脚本语言并且绝大部分发行版都会预装,这意味着用户不需要安装任何环境就能直接运行,这种便利性是其它高级语言无法替代的,不过目前来看 Bash 脚本可能不太容易实现精准测速的功能,使用其它高级语言编写测速功能无疑是造轮子的行为。

    关于软件源选优

    很多朋友可能都会有一个疑问:“既然脚本已经如此便捷且实现了高度自动化,为什么不能实现软件源自动选优呢?”,不是做不到而是不能。

    “软件源选优” 在这里指的是脚本根据客户端的网络环境、地理位置自动选择一个体验最佳的软件源,这个问题要从多个角度来论证:

    • 速度方面

      其实上面已经解释过了,总结来说就是追求速度不是普遍需求,对大多数人来说是无感的、能用即可,况且现在很多 Linux 发行版不需要换源就有不错的速度。

    • 对于镜像站本身

      举个最简单的例子,以前阿里云镜像站因为速度快、可用性高几乎被当成首选,但是随着用户越来越多导致速度变的原来越慢甚至可能不足 10 Mbps。
      长此以往,那些用户多的镜像站可能无法承受过高的流量而导致体验下降,用户少的镜像站可能会最终走向关闭,这不利于整个生态的发展。

    • 开发者角度

      本项目站在运维工具的角度致力于开发一个通用的换源脚本,而不是一个解决软件源需求的具体化工具,要使脚本的默认行为适用于大多数用户群体。作为运维工具要有明确的功能定位,作为脚本要从扩展性、实用性等多个方面去衡量利弊,软件源的选择权应该完全交给用户。


命令选项(高级用法)#

bash <(curl -
名称 含义 选项值
--abroad 使用境外以及海外软件源
--edu 使用中国大陆教育网软件源
--source 指定软件源地址(域名或IP) 地址
--source-epel 指定 EPEL 附加软件包仓库的软件源地址(域名或IP) 地址
--source-security 指定 Debian / Ubuntu 系统 security 仓库的软件源地址(域名或IP) 地址
--source-vault 指定 CentOS / AlmaLinux 系统 vault 仓库的软件源地址(域名或IP) 地址
--source-portage 指定 Gentoo 系统 portage 仓库的软件源地址(域名或IP) 地址
--source-base-system 指定 Linux Mint / Raspberry Pi OS 底层系统的软件源地址(域名或IP) 地址
--branch 指定软件源仓库(路径) 仓库名
--branch-epel 指定 EPEL 附加软件包仓库的软件源仓库(路径) 仓库名
--branch-security 指定 Debian 系统 security 仓库的软件源仓库(路径) 仓库名
--branch-vault 指定 CentOS / AlmaLinux 系统 vault 仓库的软件源仓库(路径) 仓库名
--branch-portage 指定 Gentoo 系统 portage 仓库的软件源仓库(路径) 仓库名
--branch-base-system 指定 Linux Mint / Raspberry Pi OS 底层系统的软件源仓库(路径) 仓库名
--codename 指定 Debian 系 / openKylin 操作系统的版本代号 代号名称
--protocol 指定 Web 协议 httphttps
--use-intranet-source 是否优先使用内网软件源地址 truefalse
--use-official-source 是否使用目标操作系统的官方软件源 truefalse
--use-official-source-epel 是否使用 EPEL 附加软件包的官方软件源 truefalse
--install-epel 是否安装 EPEL 附加软件包 truefalse
--backup 是否备份原有软件源 truefalse
--upgrade-software 是否更新软件包 truefalse
--clean-cache 是否在更新软件包后清理下载缓存 truefalse
--clean-screen 是否在运行前清除屏幕上的所有内容 truefalse
--lang 指定脚本输出的语言 语言ID(详见下方文档)
--only-epel 仅更换 EPEL 软件源模式
--ignore-backup-tips 忽略覆盖备份提示(即不覆盖备份)
--print-diff 是否打印源文件修改前后差异
--pure-mode 纯净模式,精简打印内容
--help 查看帮助菜单

软件源完整格式 <WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>

下面是一些高级用法的举例

  • 指定软件源地址#

    bash <(curl -sSL https://linuxmirrors.cn/main.sh) --source mirror.example.com
    
  • 指定软件源仓库目录#

    这里描述的软件源仓库与系统软件仓库不同,指的是软件源(镜像站)地址后面的路径即镜像站的仓库目录,虽然名义上都是仓库但是非常容易混淆

    主要使用场景:目标镜像站有对应的系统镜像仓库但是不符合本项目脚本关于软件源仓库设置的默认规则

    项目对于各操作系统所使用的默认仓库名称(点击展开查看)

    项目脚本为了适配大的环境不会针对某一镜像站独特的仓库名称而单独适配

    系统名称 涉及的名称
    Debian Debian debian debian-archive
    Ubuntu Ubuntu ubuntu ubuntu-ports
    Kali Linux Kali Linux kali
    Linux Mint Linux Mint linuxmint ubuntu ubuntu-ports debian
    Deepin Deepin(深度) deepin
    Zorin OS Zorin OS ubuntu ubuntu-ports
    Armbian Armbian armbian
    Proxmox VE Proxmox VE proxmox
    Raspberry Pi OS Raspberry Pi OS raspberrypi raspbian debian debian-archive
    Red Hat Enterprise Linux Red Hat Enterprise Linux centos centos-stream centos-altarch centos-vault
    Fedora Fedora fedora fedora-archive
    CentOS CentOS centos centos-stream centos-altarch centos-vault
    Rocky Linux Rocky Linux rocky
    AlmaLinux AlmaLinux almalinux almalinux-vault
    Oracle Linux Oracle Linux centos-stream
    openEuler openEuler(开源欧拉) openeuler
    OpenCloudOS OpenCloudOS(鸥栖) opencloudos
    openKylin openKylin(开放麒麟) openkylin
    Anolis OS Anolis OS(龙蜥) anolis
    openSUSE openSUSE opensuse
    Arch Linux Arch Linux archlinux archlinuxarm
    Manjaro Manjaro manjaro
    Alpine Linux Alpine Linux alpine
    Gentoo Gentoo gentoo gentoo-portage
    NixOS NixOS nix-channels

    请看下面的例子

    使用阿里云镜像站的 Rocky Linux 软件源
    bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
      --source mirrors.aliyun.com \
      --branch rockylinux
    

    阿里云镜像站的 Rocky Linux 仓库目录名称为 rockylinux,不符合默认规则 rocky,但是可以通过命令选项绕过脚本默认规则来实现。

    部分系统会同时配置多个仓库的软件源,具体详见命令选项

    由于软件源仓库作用在软件源地址上因此也可以使用多级路径,例如 --branch "linux/debian" -> https://mirrors.example.com/linux/debian

  • 单独更换 EPEL 源#

    EPEL (Extra Packages for Enterprise Linux) 是由 Fedora 组织维护的一个附加软件包仓库,它主要适用于除 Fedora 操作系统以外的红帽系 Linux 发行版,配置 EPEL 仓库已成为广大用户的普遍需求,建议默认安装它

    有些时候你会发现想使用的镜像站没有 EPEL 仓库,那么你可以在第一次运行脚本时不安装或更换 EPEL 源然后再单独执行下面的命令

    bash <(curl -sSL https://linuxmirrors.cn/main.sh) --only-epel
    

    对于已经 EOL 的 EPEL 7,注意需要使用 archive 仓库,境外以及海外网络环境建议通过命令选项 --use-official-source-epel true 使用官方源

  • 恢复使用官方源#

    当你不小心删除了官方源的备份时可以使用此命令来恢复,使用此命令选项后将跳过选择软件源步骤

    bash <(curl -sSL https://linuxmirrors.cn/main.sh) --use-official-source true
    

    部分系统不存在官方源例如 Arch Linux,届时会自动更换成兼容性较高的阿里云镜像站

  • 特定系统的使用示例#

    • 关于 CentOS 停服问题#

      脚本对于已经 EOL 的 CentOS 7/8、CentOS Stream 8 进行了适配

      • 国内环境


        正常使用脚本,没有额外操作,因为国内大部分镜像站都已同步 CentOS Vault 仓库

      • 境外以及海外环境


        建议使用 腾讯云阿里云 镜像站,或者通过 --use-official-source true 命令选项使用官方源

      另外 EPEL 7 也进入了 EOL,脚本同样对其进行了适配

    • 指定 GNU/Linux Debian 操作系统的 Security 源#

      如果你想尽可能提高服务器的安全性则建议使用官方源,因为镜像同步存在延迟

      bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
        --source-security security.debian.org \
        --branch-security debian-security
      
    • 指定 Debian 系 Linux 操作系统的版本代号#

      大多数情况下自定义版本代号用于更换系统版本,请看下面的例子

      • 更换版本代号

        bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
          --codename trixie \
          --upgrade-software false
        
      • 禁用 backports 仓库

        sed -i '/backports/s/^/# /' /etc/apt/sources.list
        
      • 升级系统

        apt-get update
        apt-get dist-upgrade
        
      • 在升级完成并重新引导系统后执行以下步骤

        # 清空原有软件源(如有非系统软件源内容请先自行手动备份)
        sed -i '1,$d' /etc/apt/sources.list
        # 重新执行换源脚本
        bash <(curl -sSL https://linuxmirrors.cn/main.sh)
        
      bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
        --codename testing \
        --upgrade-software false
      
      若脚本无法实现指定版本代号,你也可以在执行脚本后手动替换
      sed -i "s/$(lsb_release -cs)/指定版本代号/g" /etc/apt/sources.list
      
    • 更换 Ubuntu EOL版本软件源#

      EOL 为生命周期结束的缩写(End Of Life),Ubuntu 迭代速度较快一般非LTS(长期支持)版本的生命周期只有9个月。官方会定期从主仓库移除不在生命周期内的版本仓库目录,届时可能就需要使用镜像站的 Ubuntu Old Releases 仓库

      具体版本支持情况详见官方 Wiki,关于 Ubuntu Old Releases 仓库的支持情况详见各镜像站

      bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
        --source mirrors.ustc.edu.cn \
        --branch ubuntu-old-releases
      
    • Arch Linux 使用中文社区仓库#

      本项目脚本当前不支持该额外仓库,由于使用人数较少等原因暂不考虑适配,若想使用请参考下方的一键配置命令

      SOURCE="https://mirrors.aliyun.com/archlinuxcn" # 指定软件源地址
      grep -q "\[archlinuxcn\]" /etc/pacman.conf || echo -e "[archlinuxcn]\nServer = ${SOURCE}/\$arch" >>/etc/pacman.conf # 一键配置命令
      
  • 国际化(I18n)#

    脚本提供多语言支持,当前内置 简体中文繁體中文English 共三种显示语言,默认为 简体中文

    • 指定语言#

      bash <(curl -sSL https://linuxmirrors.cn/main.sh) --lang xxx
      
      类型
      简体中文 zh-hans zh-cn zh
      繁體中文 zh-hant zh-tw zh-hk
      English en en-us

      也可以直接作为命令选项使用

      bash <(curl -sSL https://linuxmirrors.cn/main.sh) --en
      

      --en --en-us --zh --zh-cn --zh-hans --zh-hant

    • 通过交互进行选择#

      bash <(curl -sSL https://linuxmirrors.cn/main.sh) --lang auto
      
  • 无人值守(自动化)#

    不通过交互完成换源操作,至少需要使用如下命令选项来实现,建议熟悉后再使用

    参考命令
    bash <(curl -sSL https://linuxmirrors.cn/main.sh) \
      --source mirror.example.com \
      --protocol http \
      --use-intranet-source false \
      --install-epel true \
      --backup true \
      --upgrade-software false \
      --clean-cache false \
      --ignore-backup-tips
    

    如果报错 命令选项无效 那么请检查选项合法性以及空格字符编码,在示例中一行写一个选项是为了提高命令的可读性

  • 纯净模式#

    推出该功能是为了便于开发以及运维人员使用,启用后会精简脚本内容输出,建议搭配其它命令选项无交互使用

    bash <(curl -sSL https://linuxmirrors.cn/main.sh) --pure-mode
    

    滚动输出的命令日志可能存在无法预料的显示问题,不过目前暂未发现异常


定制脚本#

如果你是其它项目的开发者希望通过本项目来制作专属脚本那么请参考下面提到的内容,目前已经有国内教育单位镜像站的维护者这样做了。

  1. 首先不建议修改代码的底层逻辑,应尽量与本项目源码保持同步,脚本内容执行顺序由 main 函数控制,代码逻辑清晰
  2. 你可以简单去除一些无关内容,例如将软件源列表(数组)mirror_list_(default|edu|abroad|extranet|intranet) 中的内容删除,例:mirror_list_default=()
  3. 如果你想定制脚本打印内容可直接修改 run_start run_end print_title 这三个函数中的内容
  4. 如果你想添加自定义 Shell 内容详见 main 函数中脚本执行顺序,可以在对应位置直接插入内容也可以封装函数后调用
  5. 如果你想要缩减脚本体积那么可以删除一些不必要的内容,除了上面提到的软件源列表还有一些涉及脚本工作的部分模块内容,具体如下:
    1. 首先在删除内容时应尽可能保留脚本原始结构,直接把涉及函数中的内容删除即可,使其保留为空函数
    2. 可以删除一些不使用(操作系统)的软件源原始内容 gen_repo_files_xxx,这些内容占据了脚本 60% 以上的体积
    3. 如果你不使用某些功能那么可以删除对应功能模块函数中的内容,命令选项 handle_command_options备份原有软件源 backup_original_mirrors更新软件包 upgrade_software
    4. 移除不需要的语言包,例:function msg_pack_en() {}
  6. 脚本主要功能配置是由统一的变量控制的,命令选项亦是如此,这些全局变量由全大写字母构成并遵循下划线命名法,具体变量详见如下表格,你只需要将这些变量声明在脚本头部(预留注释区域)即可快速完成定制
变量列表(点击展开查看)
变量名 含义 值类型
SOURCE 指定软件源地址(域名或IP) 地址
SOURCE_EPEL 指定 EPEL 附加软件包仓库的软件源地址(域名或IP) 地址
SOURCE_SECURITY 指定 Debian / Ubuntu 系统 security 仓库的软件源地址(域名或IP) 地址
SOURCE_VAULT 指定 CentOS / AlmaLinux 系统 vault 仓库的软件源地址(域名或IP) 地址
SOURCE_PORTAGE 指定 Gentoo 系统 portage 仓库的软件源地址(域名或IP) 地址
SOURCE_BASE_SYSTEM 指定 Linux Mint / Raspberry Pi OS 底层系统的软件源地址(域名或IP) 地址
SOURCE_BRANCH 指定软件源仓库(路径) 仓库名
SOURCE_EPEL_BRANCH 指定 EPEL 附加软件包仓库的软件源仓库(路径) 仓库名
SOURCE_SECURITY_BRANCH 指定 Debian 系统 security 仓库的软件源仓库(路径) 仓库名
SOURCE_VAULT_BRANCH 指定 CentOS / AlmaLinux 系统 vault 仓库的软件源仓库(路径) 仓库名
SOURCE_PORTAGE_BRANCH 指定 Gentoo 系统 portage 仓库的软件源仓库(路径) 仓库名
SOURCE_BASE_SYSTEM_BRANCH 指定 Linux Mint / Raspberry Pi OS 底层系统的软件源仓库(路径) 仓库名
DEBIAN_CODENAME 指定 Debian 系 / openKylin 操作系统的版本代号 代号名称
USE_INTRANET_SOURCE 是否优先使用内网软件源地址 truefalse
USE_OFFICIAL_SOURCE 是否使用目标操作系统的官方软件源 truefalse
USE_OFFICIAL_SOURCE_EPEL 是否使用 EPEL 附加软件包的官方软件源 truefalse
WEB_PROTOCOL 指定 Web 协议 httphttps
INSTALL_EPEL 是否安装 EPEL 附加软件包 truefalse
ONLY_EPEL 仅更换 EPEL 软件源模式 truefalse
BACKUP 是否备份原有软件源 truefalse
IGNORE_BACKUP_TIPS 忽略覆盖备份提示(即不覆盖备份) truefalse
UPGRADE_SOFTWARE 是否更新软件包 truefalse
CLEAN_CACHE 是否在更新软件包后清理下载缓存 truefalse
CLEAN_SCREEN 是否在运行前清除屏幕上的所有内容 truefalse
PRINT_DIFF 是否打印源文件修改前后差异 truefalse
PURE_MODE 纯净模式,精简打印内容 truefalse

部分变量存在默认值,未涉及的变量无需声明为空值(空字符串),另外如果对应功能配置不存在那么就可能会出现交互