chsrc/bootstrap
2025-07-12 11:56:16 +08:00
..
2025-07-12 11:03:08 +08:00

Bootstrap

begin
  download_binary_for_my_platform
rescue NoReadyMadeBinary => e
  bootstrap! e.my_platform
end

鸡蛋困境

我们支持预编译的操作系统目前只有 Windows, Linux, macOS,支持的架构请参考项目 README

某些操作系统如 BSD 家族,甚至是更小众的操作系统, 或者上述操作系统的某些架构,无法享受直接下载二进制立即使用的便利性,这导致用户需要自己编译 chsrc.

然而用户自己编译则面临着一个问题: 需要提前安装项目依赖

  1. 把代码 git clone 下来 或 下载 zip 包进行解压缩
  2. C语言编译器
  3. GNU makejust (这二者非强制,但是有了更好)

可是如果用户还没有换源,他/她又如何获得上述这些程序呢?这是一把死锁,导致用户最终回到手动换源的原始农耕时代。这是一个 "鸡蛋问题",到底是先有鸡还是先有蛋?


chsrc-bootstrap to the Rescue

chsrc-bootstrap 是一组使用原生脚本语言的脚本,每个脚本称为 bootstrapper,用来完成两件事情:

  1. 帮助用户进行最基本的换源,让用户能够立即开始使用该系统安装其他软件

  2. 用户自行决定是否需要安装 chsrc

    • 若不需要: 流程直接结束,用户已可以完成基本日常工作

    • 若需要: 帮助用户安装好所需的最少依赖,并编译安装 chsrc

注意,最基本的换源,即不测速,由维护者暂时决定先切换到某一个具体的源,先让系统跑起来。

支持的语言

上述提到的原生脚本语言只能是这些:

  1. Windows: PowerShell, CMD

  2. Linux: Bash, sh

    备选: Perl

  3. macOS: Zsh, Bash, sh

    备选: Ruby, Perl

  4. BSD: sh

    备选: 待议

  5. 其他平台: 一切该平台支持的脚本语言,无需额外安装


chsrcchsrc-bootstrap

chsrc 需要实现 chsrc-bootstrap 中支持的平台。这是因为,chsrc-bootstrap 只换到了某一个具体的源,只是临时性的,后续用户可能还想要换到其他源,此时 chsrc 就可以接管。

而事实上,chsrc-bootstrap 可以完成一些操作,使得系统已经满足一些前置条件,这样的话 chsrc 可以在这些前置条件存在时接着换源,从而大幅减轻 recipe 的实现难度。


帮助

  1. FreeBSD 的换源 从项目一开始就是我们的目标之一,然而由于其:

    • 换源所需的步骤太多
    • 面临着特有的鸡蛋困境
    • BSD 工具和 GNU 工具总是有不兼容之处
    • 在C语言中实现困难重重

    因此我们一直没有很好的办法去实现

  2. 任何你所在的平台,都可以添加到此