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 安装,会成为常态。

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

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

你觉得这个分工合理吗?

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

相关推荐
卷无止境4 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
福兮说4 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
狼爷5 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理5 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源5 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源5 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆6666 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)6 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
周杰伦fans6 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
码艺-Alimjan6 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js