#发布 #安装 #二进制 #包管理器 #Amazon S3 #CLI

应用程序 binst

binst的目标是提供一种简单的方法来发布和安装基于Rust的二进制文件,无需使用cargo-install,也无需复杂的操作系统依赖型包管理器。

9个版本

0.1.6 2023年3月16日
0.1.5 2023年1月7日
0.1.4 2022年1月19日
0.1.1 2021年6月7日
0.0.0 2021年5月13日

命令行界面分类中排名第161

每月下载量:41次

MIT/Apache

59KB
1.5K SLoC

Crates.io MIT licensed

开发中 - 正在开发中,但还处于早期阶段。

binst的目标是提供一个简单且去中心化的机制来发布和安装[基于Rust]的二进制文件。命令行不依赖于仓库位置,尽管我们可能在binst.io上提供某个仓库。目前,仅支持s3协议进行发布,以及s3http/https协议进行安装。

简而言之

  • 从开发机器,使用binst publish -r s3://my_bucket-com/repo进行发布(将发布之前构建的--release
  • 从任何机器,使用binst install my_cool_lib -r https://my_bucket.com/repo进行安装(假设您已将您的桶设置为网站)
    • 也可以使用相同的s3协议进行安装binst install my_cool_lib -r s3://my_bucket-com/repo
  • 安装完二进制文件后,只需执行binst update my_cool_lib即可,如果流中部署了新版本,则会进行更新(默认为主流)
  • 流基于semver pre,默认为主流main

操作系统支持 - 目前支持x64 mac和x64 linux gnu。ARM Mac / Linux即将推出。Windows,欢迎pull request。

安装

开发机和安装机上的二进制安装

## On Linux x86 (Intel/AMD)
curl -O https://repo.binst.io/binst/x86_64-unknown-linux-gnu/stable/binst.tar.gz && \
  tar -xvf binst.tar.gz && ./binst self && \
  echo 'source "$HOME/.binst/env"' >> ~/.bashrc && source "$HOME/.binst/env" 


## On Mac Apple Silicon
curl -O https://repo.binst.io/binst/arm64-apple-darwin/stable/binst.tar.gz && \
  tar -xvf binst.tar.gz && ./binst self && \
  echo '\nsource "$HOME/.binst/env"' >> ~/.zshenv && source "$HOME/.binst/env"

## On Mac x86 (Intel/AMD)
curl -O https://repo.binst.io/binst/x86_64-apple-darwin/stable/binst.tar.gz && \
  tar -xvf binst.tar.gz && ./binst self && \
  echo '\nsource "$HOME/.binst/env"' >> ~/.zshenv && source "$HOME/.binst/env"

关于AWS Linux的说明 - 在使用较旧实例时,您必须(并且应该)使用以下命令将openssl更新到1.1或更高版本:sudo yum install openssl11(按照Rust的要求)

在开发机上,也可以使用cargo install

cargo install binst

CLI示例

注意:您需要有 AWS S3 存储库以及凭证,凭证可以是环境变量或 AWS 配置文件

从开发机发布二进制文件。

## Publish to S3 
# Note: publish the --release, with the Cargo.tml version.
binst publish -r s3://my_repo_bucket/repo_root --profile my_aws_profile

# Or with the default AWS credential env variables set
binst publish -r s3://my_repo_bucket/repo_root 

安装已发布的二进制文件

# Install the latest stable version published (the one in the info.toml)
binst install cool_cli -r s3://my_repo_bucket/my_repo 

# install from a http/https URL (assuming http domain map  to the s3 bucket above)
binst install cool_cli -r https://my_repo_bucket.com/my_repo

# then, you can run the cool_cli (assuming ~/.binst/bin/ has been added to the PATH)
cool_cli ....

注意:目前,执行 binst install ... 将重新安装最新版本的二进制文件。它不会进行任何 semver 比较。

范围和概念

  • 不面向最终用户 - binst 不面向最终用户,而是面向开发者和技术社区。
  • 不是包管理器 - 愚蠢是新的智能;如果愚蠢不够,请使用真正的包管理器。
  • 暂不支持 Windows(目前) - 抱歉,我没有 Windows。欢迎提交拉取请求。
  • 没有中央存储库 - 首先去中心化,但最终会在 binst .io 上为流行的命令行工具创建一个配置文件。
  • 简单的存储库布局 - 只有一个。此外,仅支持 .tar.gz 格式。
  • 协议较少 - 使用 S3 发布,使用 https/s3 安装。计划支持 Git。

S3 凭证 - 环境变量

binst 通过以下方式获取 S3 凭证。

  • 如果定义了 --profile profile-name,它将使用标准的 AWS
  • 否则,
    • 首先,它将检查 BINST_... 环境变量
      • BINST_REPO_AWS_KEY_ID
      • BINST_REPO_AWS_KEY_SECRET
      • BINST_REPO_AWS_REGION
      • BINST_REPO_AWS_ENDPOINT(可选,当使用 minio 作为对象存储时很有用)
    • 否则,作为最后的退路,将查看标准的 AWS_... 环境变量
      • AWS_ACCESS_KEY_ID
      • AWS_SECRET_ACCESS_KEY
      • AWS_DEFAULT_REGION
      • AWS_ENDPOINT(可选,当使用 minio 作为对象存储时很有用)

存储库布局

- repo_base
  - cool_cli/
    - x86_64-unknown-linux-gnu/      
        - main/ # for main semver, like 0.1.1
            - latest.toml # latest         
            - 0.1.1/
                - cool_cli.toml # package.version = 0.1.1
                - cool_cli.tar.gz
            - 0.1.0/
                - cool_cli.toml # package.version = 0.1.0
                - cool_cli.tar.gz
        - rc/ # when semver has a -..pre.. (take the alpha only).
            - latest.toml
            - 0.1.0-rc.1/
                - cool_cli.toml # package.version = 0.1.0-rc.1
                - cool_cli.tar.gz            

本地目录布局

- ~/.binst/
    - env # sh file to source to set the ~/.binst/bin in the PATH
    - bin/ # symblink dir. Should be in the PATH
        crate_name -> ../packages/crate_name/0.1.3/upacked/crate_name
    - packages/
        - crate_name/
            - 0.1.3/
                - install.toml # (version and repo of the download. Will be user for the future 'binst update' command)
                - crate_name.tar.gz # (downloaded package)
                - unpacked/  # unpacked tar.gz containing the executable crate_name

目标

  • 到目前为止已测试
    • x86_64-apple-darwin(到目前为止只测试和支持了一个 !!!!)
    • x86_64-unknown-linux-gnu
  • 计划测试
    • aarch64-apple-darwin
    • aarch64-unknown-linux-gnu
  • 未计划(但欢迎提交拉取请求)
    • x86_64-pc-windows-msvc

https://doc.rust-lang.net.cn/nightly/rustc/platform-support.html

依赖项

~36–51MB
~894K SLoC