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 |
|
#10 在 #hashi-corp
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 License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则任何根据 Apache-2.0 许可定义的、有意提交以包含在作品中的贡献,将根据上述条款双许可,不附加任何额外条款或条件。
依赖
~22–36MB
~587K SLoC