在M1 Mac上通过tfenv安装terraform失败
正如标题所示,我在M1 Mac上安装terraform时遇到了一个我以前从未见过的错误,因此我在这里记录下来。
假设
$ sw_vers
ProductName: macOS
ProductVersion: 11.5.2
BuildVersion: 20G95
$ uname -mrsv
Darwin 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:27 PDT 2021; root:xnu-7195.141.2~5/RELEASE_ARM64_T8101 arm64
安装tfenv
只要有anyenv,无论何种情况,我都会尽快安装。
$ brew install anyenv
在我的环境中,我已经安装了一些版本管理工具,所以我会通过anyenv来安装tfenv。
$ anyenv versions
nodenv:
system
14.17.6
* 16.8.0 (set by /Users/shionel31/.anyenv/envs/nodenv/version)
rbenv:
system
* 3.0.2 (set by /Users/shionel31/.anyenv/envs/rbenv/version)
*
$ anyenv install tfenv
/var/folders/74/kf7jxg0n72lbzfvhr_19wkdw0000gn/T/tfenv.20211008183006.20347 /usr/local/bin
Cloning https://github.com/tfutils/tfenv.git master to tfenv...
Cloning into 'tfenv'...
remote: Enumerating objects: 1559, done.
remote: Counting objects: 100% (374/374), done.
remote: Compressing objects: 100% (147/147), done.
remote: Total 1559 (delta 233), reused 334 (delta 213), pack-reused 1185
Receiving objects: 100% (1559/1559), 336.28 KiB | 768.00 KiB/s, done.
Resolving deltas: 100% (996/996), done.
/usr/local/bin
Install tfenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.
$ tfenv -v
tfenv 2.2.2
安装Terraform
我們將安裝 Terraform,它是本題的主題。
$ terraform -v
No versions of terraform installed. Please install one with: tfenv install
$ tfenv list-remote
1.1.0-alpha20211006
1.1.0-alpha20210922
1.1.0-alpha20210908
1.1.0-alpha20210811
1.1.0-alpha20210728
1.1.0-alpha20210714
1.1.0-alpha20210630
1.1.0-alpha20210616
1.0.8
1.0.7
1.0.6
...
$ tfenv install 1.0.8
Installing Terraform v1.0.8
Downloading release tarball from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_darwin_amd64.zip
##################################################################################################################################################################################################### 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_SHA256SUMS
No keybase install found, skipping OpenPGP signature verification
/opt/homebrew/Cellar/tfenv/2.2.2/libexec/tfenv-install: line 251: 11963 Killed: 9 "${shasum_bin}" -a 256 -s -c <(grep -F "${tarball_name}" "${shasums_name}")
SHA256 hash does not match!
在这里出现了错误。找不到Keybase安装。
好像稍微忽略了一点,似乎有一个叫Keybase的应用程序。
另外,在M1 Mac上下载_amd64的tarball有点让人担心。
参考自https://github.com/tfutils/tfenv/issues/275
安装Keybase

我隨意地註冊了一個帳號。
再次尝试安装Terraform!
$ tfenv install latest
Installing Terraform v1.0.8
Downloading release tarball from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_darwin_amd64.zip
##################################################################################################################################################################################################### 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_SHA256SUMS
Unable to verify OpenPGP signature unless logged into keybase and following hashicorp
/opt/homebrew/Cellar/tfenv/2.2.2/libexec/tfenv-install: line 251: 12811 Killed: 9 "${shasum_bin}" -a 256 -s -c <(grep -F "${tarball_name}" "${shasums_name}")
SHA256 hash does not match!
只有在登录Keybase并且关注HashiCorp才会出现错误,错误信息已经改变,请关注Terraform提供方HashiCorp。
其实我已经安装了GUI版Keybase应用,并且似乎在终端中也能使用keybase命令,所以我将尝试关注一下。
$ keybase id hashicorp
▶ INFO Identifying hashicorp
✔ public key fingerprint: C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468F
✔ admin of DNS zone hashicorp.com: found TXT entry keybase-site-verification=a-iv8bbkw3LgvmnT-p1jJ7Com9O-5GrOyFClq2-0iRQ
$ keybase follow hashicorp
▶ INFO Identifying hashicorp
✔ public key fingerprint: C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468F
✔ admin of DNS zone hashicorp.com: found TXT entry keybase-site-verification=a-iv8bbkw3LgvmnT-p1jJ7Com9O-5GrOyFClq2-0iRQ [cached 2021-10-08 18:05:59 JST]
Is this the hashicorp you wanted? [Y/n] Y
Publicly follow? [Y/n] Y
看起来现在可以关注 HashiCorp 了。
再次挑战安装Terraform!
满怀期望地再次尝试安装Terraform!
$ tfenv install latest
Installing Terraform v1.0.8
Downloading release tarball from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_darwin_amd64.zip
##################################################################################################################################################################################################### 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_SHA256SUMS
Downloading SHA hash signature file from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_SHA256SUMS.72D7468F.sig
▶ INFO Identifying hashicorp
✔ <followed> public key fingerprint: C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468F
You last followed hashicorp on 2021-10-08 18:06:12 JST
✔ <followed> admin of DNS zone hashicorp.com: found TXT entry keybase-site-verification=a-iv8bbkw3LgvmnT-p1jJ7Com9O-5GrOyFClq2-0iRQ [cached 2021-10-08 18:05:59 JST]
Signature verified. Signed by hashicorp 1 week ago (2021-09-30 02:33:32 +0900 JST).
PGP Fingerprint: c874011f0ab405110d02105534365d9472d7468f.
/opt/homebrew/Cellar/tfenv/2.2.2/libexec/tfenv-install: line 251: 13208 Killed: 9 "${shasum_bin}" -a 256 -s -c <(grep -F "${tarball_name}" "${shasums_name}")
SHA256 hash does not match!
…只需要一种选择的话,请将以下内容用中文表达出来:
我对这件事已经感到厌烦了,但由于无法使用Terraform会造成困扰,所以我会再坚持一下。
可疑的部分是:
“${shasum_bin}” -a 256 -s -c <(grep -F “${tarball_name}” “${shasums_name}”)
shasum?這個似乎是個問題。Killed: 9 是”指令未找到”的相關。
请参考(再贴链接)https://github.com/tfutils/tfenv/issues/275
正如这个帖子中所提到的,有一部分是对shasum命令进行了重命名。
不过,我担心如果进行重命名会对依赖于shasum的其他部分产生连锁影响,所以我会采取一些措施。
$ which shasum
/opt/homebrew/bin/shasum
$ shasum
zsh: killed shasum
$ ls -la $(which shasum)
lrwxr-xr-x 32 shionel31 admin 2021-07-30 11:10 /opt/homebrew/bin/shasum -> ../Cellar/perl/5.34.0/bin/shasum
嗯嗯,有可执行文件但命令却无法运行。
我需要一个可用的shasum命令。
$ brew list | grep sha
wireshark
$ brew search shasum
==> Formulae
sha3sum
然而,尽管有一些困难,但为了能够先行动起来,我会试着去做。
$ brew install sha3sum
$ sha3sum ${ファイル名}
faffad5de05ce9d02bb51c5ff6a1c08c490d3730 ${ファイル名}
只需一个选项,用中文释义以下内容:这个用途用于生成哈希值。
$ ls -la $(which shasum)
lrwxr-xr-x 32 shionel31 admin 2021-07-30 11:10 /opt/homebrew/bin/shasum -> ../Cellar/perl/5.34.0/bin/shasum
$ ls -la $(which sha3sum)
lrwxr-xr-x 35 shionel31 admin 2021-10-08 18:17 /opt/homebrew/bin/sha3sum -> ../Cellar/sha3sum/1.2.1/bin/sha3sum
在这里,将sha3sum命令设置为别名shasum。
$ export "alias shasum=sha3sum" > ~/.zshrc
$ tail -1 ~/.zshrc
alias shasum=sha3sum
$ source $_
顺便提一下,即使不使用别名,而是创建符号链接,也可以正常工作。但是,由于sha3sum本身会引发循环引用的错误,所以这并不是一种正规方法。
$ cd /opt/homebrew/bin
$ ln -snf /opt/homebrew/bin/shasum ../Cellar/sha3sum/1.2.1/bin/sha3sum
$ shasum -v
6.02
$ sha3sum
zsh: too many levels of symbolic links: sha3sum
第三次尝试安装Terraform!!
$ tfenv install latest
Installing Terraform v1.0.8
Downloading release tarball from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_darwin_amd64.zip
##################################################################################################################################################################################################### 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_SHA256SUMS
Downloading SHA hash signature file from https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_SHA256SUMS.72D7468F.sig
▶ INFO Identifying hashicorp
✔ <followed> public key fingerprint: C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468F
You last followed hashicorp on 2021-10-08 18:06:12 JST
✔ <followed> admin of DNS zone hashicorp.com: found TXT entry keybase-site-verification=a-iv8bbkw3LgvmnT-p1jJ7Com9O-5GrOyFClq2-0iRQ [cached 2021-10-08 18:05:59 JST]
Signature verified. Signed by hashicorp 1 week ago (2021-09-30 02:33:32 +0900 JST).
PGP Fingerprint: c874011f0ab405110d02105534365d9472d7468f.
Archive: tfenv_download.k4eWK1/terraform_1.0.8_darwin_amd64.zip
inflating: /opt/homebrew/Cellar/tfenv/2.2.2/versions/1.0.8/terraform
Installation of terraform v1.0.8 successful. To make this your default version, run 'tfenv use 1.0.8'
我进入了
$ tfenv use 1.0.8
$ tfenv version-name
1.0.8
$ tfenv list
* 1.0.8 (set by /opt/homebrew/Cellar/tfenv/2.2.2/version)
$ terraform -v
Terraform v1.0.8
on darwin_amd64
我并没有在Rosetta上打开终端,但是显示了强烈依赖于”darwin_amd64″!一旦terraform命令可以运行,这就可以了。