这篇文章是我第一次公开宣布我的新的Linux包管理器和部署工具-Hermes。
熟悉Nix或Guix的人会觉得很自在,或者您可能会认为Hermes有点像docker,您可以将软件包从源代码构建到可以相互引用的目录中,而不是按层构建映像。
以下是一些简单但不全面的示例,旨在展示使用Hermes的…是什么样子。
Hermes试图创建一个简单但功能强大的包管理工具,您可以在其中维护对软件依赖性的完全控制。
您还可以认为Hermes是我简化Nix和Guix背后的一些思想和实现的尝试,这些简化包括更少的代码、更少的命令、更少的C++、更少的monad、更少的懒惰函数编程、更少的glibc。如果这些对你来说不是很重要,也不用担心,关键是你不应该真的需要知道它们。
我试图简化Nixos和Guix开创的打包模型。
Hermes包定义只是一些函数,当调用这些函数时,可以通过运行./configure和make等命令来构建软件。如果软件包已经安装,Hermes就不会费心再次构建它。
与“传统的”包管理器的主要区别在于,每个包都有一个唯一的安装目录,因此不需要任何包冲突处理。
爱马仕本身很瘦,当静态链接和压缩时,它可以放在软盘上,当省略某些功能时,它可以做得更小。
Hermes只有几个核心命令,Hermes build、Hermes cp和Hermes gc,到目前为止,这些命令足以构建软件包、执行远程部署和删除不需要的软件包。
我不喜欢docker守护进程,也不喜欢nix和guix构建守护进程。Hermes没有使用One,而是通过其他机制工作,比如锁文件和策略setuid。
包是用Janet编程语言编写的,带有一小部分额外的函数,这些函数在构建软件的上下文中是有意义的。
创建Hermes包时,编写一个小函数将包安装到动态作用域变量pkg-out所指向的路径中,只需引用它们就可以自动检测和构建所有依赖项。
(使用../PRELUDE)(IMPORT../CORE)(defsrc ed-src:url";http://ftpmirror.gnu.org/ed/ed-1.16.tar.lz";:hash";sha256:cfc07a14ab048a758473ce222e784fbf031485bcd54a76f74acfee1f390d8b2c";)(defpkg ed:Builder(fn[](core/link-/bin/sh)(os/setenv";path";(Join-pkg-path";:";";/bin"))(os/setenv";path";(Join-pkg-path";:";";/bin";[core/coreutils core/sed core/grep core/awk core/GCC core/make]))(os/setenv";CFLAGS";*default-cflag*)(os/setenv";LDFLAGS";*default-ldflag*)(unpack-src ed-src)(sh/$./configure-prefix=^(dyn:pkg-out))(sh/$make。
您应该注意到,Janet本身是一种小但功能强大的通用编程语言,所以您使用hermes学习的技能对于编写各种优秀的软件都很有用。
如果您是一位经验丰富的Nix或Guix用户,请随时尝试Hermes,其他用户可能希望等到更多的基础工作就绪后再使用。