1 个不稳定版本

0.0.1 2022年6月11日

#10#dist

BSD-3-Clause

21KB
372

1bm:单二进制管理器

Crates.io,link=https://crates.io/crates/onebm

1bm 是一个单(1)二进制应用程序(binary)管理器。它安装、更新、卸载单二进制应用程序(SBA),就像包管理器对包所做的那样。

由于Cargo的限制,该包被命名为onebm。

安装和使用

.install

$ mkdir -p ~/.local/1bm/bin
$ curl -O ~/.local/1bm/bin/1bm -sSL https://github.com/1bm/1bm/releases/latest/download/1bm-{linux,macos,windows.exe}
$ echo 'export PATH="$HOME/.local/1bm/bin:$PATH"' >> ~/.config/fish/config.fish; source ~/.config/fish/config.fish
$ 1bm i https://github.com/1bm/1bm/raw/master/1bm.1bmdist

由于实际上四行代码不会花费你太多时间,因此没有提供安装程序。

下载链接被重定向到GitHub发行版。您也可以从那里手动下载。

.use

# download dist file and install application with default binary name
$ 1bm i https://github.com/some/app/raw/master/app.1bmdist
# install application with custom binary name (also local identifier)
$ 1bm i -n someapp https://github.com/some/app/raw/master/app.1bmdist
# list binaries intalled through 1bm
$ 1bm ls
# update all installed applications
$ 1bm up
# update specified applications
$ 1bm up 1bm someapp
# uninstall applications
$ 1bm rm someapp

就这样。1bm 不试图做更多的事情。

.uninstall 1bm

$ rm -rf ~/.local/1bm
# Then remove the PATH line from your shell startup script. I don't know a one-liner to do that.

对于生成分发文件和签名的开发者,请参阅 分发文件和签名

为什么?

如今,许多CLI应用程序都是按照以单个二进制文件的形式交付,不依赖于共享库的方式构建的。值得注意的是,AppImage就是尝试为GUI应用程序这样做。

使用完整的软件包管理器,包通常由除了应用程序作者以外的人管理,导致版本过时,甚至废弃的包。

使用应用程序所编写的编程语言的包管理器怎么样?首先,尽管语言包管理器被称为“包管理器”,但它们被用来管理源代码包(库),而不是二进制文件;其次,用户必须安装一个额外的软件,他们可能根本不会使用。

许多作者现在利用公共CI/CD服务来交付他们的应用程序;从这些服务下载二进制文件通常非常简单。

因此,为SBA拥有一个“应用程序管理器”是合理的。

如何?

  • SBA作者对他们的二进制文件进行签名,并分发一个1bm分(分)发文件(JSON,以“.1bmdist”结尾),其中包含签名密钥、默认二进制名称以及下载最新二进制文件的位置。
  • 要安装应用程序,您将dist文件提供给1bm,然后1bm将下载二进制文件,使用密钥进行验证,并将其放入其二进制存储库中。
  • 在升级应用程序时,1bm会进行下载-验证-存储的过程。
  • 在卸载时,简单地删除已安装的二进制文件。(实际上有一些账务处理)
  • 如果“更新URL”是404,1bm会告诉用户他们应该检查新的dist文件。

安全性?

确实,运行预构建的二进制文件存在一些安全风险。但除非你足够疯狂,要审计和构建你使用的所有软件,包括操作系统,否则你正在运行你并不完全了解的东西。

一切都关乎信任。你已经信任了应用程序的作者,否则你最初就不会使用他们所构建的内容。

此外,二进制文件已签名。

分发文件和签名

分发文件是扩展名为 ".1bmdist" 的 JSON 文件。JSON 字段

  • signing_key string 签名公钥。
  • binary_name string 默认二进制名称。
  • download_url string 依赖于 download_type,见下文。
  • download_type string
  • ghr 通过 GitHub 发布版下载,总是最新的发布。有以下附加字段(在顶层)。如果特定平台没有构建二进制文件,则可以省略 github_asset_regex_* 字段。
  • download_url string GitHub 仓库缩略名,例如 bnoctis/1bm
  • github_asset_regex_linux string 匹配 Linux 资产名称的正则表达式。
  • github_asset_regex_macos string 匹配 macOS 资产名称的正则表达式。
  • github_asset_regex_windows string 匹配 Windows 资产名称的正则表达式。
  • url 直接 URL 下载,不检查版本。
  • download_url string 下载 URL。

签名使用 minisign 生成。上面的 signing_key 是公钥。

预期签名将与二进制文件一起放置,命名为 SIGNED_FILE.minisig,例如如果二进制文件是 1bm,则命名为 1bm.minisig,这是 minisign 的默认行为。

许可证

BSD 3-clause © Blair Noctis。

依赖项

~6–19MB
~302K SLoC