首页/MoonBit/moon,apt和yum之外linux系统命令安装新选择

在服务器上装软件,目前有两条路。

一条是系统包管理器,Debian 系用 apt,CentOS 系用 yum

一条是语言生态的包管理器,比如 Node.js 的 npm,Rust 的 cargo

MoonBit 的 moon 属于后者,但它的能力,又比一般的包管理器多走了一步。

什么是 moon?

它是 MoonBit 的包管理器,地位相当于 Node.js 里的 npm,Rust 里的 cargo

它把一个软件的 下载编译安装升级,做成了一条龙闭环。

你要装一个 MoonBit 写的工具,只需要一条命令。

它自己会去下载源码,自己编译,自己把编译好的二进制放到指定目录。

安装 bm2

bm2 是基于 MoonBit 实现的 Node.js 和 Bun 进程管理器,用来替代 pm2

它在 mooncakes 上发布之后,服务器上安装只需要三步。

这里说明一下,mooncakes 是 MoonBit 官方的包仓库,地位类似 Node.js 的 npm 仓库。

第一步,安装 MoonBit。

curl -fsSL https://cli.moonbitlang.cn/install/unix.sh | bash

第二步,更新索引。

moon update
# Registry index cloned successfully
# Symbols updated successfully

第三步,安装 bm2

moon install chensuiyi/bm2/... --bin ~/.local/bin

# Downloading chensuiyi/bm2@0.2.1
# Downloading moonbitlang/x@0.4.41
# Downloading bobzhang/toml@0.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,就能看到装好的版本了。

整个流程,前后不到一分钟。

两条路各自的特点

aptyum 装的是编译好的二进制包,直接下载解压到系统目录。

好处是安装快,不需要编译环境,而且包和系统深度集成,依赖关系由系统统一管理。

moon 装的是源码包,在本地服务器上现场编译。

好处是产物天然适配当前机器的架构和系统版本,不需要维护多套预编译产物。

还有一个差异是版本时效。

aptyum 仓库里的软件版本,一般比官方发布晚一些。

因为仓库维护需要时间,稳定性优先。

mooncakes 上的版本,作者发布后就能装到,时效性更强。

这两种方式没有谁好谁坏,定位不同而已。

更新的方式也不同

aptyum 的更新,走的是系统统一的升级流程。

apt upgrade 一把梭,把所有软件包一起更新。

好处是省心,系统里所有包的状态一目了然。

moon 的更新,是重跑一遍安装命令。

moon install chensuiyi/bm2/... --bin ~/.local/bin

它会自动检测新版本,只编译有变化的部分,然后原子替换旧文件。

速度怎么样?

现场编译,听起来比下载二进制慢,但 moon 有增量缓存机制。

第一次安装,要全量编译,也就几十秒。

第二次更新,只编译变化的部分,基本是秒级。

而且编译好的产物有缓存,装多个项目时,公共依赖编译一次,后面全部复用。

什么场景适合 moon?

分析下来,moon 适合的应用场景,其实比较明确。

首先是架构敏感的工具。

服务器从 x86 换到 arm,或者反过来,aptyum 的预编译包可能没有对应版本。

moon 的本地编译则不存在这个问题。

其次是追求版本时效的场景。

有些工具需要尽快用上新版特性,mooncakes 发版即所得,比等系统仓库更新更快。

再次是语言生态内的工具。

MoonBit 写的工具,天然在 mooncakes 上分发,用 moon 安装是顺理成章的路径。

aptyum 呢?

系统内核、系统库、基础服务,这些依然离不开系统包管理器。

它们的依赖和系统深度绑定,moon 也不具备替代的条件。

所以更准确的说法是,moon 在应用层工具这个范围内,可以部分替代 aptyum

系统层的东西,还是各司其职。

未来会怎样

MoonBit 生态还在早期,mooncakes 上的工具数量还不多,但方向是明确的。

语言生态成熟之后,应用层的命令行工具,用 moon install xxx 安装,会成为常态。

到时候,装一个进程管理器,一条命令。

装一个抓包工具,一条命令。

装一个日志分析工具,还是一条命令。

系统包管理器管系统,语言包管理器管应用,两条路并行,各干各的。

你觉得这个分工合理吗?欢迎在评论区聊聊你的看法。