背景

你肯定遇到过 使用apt update 或者 pip install或者npm install 或者 mvn install 等命令式,漫长的下载等待,以及尝试过手动找加速镜像,来换源以达到快速下载的目的,然而手动换源费时费力,加速镜像服务不可用后还需要手动更新,这就是为什么我们需要 chsrc。


第一章:为什么必须是 chsrc?

市面上换源工具很多,我也用过不少。

Python 写的,Node.js 写的,Shell 脚本堆出来的。它们都有一个致命的逻辑悖论,我称之为**“鸡生蛋死循环”**。

举个例子:

你装了一个崭新的 Python 环境,你想装个库。
速度太慢,你想换源。
你搜到一个好用的换源工具,叫 pdm 或者什么别的。
教程告诉你:“请使用 pip install xxx 来安装这个换源工具。”

听听,这是人话吗?

我就是因为 pip 慢才要换源,你让我用 pip 去下载一个换源工具?

这时候,chsrc 的降维打击就体现出来了。
以下是chsrc 自己的官网简介:

全平台通用换源工具与框架 chsrc,目标支持 Linux, Windows (native, MSYS2, Cygwin), macOS, BSD, Android 等尽可能多的操作系统环境,龙芯、飞腾、RISC-V 等尽可能多的 CPU。
我们使用 C11 来完成上述目标。我们并不使用 Python 或 JavaScript 等解释语言,因为一个简单的换源工具,不应该强行塞给用户一个庞大的解释器和数十、数百 MB 其他文件。

它是由 C 语言编写的。

这意味着什么?

  1. 零依赖(Zero Dependency): 它不需要 Python,不需要 Node,不需要 GCC,不需要任何运行时。它就是一段纯粹的、编译好的二进制机器码。
  2. 跨平台: Windows、Linux、macOS,甚至 BSD,通吃。
  3. 单文件: 没有乱七八糟的文件夹,就一个文件。
  4. 快: C 语言的快,是那种没有任何中间商赚差价的快。

它的大小,通常只有几百 KB。

在这个 Electron 应用动不动就几百 MB 吃掉你 2G 内存的时代,几百 KB 的软件,简直就是赛博空间里的清流,是复古主义的优雅。

好的工具,应该是隐形的。

它不应该让你去配置环境才能运行,它应该是那个帮你配置环境的人


把繁琐留给机器

我们先来看看,如果没有这个工具,你要面对什么。

你需要记住清华源(TUNA)的域名,中科大源(USTC)的路径,阿里云的配置格式。

你需要知道 Debian 的源和 Ubuntu 的源写法不一样。
你需要知道 CentOS 7 和 CentOS 8 (Stream) 甚至已经死了的 CentOS 6,它们的 repo 文件该放在哪。
你需要知道 pip 的配置文件在 Windows 下叫 pip.ini,在 Linux 下是隐藏文件夹里的 pip.conf

人的大脑是用来思考架构、逻辑和创造代码的,不是用来记这些反人类的配置路径的。

chsrc 把这一切都封装了。

它不仅内置了国内几乎所有主流的高校镜像站和企业镜像站,更重要的是,它懂测速

很多脚本只是傻傻地把源替换成清华源。

但是,如果你在南方电信,可能阿里云更快;如果你在教育网,中科大是神;如果你在北方联通,华为云可能起飞。

chsrc 会在毫秒级别内,对所有可用镜像站进行测速,然后自动替你选择最快的那个,写入配置文件。

你只需要告诉它“我要换什么”,而不是“我要换成什么”。

这是一个巨大的思维转变。


极速上手(安装篇)

别废话,先装上。

既然说了它是全平台的,我们就看看它在各个平台是多么的“从容”。

1. Linux / macOS (通用)

这是最推荐的方式。一行命令,无需 root 权限即可下载(但运行换系统源时可能需要 sudo)。

curl https://chsrc.run/posix | sudo bash

或者,如果你习惯用 wget

wget -O - https://chsrc.run/posix | sudo bash

金句:你看,真正的神器,连安装方式都透露着一种“我赶时间”的霸气。

2. Windows

Windows 用户总是被歧视?不。

你可以直接使用 PowerShell:

iwr https://chsrc.run/windows | iex

或者,如果你已经安装了 scoop(另一个我强烈推荐的 Windows 神器):

scoop install chsrc

甚至 choco

choco install chsrc

3. 对于极客 (手动安装)

你甚至可以直接去 GitHub 的 Releases 页面,下载那个对应你架构的二进制文件,改名叫 chsrc,扔进你的 PATH 路径里。

完事。没有任何 npm install 的等待条,没有任何 pip 的依赖报错。

它就在那,随时待命。


Linux 运维的救赎

场景一:你刚租了一台国外的 VPS,或者在本地虚拟机装了一个全新的 Ubuntu Server。

你习惯性地输入 apt install git
速度:20 KB/s。
剩余时间:2小时 40 分钟。

这时候,请立刻、马上、毫不犹豫地祭出 chsrc

换系统源

可以先看看有哪些源

chsrc list ubuntu
指定使用某源,请使用 chsrc set ubuntu <code>

可用源: 

  code         镜像站简写                     换源URL                                     镜像站
---------    --------------    -----------------------------------------------    ---------------------
upstream      Upstream          Please help to add the upstream url!               上游默认源
ali           Ali OPSX Public   https://mirrors.aliyun.com/ubuntu                  阿里巴巴开源镜像站(公网)
volc          Volcengine        https://mirrors.volces.com/ubuntu                  火山引擎开源软件镜像站(公网)
bfsu          BFSU              https://mirrors.bfsu.edu.cn/ubuntu                 北京外国语大学开源软件镜像站
ustc          USTC              https://mirrors.ustc.edu.cn/ubuntu                 中国科学技术大学开源镜像站
tuna          TUNA              https://mirrors.tuna.tsinghua.edu.cn/ubuntu        清华大学开源软件镜像站
tencent       Tencent Public    https://mirrors.tencent.com/ubuntu                 腾讯软件源(公网)
huawei        Huawei Cloud      https://mirrors.huaweicloud.com/ubuntu             华为开源镜像站
netease       Netease           https://mirrors.163.com/ubuntu                     网易开源镜像站
sohu          SOHU              https://mirrors.sohu.com/ubuntu                    搜狐开源镜像站

然后你只需要输入:

sudo chsrc set ubuntu

注意,这里你甚至不需要知道你现在的版本代号是 jammy 还是 focal,也不需要知道你是 x86 还是 arm

chsrc 会自动检测:

  1. 你的操作系统发行版。
  2. 你的系统版本号。
  3. 你的硬件架构。
  4. 最关键的: 哪个镜像站离你最近、响应最快。

代码样例(模拟输出):

Measure:
  1. huaweicloud  | 12.3 MB/s | ####################
  2. aliyun       | 10.1 MB/s | ################
  3. tencent      |  9.8 MB/s | ###############
  4. ustc         |  8.5 MB/s | #############
  5. tuna         |  8.2 MB/s | ############

Use: huaweicloud
Backup: /etc/apt/sources.list.chsrc.bak
Write: /etc/apt/sources.list
Done.

看懂了吗?

它不仅仅是换了源,它先跑了一场赛马

它发现华为云当前最快(12.3 MB/s),于是它自动备份了你的旧文件,写入了新配置。

全程耗时不到 2 秒。

再运行 apt update
那是瀑布一样的刷屏速度。

这种爽快感,甚至比写出一段无 Bug 的代码还要解压。

支持的发行版?

多到令人发指。

不管是主流的 Ubuntu, Debian, CentOS, Fedora
还是极客喜欢的 Arch Linux, Manjaro, Gentoo
甚至是国产之光 OpenKylin, Deepin
或者是 Alpine, Void, Solus...

它全都支持。

对于 Arch 用户,它甚至能智能地处理 pacman.d/mirrorlist,这可是 Arch 用户的痛中之痛。


开发者的省时利器

如果你以为它只能搞定 Linux 系统更新,那你就太小看它了。

对于程序员来说,语言包管理器的慢,才是真的慢。

1. Python (Pip)

每一个 Python 开发者的噩梦:pip install torch。这个库动不动几百兆,要是没有国内源,能下到你孙子出生。

以前你需要去搜“pip 清华源配置”。

现在:

chsrc set pip

它会自动找到你的配置文件(不管是 Windows 的 AppData 还是 Linux 的 .config),然后填入最快的源。

2. Node.js (NPM / Yarn / Pnpm)

前端同学的痛苦,在于 node_modules 这个黑洞。

chsrc set npm

不仅支持 npm,还顺带支持 yarn 和 pnpm。

甚至,它支持 node 二进制文件的镜像。 也就是当你用 nvm 安装 node 版本时,下载速度也能被加速。

3. Ruby / Gem

chsrc set ruby

4. Go / Proxy

Go 语言的依赖管理全部走 Git 协议,如果没有 GOPROXY,在国内基本寸步难行。

chsrc set go

它会自动设置 GOPROXY 环境变量,指向七牛云或者其他极速代理。

5. Rust / Crates

Rust 的编译本来就慢,如果下载依赖 crates.io 还卡住,那心态真的会崩。

chsrc set cargo

它会修改 ~/.cargo/config,替换注册表源。


那些你意想不到的角落

chsrc 的强大,在于作者真的很懂开发者的痛点。

除了系统和语言,还有很多软件本身也需要换源。

Homebrew (macOS/Linux)

Mac 用户的痛:Homebrew 更新一次,感觉像过了一个世纪。
GitHub 的连接时断时续。

chsrc set brew

它会自动替换 Homebrew-core, Homebrew-cask, Homebrew-bottles 的所有源。让你的 Mac 恢复呼吸。

Flathub

Linux 桌面用户的新宠 Flatpak,默认源在国外,慢得令人发指。

chsrc set flathub

TexLive

写论文的博士生们,安装 TexLive 那个巨大的 ISO 或者在线更新宏包时,是不是想砸电脑?

chsrc set tex

它连这个都想到了。 这不仅仅是工具,这是对知识分子的关怀。


进阶 —— 给控制狂的礼物

虽然 chsrc 主打自动化,但它也允许你进行微操。

如果你不想测速,只想指定用清华源:

chsrc set ubuntu https://mirrors.tuna.tsinghua.edu.cn/ubuntu/

或者使用短别名(如果有的话):

chsrc set ubuntu tuna

如果你想看看现在的源是谁:

chsrc list ubuntu

如果你想测速看看谁最快,但暂时不换:

chsrc cesu ubuntu

会有类似如下输出

[chsrc 测速] 测速中

  - 阿里巴巴开源镜像站(公网) ... 0.00 Byte/s | HTTP码 302
  - 火山引擎开源软件镜像站(公网) ... 335.00 Byte/s | HTTP码 404
  - 北京外国语大学开源软件镜像站 ... 9.94 MByte/s
  - 中国科学技术大学开源镜像站 ... 556.00 Byte/s | HTTP码 404
  - 清华大学开源软件镜像站 ... 4.68 MByte/s
  - 腾讯软件源(公网) ... 3.41 MByte/s
  - 华为开源镜像站 ... 870.00 Byte/s | HTTP码 404
  - 网易开源镜像站 ... 1.04 MByte/s
  - 搜狐开源镜像站 ... 1.94 KByte/s

最快镜像站: 北京外国语大学开源软件镜像站
镜像源地址: https://mirrors.bfsu.edu.cn/ubuntu

这个命令 (cesu = recommend) 简直是网络诊断神器。当你发现下载慢,你想知道是你的网炸了,还是源炸了,跑一下这个,一目了然。


技术背后的冷思考

为什么我们需要这样的工具?

在文章的后半段,我想和你聊点深刻的。

chsrc 的存在,其实是一个缩影。它反映了全球互联网物理隔阂的现状。

理论上,互联网是平的。但实际上,跨海光缆的带宽、国际出口的拥堵、防火墙的策略,把互联网割裂成了不同的流速层。

我们应该感谢那些维护镜像站的人。

清华 TUNA 协会、中科大 LUG、上海交大 SJTU、阿里云、腾讯云、华为云、网易……

是这些组织,用真金白银的服务器和带宽,为国内的开发者搭建了一条条“高速公路”。

每一次你使用 chsrc 跑满带宽的时候,都是成千上万公里的光信号在为你奔波,是无数志愿维护者在幕后为你负重前行。

chsrc 所做的,就是把这些分散的、默默无闻的善意,聚合成一个简单的命令。

它连接了你和那些伟大的基础设施。

当你看到终端里那一行行 # 号飞速增长时,那不仅仅是数据的传输,那是整个开源生态在向你输血。

不要把这当成理所当然。


常见问题与避坑指南

为了保证这篇指南的完整性,我必须列出几个你可能会遇到的问题。

Q1: 换源后 update 报错了怎么办?

A: 大概率是因为你之前的源太乱了,或者缓存问题。
尝试:
chsrc set ubuntu (再跑一次,它会纠正)
然后手动清理缓存(例如 apt clean)。
如果还不行,chsrc 会自动备份你的旧文件,你可以随时还原。

Q2: 它是怎么知道我是什么系统的?

A: 它读取 /etc/os-release,或者调用 lsb_release,或者检查特定文件。C 语言的底层调用非常精准。

Q3: 为什么 Windows 上不需要 sudo?

A: 除非你修改的是系统级的配置(比如 Program Files 下的文件),否则通常不需要。但如果你要修改系统环境变量,还是建议用管理员权限打开 PowerShell。

Q4: 支持内网私有源吗?

A: chsrc 主要是面向公网开源镜像的。如果是公司内网源,建议你手动配置一次,然后把配置文件打成 Docker 镜像,这才是正道。


最后

回到文章最开始的问题。

你的生命很宝贵。

写代码时,你的心流不应该被打断。
部署服务时,你的热情不应该被冷却。

工具的意义,就在于消除摩擦

chsrc 消除了你和开源世界之间那道因为网络延迟而产生的巨大摩擦力。

如果你看完这篇文章,还在手动复制粘贴 sources.list,那我真的救不了你。

但如果你现在立刻去终端输入了 curl https://chsrc.run/posix | sudo bash

那么恭喜你。

你刚刚为你余下的职业生涯,节省了至少几百个小时的等待时间。

去创造吧,别等待。

由于篇幅限制,这里无法穷尽 chsrc 支持的每一个软件(它支持几十种)。
建议访问项目主页 github.com/RubyMetric/chsrc 或使用 chsrc list 查看完整列表。

./chsrc list
指定使用某源,请使用 chsrc set <target> <code>
                                                                                                                                                                                                                                   
可用镜像站: 
                                                                                                                                                                                                                                   
  code         镜像站简写                  镜像站URL                              镜像站
---------    --------------    -------------------------------------     ---------------------
mirrorz       MirrorZ           https://mirrors.cernet.edu.cn/            MirrorZ 校园网镜像站
tuna          TUNA              https://mirrors.tuna.tsinghua.edu.cn/     清华大学开源软件镜像站
sjtu          SJTUG-zhiyuan     https://mirrors.sjtug.sjtu.edu.cn/        上海交通大学致远镜像站
zju           ZJU               https://mirrors.zju.edu.cn/               浙江大学开源软件镜像站
lzu           LZUOSS            https://mirror.lzu.edu.cn/                兰州大学开源社区镜像站
jlu           JLU               https://mirrors.jlu.edu.cn/               吉林大学开源镜像站
bfsu          BFSU              https://mirrors.bfsu.edu.cn/              北京外国语大学开源软件镜像站
pku           PKU               https://mirrors.pku.edu.cn/               北京大学开源镜像站
bjtu          BJTU              https://mirror.bjtu.edu.cn/               北京交通大学自由与开源软件镜像站
sustech       SUSTech           https://mirrors.sustech.edu.cn/           南方科技大学开源软件镜像站
ustc          USTC              https://mirrors.ustc.edu.cn/              中国科学技术大学开源镜像站
hust          HUST              https://mirrors.hust.edu.cn/              华中科技大学开源镜像站
nju           NJU               https://mirrors.nju.edu.cn/               南京大学开源镜像站
ali           Ali OPSX Public   https://developer.aliyun.com/mirror/      阿里巴巴开源镜像站(公网)
tencent       Tencent Public    https://mirrors.tencent.com/              腾讯软件源(公网)
huawei        Huawei Cloud      https://mirrors.huaweicloud.com/          华为开源镜像站
volc          Volcengine        https://developer.volcengine.com/mirror/  火山引擎开源软件镜像站(公网)
netease       Netease           https://mirrors.163.com/                  网易开源镜像站
sohu          SOHU              https://mirrors.sohu.com/                 搜狐开源镜像站
api7          api7.ai           https://www.apiseven.com/                 深圳支流科技有限公司
fit2cloud     FIT2CLOUD         https://www.fit2cloud.com/                杭州飞致云信息科技有限公司
rubychina     RubyChina         https://gems.ruby-china.com/              Ruby China 社区
emacschina    EmacsChina        https://elpamirror.emacs-china.org/       Emacs China 社区
npmmirror     npmmirror         https://npmmirror.com/                    npmmirror (阿里云赞助)
goproxy.cn    Goproxy.cn        https://goproxy.cn/                       Goproxy.cn (七牛云)
goproxy.io    GOPROXY.IO        https://goproxy.io/                       GOPROXY.IO

支持对以下目标换源 (同一行表示这几个命令兼容)

编程语言
-------------------------
gem     ruby    rb      rubygem rubygems        bundler
python  pypi    py
pip
poetry
pdm
node    nodejs
bun
npm
pnpm
yarn
nvm
perl    cpan
php     composer
lua     luarocks
rust    cargo   crate   crates
rustup
go      golang  goproxy
java    maven   mvn     gradle
clojure clojars cloj    lein
dart    pub
flutter
ocaml   opam
cran    r
julia
haskell cabal   stack   hackage

操作系统
-------------------------
debian
ubuntu
linuxmint       mint
kali
trisquel
lite    linuxlite
raspi   raspberrypi
armbian
openwrt opkg    LEDE
deepin
openkylin
ros     ros2
fedora
rocky   rockylinux
alma    almalinux
openeuler
openanolis      anolis
opensuse
arch    archlinux
archlinuxcn     archcn
manjaro
gentoo
alpine
void    voidlinux
solus
msys2   msys
freebsd
netbsd
openbsd

软件
-------------------------
winget
brew    homebrew
cocoa   cocoapods       pod     cocoapod
dockerhub       docker
flathub flatpak
nix
guix
emacs   elpa
latex   ctan    tex     texlive miktex  tlmgr   mpm
conda   anaconda

Q.E.D.


寻门而入,破门而出