|
| 1 | +# Bootstrap |
| 2 | + |
| 3 | +```ruby |
| 4 | +begin |
| 5 | + download_binary_for_my_platform |
| 6 | +rescue NoReadyMadeBinary => e |
| 7 | + bootstrap! e.my_platform |
| 8 | +end |
| 9 | +``` |
| 10 | + |
| 11 | +<br> |
| 12 | + |
| 13 | +## 鸡蛋困境 |
| 14 | + |
| 15 | +我们支持预编译的操作系统目前只有 `Windows`, `Linux`, `macOS`,支持的架构请参考[项目 README](../README.md) |
| 16 | + |
| 17 | +某些操作系统如 BSD 家族,甚至是更小众的操作系统, 或者上述操作系统的某些架构,无法享受直接下载二进制立即使用的便利性,这导致用户需要自己编译 `chsrc`. |
| 18 | + |
| 19 | +然而用户自己编译则面临着一个问题: **需要提前安装项目依赖** |
| 20 | + |
| 21 | +1. 把代码 `git clone` 下来 或 下载 `zip` 包进行解压缩 |
| 22 | +2. C语言编译器 |
| 23 | +3. `GNU make` 或 `just` (这二者非强制,但是有了更好) |
| 24 | + |
| 25 | +可是如果用户还没有换源,他/她又如何获得上述这些程序呢?**这是一把死锁,导致用户最终回到手动换源的原始农耕时代。这是一个 "鸡蛋问题",到底是先有鸡还是先有蛋?** |
| 26 | + |
| 27 | +<br> |
| 28 | + |
| 29 | + |
| 30 | + |
| 31 | +## `chsrc-bootstrap` to the Rescue |
| 32 | + |
| 33 | +`chsrc-bootstrap` 是一组使用原生脚本语言的脚本,用来完成两件事情: |
| 34 | + |
| 35 | +1. 帮助用户进行最基本的换源,让用户能够立即开始使用该系统安装其他软件 |
| 36 | + |
| 37 | +2. 用户自行决定是否需要安装 `chsrc` |
| 38 | + |
| 39 | + - 若不需要: 流程直接结束,用户已可以完成基本日常工作 |
| 40 | + |
| 41 | + - 若需要: 帮助用户安装好所需的最少依赖,并编译安装 `chsrc` |
| 42 | + |
| 43 | +注意,最基本的换源,即不测速,由维护者暂时决定先切换到某一个具体的源,先让系统跑起来。 |
| 44 | + |
| 45 | +### 支持的语言 |
| 46 | + |
| 47 | +上述提到的原生脚本语言只能是这些: |
| 48 | + |
| 49 | +1. Windows: `PowerShell`, `CMD` |
| 50 | + |
| 51 | +2. Linux: `Bash`, `sh` |
| 52 | + |
| 53 | + 备选: `Perl` |
| 54 | + |
| 55 | +3. macOS: `Zsh`, `Bash`, `sh` |
| 56 | + |
| 57 | + 备选: `Ruby`, `Perl` |
| 58 | + |
| 59 | +4. BSD: `sh` |
| 60 | + |
| 61 | + 备选: 待议 |
| 62 | + |
| 63 | +5. 其他平台: 一切该平台支持的脚本语言,无需额外安装 |
| 64 | + |
| 65 | +<br> |
| 66 | + |
| 67 | + |
| 68 | + |
| 69 | +## `chsrc` 与 `chsrc-bootstrap` |
| 70 | + |
| 71 | +`chsrc` 需要实现 `chsrc-bootstrap` 中支持的平台。这是因为,`chsrc-bootstrap` 只换到了某一个具体的源,只是临时性的,后续用户可能还想要换到其他源,此时 `chsrc` 就可以接管。 |
| 72 | + |
| 73 | +而事实上,`chsrc-bootstrap` 可以完成一些操作,使得系统已经满足一些前置条件,这样的话 `chsrc` 可以在这些前置条件存在时接着换源,从而大幅减轻 `recipe` 的实现难度。 |
| 74 | + |
| 75 | +<br> |
| 76 | + |
| 77 | + |
| 78 | + |
| 79 | +## 帮助 |
| 80 | + |
| 81 | +1. [FreeBSD 的换源](https://github.com/RubyMetric/chsrc/issues/11) 从项目一开始就是我们的目标之一,然而由于其: |
| 82 | + |
| 83 | + - 换源所需的步骤太多 |
| 84 | + - 面临着特有的鸡蛋困境 |
| 85 | + - BSD 工具和 GNU 工具总是有不兼容之处 |
| 86 | + - 在C语言中实现困难重重 |
| 87 | + |
| 88 | + 因此我们一直没有很好的办法去实现 |
| 89 | + |
| 90 | +2. 任何你所在的平台,都可以添加到此 |
0 commit comments