mirror of
https://github.com/RubyMetric/chsrc
synced 2025-07-18 22:04:52 +08:00
105 lines
3.3 KiB
Markdown
105 lines
3.3 KiB
Markdown
<!-- -----------------------------------------------------------
|
|
! SPDX-License-Identifier: GFDL-1.3-or-later
|
|
! -------------------------------------------------------------
|
|
! Doc Type : Markdown
|
|
! Doc Name : (chsrc-bootstrap Introduction.md)
|
|
! Doc Authors : Aoran Zeng <ccmywish@qq.com>
|
|
! Contributors : Nul None <nul@none.org>
|
|
! |
|
|
! Created On : <2025-07-12>
|
|
! Last Modified : <2025-07-12>
|
|
! ---------------------------------------------------------- -->
|
|
|
|
# Bootstrap
|
|
|
|
```ruby
|
|
begin
|
|
download_binary_for_my_platform
|
|
rescue NoReadyMadeBinary => e
|
|
bootstrap! e.my_platform
|
|
end
|
|
```
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## 鸡蛋困境
|
|
|
|
我们支持预编译的操作系统目前只有 `Windows`, `Linux`, `macOS`,支持的架构请参考[项目 README](../README.md)
|
|
|
|
某些操作系统如 BSD 家族,甚至是更小众的操作系统, 或者上述操作系统的某些架构,无法享受直接下载二进制立即使用的便利性,这导致用户需要自己编译 `chsrc`.
|
|
|
|
然而用户自己编译则面临着一个问题: **需要提前安装项目依赖**
|
|
|
|
1. 把代码 `git clone` 下来 或 下载 `zip` 包进行解压缩
|
|
2. C语言编译器
|
|
3. `GNU make` 或 `just` (这二者非强制,但是有了更好)
|
|
|
|
可是如果用户还没有换源,他/她又如何获得上述这些程序呢?**这是一把死锁,导致用户最终回到手动换源的原始农耕时代。这是一个 "鸡蛋问题",到底是先有鸡还是先有蛋?**
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## `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. 其他平台: 一切该平台支持的脚本语言,无需额外安装
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## `chsrc` 与 `chsrc-bootstrap`
|
|
|
|
`chsrc` 需要实现 `chsrc-bootstrap` 中支持的平台。这是因为,`chsrc-bootstrap` 只换到了某一个具体的源,只是临时性的,后续用户可能还想要换到其他源,此时 `chsrc` 就可以接管。
|
|
|
|
而事实上,`chsrc-bootstrap` 可以完成一些操作,使得系统已经满足一些前置条件,这样的话 `chsrc` 可以在这些前置条件存在时接着换源,从而大幅减轻 `recipe` 的实现难度。
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## 帮助
|
|
|
|
1. [FreeBSD 的换源](https://github.com/RubyMetric/chsrc/issues/11) 从项目一开始就是我们的目标之一,然而由于其:
|
|
|
|
- 换源所需的步骤太多
|
|
- 面临着特有的鸡蛋困境
|
|
- BSD 工具和 GNU 工具总是有不兼容之处
|
|
- 在C语言中实现困难重重
|
|
|
|
因此我们一直没有很好的办法去实现
|
|
|
|
2. 任何你所在的平台,都可以添加到此
|