在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

Image 2021-10-08 at 6.43.40 PM.jpg

我隨意地註冊了一個帳號。

再次尝试安装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命令可以运行,这就可以了。

bannerAds