moon,apt和yum之外linux系统命令安装新选择
在服务器上装软件目前有两条路。一条是系统包管理器Debian 系用aptCentOS 系用yum。一条是语言生态的包管理器比如 Node.js 的npmRust 的cargo。MoonBit 的moon属于后者但它的能力又比一般的包管理器多走了一步。什么是 moon?它是 MoonBit 的包管理器地位相当于 Node.js 里的npmRust 里的cargo。它把一个软件的下载、编译、安装、升级做成了一条龙闭环。你要装一个 MoonBit 写的工具只需要一条命令它自己会去下载源码自己编译自己把编译好的二进制放到指定目录。安装 bm2bm2 是基于 MoonBit 实现的Node.js Bun的进程管理器用来替代pm2。它在 mooncakes 上发布之后服务器上安装只需要三步。第一步安装 MoonBitcurl -fsSL https://cli.moonbitlang.cn/install/unix.sh | bash第二步更新索引moon update # Registry index cloned successfully # Symbols updated successfully第三步安装 bm2moon install chensuiyi/bm2/... --bin ~/.local/bin # Downloading chensuiyi/bm20.2.1 # Downloading moonbitlang/x0.4.41 # Downloading bobzhang/toml0.4.2 # Finished. moon: ran 17 tasks, now up to date # Success: Installed bm2 to /root/.local/bin/bm2 # Success: Installed bm2d to /root/.local/bin/bm2d然后bm2 version就能看到装好的版本了。整个流程前后不到一分钟。两条路各自的特点apt 和 yum 装的是编译好的二进制包直接下载解压到系统目录。好处是安装快不需要编译环境而且包和系统深度集成依赖关系由系统统一管理。moon 装的是源码包在本地服务器上现场编译。好处是产物天然适配当前机器的架构和系统版本不需要维护多套预编译产物。还有一个差异是版本时效。apt 和 yum 仓库里的软件版本一般比官方发布晚一些因为仓库维护需要时间稳定性优先。mooncakes 上的版本作者发布后就能装到时效性更强。这两种方式没有谁好谁坏定位不同而已。更新的方式也不同apt 和 yum 的更新走的是系统统一的升级流程apt upgrade一把梭把所有软件包一起更新。好处是省心系统里所有包的状态一目了然。moon 的更新是重跑一遍安装命令。moon install chensuiyi/bm2/... --bin ~/.local/bin它会自动检测新版本只编译有变化的部分然后原子替换旧文件。速度怎么样现场编译听起来比下载二进制慢但 moon 有增量缓存机制。第一次安装要全量编译也就几十秒。第二次更新只编译变化的部分基本是秒级。而且编译好的产物有缓存装多个项目时公共依赖编译一次后面全部复用。什么场景适合moon分析下来moon 适合的应用场景其实比较明确。首先是架构敏感的工具。服务器从 x86 换到 arm或者反过来apt 和 yum 的预编译包可能没有对应版本moon 的本地编译则不存在这个问题。其次是追求版本时效的场景。有些工具需要尽快用上新版特性mooncakes 发版即所得比等系统仓库更新更快。再次是语言生态内的工具。MoonBit 写的工具天然在 mooncakes 上分发用 moon 安装是顺理成章的路径。那 apt 和 yum 呢系统内核、系统库、基础服务这些依然离不开系统包管理器。它们的依赖和系统深度绑定moon 也不具备替代的条件。所以更准确的说法是moon 在应用层工具这个范围内可以部分替代 apt 和 yum系统层的东西还是各司其职。未来会怎样MoonBit 生态还在早期mooncakes 上的工具数量还不多但方向是明确的。语言生态成熟之后应用层的命令行工具用moon install xxx安装会成为常态。到时候装一个进程管理器一条命令装一个抓包工具一条命令装一个日志分析工具还是一条命令。系统包管理器管系统语言包管理器管应用两条路并行各干各的。你觉得这个分工合理吗欢迎在评论区聊聊你的看法。