1 个不稳定版本
0.0.1 | 2022年6月11日 |
---|
#10 在 #dist
21KB
372 行
1bm:单二进制管理器
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