6 个版本 (3 个重大更改)

0.12.0 2022 年 8 月 16 日
0.11.0 2021 年 4 月 27 日
0.10.2 2020 年 9 月 12 日
0.10.1 2020 年 7 月 31 日
0.9.0 2020 年 6 月 30 日

#10#hashi-corp

MIT/Apache

76KB
1.5K SLoC

hcdl: HashiCorp 下载器

hcdl 是一个用于轻松下载和安装 HashiCorp 产品的工具。

安装

hcdl 如果您已安装至少 v1.57.0 的稳定 Rust 工具链,则可以从 crates.io 安装。

可以使用标准的 Cargo 安装命令来完成此操作

$ cargo install hcdl

默认情况下,hcdl 将将 HashiCorp GPG 密钥嵌入到二进制文件中,以简化通过 Cargo 安装时的使用。

将要使用的 GPG 密钥可以在源代码中的 gpg 目录中的 hashicorp.asc 文件中找到。您可以按照以下详细信息将该密钥与 https://www.hashicorp.com/security 上提供的详细信息进行验证。

如果您不信任提供的 GPG 密钥,可以使用以下命令在安装时禁用嵌入

$ cargo install --no-default-features hcdl

包特性

hcdl 包含两个特性

  • embed_gpg_key,该特性嵌入用于验证下载文件签名的 HashiCorp GPG 密钥
  • shell_completion,该特性添加了 --completions CLI 参数,用于为您选择的 shell 生成补全

这两个特性都是默认启用的。如果您希望不包含嵌入的 GPG 密钥安装 hcdl,但启用 shell 补全生成支持,则可以按照以下方式安装

$ cargo install \
    --no-default-features \
    --features shell_completion \
    hcdl

用法

hcdl 的用法非常简单,例如,如果我们想下载并安装 Terraform 的最新版本,我们可以运行以下命令

$ hcdl terraform

您将看到如下输出

Latest version: terraform v0.15.1 from Mon, 26 Apr 2021 22:02:28 +0000
Downloading and verifying signature of terraform_0.15.1_SHA256SUMS...
Verified against terraform_0.15.1_SHA256SUMS.sig.
Downloading terraform_0.15.1_freebsd_amd64.zip...
  [00:00:04] [########################################] 31.06MB/31.06MB (0s) done.
SHA256 of terraform_0.15.1_freebsd_amd64.zip OK.
Unzipping contents of 'terraform_0.15.1_freebsd_amd64.zip' to '/home/user/.local/bin'
-> Extracting 'terraform' to '/home/user/.local/bin'...
Installation successful.

hcdl 执行了以下步骤

  • 加载了 HashiCorp GPG 密钥
  • 找到了 Terraform 的最新版本
  • 下载了 SHA256SUMS GPG 签名文件
  • 下载了 SHA256SUMS 文件
  • 验证了 SHA256SUMS 文件与签名
  • 下载了 Terraform 的最新版本
  • 已验证下载文件的SHA256值与SHA256SUMS文件匹配
  • terraform二进制文件提取到临时文件中
  • 确保提取的临时文件的CRC32值与zip文件中的记录匹配
  • terraform二进制文件安装到~/.local/bin,通过将临时文件移动到适当的位置来实现
  • 设置提取的二进制文件的适当权限

默认情况下,hcdl将下载为其编译的操作系统和架构的产品(上面我们在x86_64的FreeBSD机器上运行了hcdl),但是,您可以指定--os--arch选项,下载任何操作系统和架构的产品。

HashiCorp GPG密钥

由于GPG签名检查,hcdl需要知道HashiCorp GPG密钥。有两种方式提供GPG密钥材料

将HashiCorp GPG密钥编译到应用程序中

这是提供GPG密钥的默认方式。

hcdl提供了embed_gpg_key功能,可以将GPG密钥直接编译到应用程序中。它将使用源存储库中提供的位于gpg / hashicorp.asc的GPG密钥。在启用此功能之前,建议您使用以下步骤检查此GPG密钥的有效性。

一旦您确认GPG密钥有效,您可以通过以下方式编译hcdl以启用GPG密钥嵌入

$ cargo build --release

通过文件系统提供hashicorp.asc

要启用此功能,将包含从https://www.hashicorp.com/security获取的HashiCorp GPG密钥的文件hashicorp.asc放置在适当目录中,根据以下表格

操作系统 路径
macOS ~//应用程序支持/hcdl
Windows %APPDATA%/hcdl
其他 $XDG_DATA_DIR/hcdl~/.local/share/hcdl

使用以下命令构建hcdl,无需嵌入GPG密钥

$ cargo build --release --no-default-features

验证GPG密钥

您放置的密钥应与安全页面上的密钥ID和指纹匹配,并且可以按照以下方式进行检查

$ gpg \
    --dry-run \
    --import \
    --import-options import-show \
    hashicorp.asc

应该产生以下输出

pub   rsa4096 2021-04-19 [SC] [expires: 2026-04-18]
      C874011F0AB405110D02105534365D9472D7468F
uid                      HashiCorp Security (hashicorp.com/security) <security@hashicorp.com>
sub   rsa4096 2021-04-19 [E] [expires: 2026-04-18]
sub   rsa4096 2021-04-19 [S] [expires: 2022-04-20]
sub   rsa4096 2021-04-21 [S] [expires: 2026-04-20]

gpg: Total number processed: 1

在编写本文档时,存储在此存储库中的GPG密钥是GPG密钥ID 72D7468F,指纹为C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468F,应与HashiCorp发布的GPG密钥匹配。

如果没有GPG密钥并且您仍然想使用该工具,您需要明确使用--no-verify-signature标志禁用签名验证。通过禁用GPG签名验证来运行hcdl是不推荐的。

示例

以下示例是在x86_64 FreeBSD机器上收集的。

检查最新版本的Terraform

$ hcdl --check terraform
Latest version: terraform v0.12.26 from Wed, 27 May 2020 17:17:12 +0000

安装后保留下载的zip文件

$ hcdl --keep terraform
Latest version: terraform v0.12.28 from Thu, 25 Jun 2020 16:21:37 +0000
Downloading and verifying signature of terraform_0.12.28_SHA256SUMS...
Verified against terraform_0.12.28_SHA256SUMS.sig.
Downloading terraform_0.12.28_freebsd_amd64.zip...
  [00:00:07] [########################################] 27.07MB/27.07MB (0s) done.
SHA256 of terraform_0.12.28_freebsd_amd64.zip OK.
Unzipping contents of 'terraform_0.12.28_freebsd_amd64.zip' to '/home/user/.local/bin'
-> Extracting 'terraform' to '/home/user/.local/bin'...
Installation successful.
Keeping zipfile terraform_0.12.28_freebsd_amd64.zip in current directory.

下载适用于不同OS的产品

$ hcdl --os linux terraform
Latest version: terraform v0.12.28 from Thu, 25 Jun 2020 16:21:37 +0000
Downloading and verifying signature of terraform_0.12.28_SHA256SUMS...
Verified against terraform_0.12.28_SHA256SUMS.sig.
Downloading terraform_0.12.28_linux_amd64.zip...
  [00:00:04] [########################################] 27.11MB/27.11MB (0s) done.
SHA256 of terraform_0.12.28_linux_amd64.zip OK.
Product downloaded for different OS, freebsd != linux
Skipping install and keeping zipfile 'terraform_0.12.28_linux_amd64.zip' in current directory.

下载特定版本的产品

$ hcdl --build 0.12.25 terraform
Downloading and verifying signature of terraform_0.12.25_SHA256SUMS...
Verified against terraform_0.12.25_SHA256SUMS.sig.
Downloading terraform_0.12.25_freebsd_amd64.zip...
  [00:00:03] [########################################] 15.97MB/15.97MB (0s) done.
SHA256 of terraform_0.12.25_freebsd_amd64.zip OK.
Unzipping contents of 'terraform_0.12.25_freebsd_amd64.zip' to '/home/user/.local/bin'
-> Extracting 'terraform' to '/home/user/.local/bin'...
Installation successful.

许可证

根据以下任一许可授权:

由您选择。

贡献

除非您明确声明,否则任何根据 Apache-2.0 许可定义的、有意提交以包含在作品中的贡献,将根据上述条款双许可,不附加任何额外条款或条件。

依赖

~22–36MB
~587K SLoC