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 上发布之后,服务器上安装只需要三步。

第一步,安装 MoonBit

arduino 复制代码
curl -fsSL https://cli.moonbitlang.cn/install/unix.sh | bash

第二步,更新索引

bash 复制代码
moon update
# Registry index cloned successfully
# Symbols updated successfully

第三步,安装 bm2

shell 复制代码
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,就能看到装好的版本了。

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

两条路各自的特点

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

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

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

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

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

apt 和 yum 仓库里的软件版本,一般比官方发布晚一些,因为仓库维护需要时间,稳定性优先。

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

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

更新的方式也不同

apt 和 yum 的更新,走的是系统统一的升级流程,apt upgrade 一把梭,把所有软件包一起更新。

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

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

bash 复制代码
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 安装,会成为常态。

到时候,装一个进程管理器,一条命令,装一个抓包工具,一条命令,装一个日志分析工具,还是一条命令。

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

你觉得这个分工合理吗?

欢迎在评论区聊聊你的看法。

相关推荐
IT小盘3 小时前
13-企业Prompt模板-角色任务约束与输出格式
java·前端·prompt
码事漫谈4 小时前
当单库日增 4.5TB,异构实时同步还能稳得住吗?
后端
徐小夕4 小时前
开源!我用SQLite + DuckDB打造了一款可视化AI问数平台
前端·算法·github
leslie1184 小时前
babel笔记
前端
用户059540174465 小时前
Redis 记忆存储踩坑实录:一个并发写入 Bug 让我排查了 4 小时
前端·css
小徐_23335 小时前
Wot UI 2.3.0 发布:二维码组件来了,Open Wot 与 wot-starter 同步更新
前端·微信小程序·uni-app
kyriewen6 小时前
Claude自己跑出去hack了3家公司——我为什么还在用它写代码
前端·ai编程·claude
IT_陈寒6 小时前
SpringBoot自动配置的坑,这次真踩疼我了
前端·人工智能·后端
shengjk16 小时前
AI Engineering 五代演进史:Prompt、RAG、Agent 到 Graph 的架构革命
后端