使用方法
如果您觉得这个项目不错对您有所帮助的话,请点击仓库右上角的 Star 并分享给更多的朋友
一键执行命令#
选项卡分别代表脚本内置软件源类型和获取脚本途径,请在使用前检查目标镜像站是否支持您所使用的操作系统,可以在软件源列表中查看具体有哪些软件源。
-
注意事项#
-
需使用
ROOT
用户执行脚本
切换命令为
sudo -i
或su root
。不同系统使用的命令不同,因为部分系统没有在初始安装时为 ROOT 账户设置密码(例如 Ubuntu)或系统默认禁止 ROOT 用户登录。 -
建议使用支持
SSH
的现代化终端应用
如果你系统命令行界面的中文显示乱码那么将导致无法查看交互内容,此外部分系统 GUI 图形界面的终端应用可能存在一些无法预料的显示问题。关于 SSH 服务部分系统会自动开启,否则请参考开启方法。
-
如果是在新装系统上首次执行脚本
当前执行方式依赖
curl
指令获取脚本内容并执行,但部分操作系统没有预装此软件包,届时则会报错Command not found
,安装方法详见下方 关于报错 Command not found。 -
脚本运行期间需要交互选择配置
请通过方向键 UpDownLeftRight 或 WASD 控制选项并按 Enter 回车键确认。如果发现交互异常那么请改变终端软件的窗口大小后重试,窗口尽量不要太小。
-
-
常见问题#
-
关于报错 Command not found#
此报错是因为系统没有预装
curl
软件包,下面是安装命令Debian
Ubuntu
Kali
Linux Mint
Deepin
Zorin OS
Armbian
Proxmox
openKylin
新装系统需要先执行一遍更新
apt-get update
Red Hat Enterprise Linux
CentOS
Rocky Linux
AlmaLinux
Fedora
openEuler
OpenCloudOS
Anolis OS
安装不上?(点击展开查看其它解决方法)
假如系统原有软件源是无效的导致安装不上
curl
软件包,那么对于 Linux 初学者来说可能会比较麻烦,这里提供几个在线获取脚本的应急方法适用于大部分操作系统(
Alpine Linux
除外),python3
要是不存在那就再试试python
指令如果可以访问系统 GUI 图像界面和桌面的话那可以直接在浏览器中打开链接下载脚本,很多系统都会预装 Firefox 火狐浏览器
之后再执行脚本即可
如果以上方法试了都不行,那就复制源码至本地新建任意名称的
.sh
脚本,粘贴源码内容后通过bash
指令手动执行。 -
关于开启 SSH 远程登录的方法#
-
验证是否已安装
SSH
服务如果没有这个文件夹说明系统未安装
SSH
服务,你需要通过包管理工具安装openssh
软件包 -
设置允许 Root 用户登录
-
设置密码认证
-
启动/重启
SSH
服务
命令以及配置步骤仅供参考,只适配了部分常见发行版
-
-
还原已备份的软件源#
Debian
Ubuntu
Kali
Linux Mint
Deepin
Zorin OS
Armbian
Proxmox
openKylin
Red Hat Enterprise Linux
CentOS
Rocky Linux
AlmaLinux
Fedora
openEuler
OpenCloudOS
Anolis OS
-
其它#
- 如果提示
bash: /proc/self/fd/11: No such file or directory
,请切换至Root
用户执行,切换命令为sudo -i
或su root
- 如果提示
-
-
关于调用脚本的互联网位置#
项目利用 GitHub Action 在每次提交后自动拷贝源码到文档目录作为网站资源发布,网站托管于知名 CDN 云服务商几乎没有被劫持的风险请放心使用。
当然你也可以使用代码托管仓库的原始地址来调用,这里只是想告诉你为什么会有几个不同的地址,默认的官网地址更易于记忆和访问。
-
关于软件源下载速度相关问题#
首先在软件源列表页面的使用帮助有使用推荐,这是根据以往经验总结出来的,但总有用户在纠结软件源速度的问题。
软件源(镜像站)的网络延迟即
Ping
与下载速度没有太大的关联,双方地理位置间隔的远近不代表实际体验,有些镜像站下行带宽很高但实际测速却并不理想,因为这与镜像站的并发性能和负载策略有关。网上也有很多基于 C、Python 编写的镜像站测速开源脚本,而本项目脚本基于 Bash Shell 编写且不依赖任何第三方库,Bash 是 Linux 运维中最常用的脚本语言并且绝大部分发行版都会预装,这意味着用户不需要安装任何环境就能直接运行,这种便利性是其它高级语言无法替代的,不过目前来看 Bash 脚本可能无法实现精准测速的功能。
-
关于未启用的软件源#
脚本遵循系统默认设置即没有启用的软件源(仓库)不会在运行完本脚本后被启用,但是它们也随脚本更换了目标软件源地址,具体启用方法如下:
默认禁用了
deb-src
源码仓库和proposed
预发布软件源,若需启用请将/etc/apt/sources.list
文件中相关内容的所在行取消注释Debian
Ubuntu
Kali
Linux Mint
Deepin
Zorin OS
Armbian
Proxmox
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
命令选项(高级用法)#
名称 | 含义 | 选项值 |
---|---|---|
--abroad |
使用境外以及海外软件源 | 无 |
--edu |
使用中国大陆教育网软件源 | 无 |
--source |
指定软件源地址(域名或IP) | 地址 |
--source-epel |
指定 EPEL 附加软件包仓库的软件源地址(域名或IP) | 地址 |
--source-security |
指定 Debian 系统 security 仓库的软件源地址(域名或IP) | 地址 |
--source-vault |
指定 CentOS/AlmaLinux 系统 vault 仓库的软件源地址(域名或IP) | 地址 |
--source-portage |
指定 Gentoo 系统 portage 仓库的软件源地址(域名或IP) | 地址 |
--source-base-system |
指定 Linux Mint 系统底层系统的软件源地址(域名或IP) | 地址 |
--branch |
指定软件源仓库(路径) | 仓库名 |
--branch-epel |
指定 EPEL 附加软件包仓库的软件源仓库(路径) | 仓库名 |
--branch-security |
指定 Debian 系统 security 仓库的软件源仓库(路径) | 仓库名 |
--branch-vault |
指定 CentOS/AlmaLinux 系统 vault 仓库的软件源仓库(路径) | 仓库名 |
--branch-portage |
指定 Gentoo 系统 portage 仓库的软件源仓库(路径) | 仓库名 |
--branch-base-system |
指定 Linux Mint 系统底层系统的软件源仓库(路径) | 仓库名 |
--codename |
指定 Debian 系 / openKylin 操作系统的版本代号 | 代号名称 |
--protocol |
指定 WEB 协议 | http 或 https |
--use-intranet-source |
是否优先使用内网软件源地址 | true 或 false |
--use-official-source |
是否使用目标操作系统的官方软件源 | true 或 false |
--install-epel |
是否安装 EPEL 附加软件包 | true 或 false |
--backup |
是否备份原有软件源 | true 或 false |
--upgrade-software |
是否更新软件包 | true 或 false |
--clean-cache |
是否清理下载缓存 | true 或 false |
--clean-screen |
是否在运行前清除屏幕上的所有内容 | true 或 false |
--print-diff |
是否打印源文件修改前后差异 | true 或 false |
--only-epel |
仅更换 EPEL 软件源模式 | 无 |
--ignore-backup-tips |
忽略覆盖备份提示(即不覆盖备份) | 无 |
--help |
查看帮助菜单 | 无 |
软件源完整格式
<WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>
接下来是一些高级用法的举例
-
指定软件源地址#
-
指定软件源仓库#
主要使用场景:目标镜像站有对应的系统镜像仓库但是不符合本项目脚本关于软件源仓库设置的默认规则
由于仓库软件源仓库作用在软件源地址上,因此也可以使用多级路径,例如
<WEB协议>://<软件源地址>/linux/debian
>https://mirrors.example.com/linux/debian
,项目对于各操作系统所使用的默认仓库名称(点击展开查看)
项目脚本为了适配大的环境不会针对某一镜像站独特的仓库名称而单独适配
请看下面的例子
使用阿里云镜像站的 Rocky Linux 软件源bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ --source mirrors.aliyun.com \ --branch rockylinux
阿里云镜像站的 Rocky Linux 仓库名称为
rockylinux
,不符合默认规则,但是可以通过命令选项绕过脚本默认规则来实现。部分系统会同时配置多个仓库的软件源,具体详见命令选项
-
单独更换 EPEL 源#
EPEL (Extra Packages for Enterprise Linux) 是由 Fedora 组织维护的一个附加软件包仓库,它主要适用于除 Fedora 操作系统以外的红帽系 Linux 发行版,配置 EPEL 仓库已成为广大用户的普遍需求,建议默认安装它
有些时候你会发现想使用的镜像站没有 epel 镜像仓库,那么你可以在第一次运行脚本时不安装或更换 epel 源然后再单独执行下面的命令
-
恢复使用官方源#
当你不小心删除了官方源的备份时可以使用此命令来恢复,使用此命令选项后将跳过选择软件源步骤
部分系统不存在官方源例如
Arch Linux
,届时会自动更换成兼容性较高的阿里云镜像站 -
自定义 Debian Security 源#
如果你想尽可能提高服务器的安全性则建议使用官方源,因为镜像同步存在延迟
-
指定 Debian 系 Linux 操作系统的版本代号#
大多数情况下自定义版本代号用于更换系统版本,请看下面的例子
更换软件源后还需要执行系统更新命令
apt-get dist-upgrade
,并且建议在更新完成并重启系统后重新执行本换源脚本,因为仅更换软件源配置中的系统版本代号可能会在后期使用时产生一些兼容性问题 -
更换 Ubuntu EOF版本软件源#
EOF 为生命周期结束的缩写(End Of Life),Ubuntu 迭代速度较快一般非长期支持(LTS)版本的生命周期只有9个月。官方会定期从主仓库移除不在生命周期内的版本仓库目录,届时可能就需要使用镜像站的
Ubuntu Old Releases
仓库具体版本支持情况详见官方 Wiki,关于
Ubuntu Old Releases
仓库的支持情况详见各镜像站 -
无人值守(自动化)#
不通过交互完成换源操作,至少需要使用如下命令选项来实现,建议熟悉后再使用
定制脚本#
如果你是其它项目的开发者希望通过本项目来制作专属脚本那么请参考下面提到的内容,目前已经有国内教育单位镜像站的维护者这样做了。
- 首先不建议修改代码的底层逻辑,应尽量与本项目源码保持同步,脚本内容执行顺序由
main
函数控制,代码逻辑清晰 - 你可以简单去除一些无关内容,例如将软件源列表(数组)
mirror_list_(default|edu|abroad|extranet|intranet)
中的内容删除,例:mirror_list_default=()
- 如果你想定制脚本打印内容可直接修改
run_start
run_end
print_title
这三个函数中的内容 - 如果你想添加自定义 Shell 内容详见
main
函数中脚本执行顺序,可以在对应位置直接插入内容也可以封装函数后调用 - 如果你想要缩减脚本体积那么可以删除一些不必要的内容,除了上面提到的软件源列表还有一些涉及脚本工作的部分模块内容,具体如下:
- 首先在删除内容时应尽可能保留脚本原始结构,直接把涉及函数中的内容删除即可,使其保留为空函数
- 可以删除一些不使用(操作系统)的软件源原始内容
gen_repo_files_xxx
,这些内容占据了脚本60%
以上的体积 - 如果你不使用某些功能那么可以删除对应功能模块函数中的内容,
命令选项 handle_command_options
、备份原有软件源 backup_original_mirrors
、更新软件包 upgrade_software
- 脚本主要功能配置是由统一的变量控制的,命令选项亦是如此,这些全局变量由全大写字母构成并遵循下划线命名法,具体变量详见如下表格,你只需要将这些变量声明在脚本头部(预留注释区域)即可快速完成定制
变量名 | 含义 | 值类型 |
---|---|---|
SOURCE |
指定软件源地址(域名或IP) | 地址 |
SOURCE_EPEL |
指定 EPEL 附加软件包仓库的软件源地址(域名或IP) | 地址 |
SOURCE_SECURITY |
指定 Debian 系统 security 仓库的软件源地址(域名或IP) | 地址 |
SOURCE_VAULT |
指定 CentOS/AlmaLinux 系统 vault 仓库的软件源地址(域名或IP) | 地址 |
SOURCE_PORTAGE |
指定 Gentoo 系统 portage 仓库的软件源地址(域名或IP) | 地址 |
SOURCE_BASE_SYSTEM |
指定 Linux Mint 系统底层系统的软件源地址(域名或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 系统底层系统的软件源仓库(路径) | 仓库名 |
DEBIAN_CODENAME |
指定 Debian 系 / openKylin 操作系统的版本代号 | 代号名称 |
USE_OFFICIAL_SOURCE |
是否使用目标操作系统的官方软件源 | true 或 false |
USE_INTRANET_SOURCE |
是否优先使用内网软件源地址 | true 或 false |
WEB_PROTOCOL |
指定 WEB 协议 | http 或 https |
INSTALL_EPEL |
是否安装 EPEL 附加软件包 | true 或 false |
ONLY_EPEL |
仅更换 EPEL 软件源模式 | true 或 false |
BACKUP |
是否备份原有软件源 | true 或 false |
IGNORE_BACKUP_TIPS |
忽略覆盖备份提示(即不覆盖备份) | true 或 false |
UPGRADE_SOFTWARE |
是否更新软件包 | true 或 false |
CLEAN_CACHE |
是否清理下载缓存 | true 或 false |
CLEAN_SCREEN |
是否在运行前清除屏幕上的所有内容 | true 或 false |
PRINT_DIFF |
是否打印源文件修改前后差异 | true 或 false |
部分变量存在默认值,未涉及的变量无需声明为空值(空字符串),另外如果对应功能配置不存在那么就可能会出现交互