M1 Macでtfenv経由でterraformインストールでコケた

タイトルの通りですが、M1 Macでterraformインストール中に見たことないエラーに出くわしたのでここにしたためます。

## 前提
```bash
$ 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`ということで、徐に入れます。

```bash
$ brew install anyenv
```

私の環境ではすでにanyenvでいくつかバージョン管理ツール入れていたので、anyenv経由でtfenvインストールします。

```bash
$ 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`をインストールします。

```bash
$ 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!
```

ここでエラーが発生。`No keybase install found`。
ちょっと見過ごしちゃいそうですが、keybaseというアプリがあるそうです。
あと、M1 Macでも`_amd64`のtarballを落としちゃってるところはやや気になります。

参考
https://github.com/tfutils/tfenv/issues/275

## Keybaseインストール
https://keybase.io/docs/the_app/install_macos
ここから愚直にdmgを落としてインストールしました。
![Image 2021-10-08 at 6.43.40 PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31464/6ac645d8-6f02-a535-4aea-fbe2d4f8ebe2.jpeg)

適当にサインアップしました。


## terraformインストール再挑戦！
```bash
$ 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!
```

エラー発生、、しかしエラー文言は変わりました。
`unless logged into keybase and following hashicorp`と書いてあるので、terraform提供元のhashicorpをfollowしてくれと。

実はGUI版Keybaseアプリをインストールした状態で、ターミナルでも`keybase`コマンドが使えるようになってるっぽいので、followしてみます。

```bash
$ 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をfollowできたようです。

## terraformインストール再々挑戦！
満を持してterraformのインストールに再びTry！

```bash
$ 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!
```

...:sob:

もう嫌になってきましたが、`terraform`使えないと困るのでもう少し粘ります。
怪しい箇所：
`"${shasum_bin}" -a 256 -s -c <(grep -F "${tarball_name}" "${shasums_name}")`

shasum?これが問題っぽいです。`Killed: 9`はCommand not found絡み。

参考（再掲）
https://github.com/tfutils/tfenv/issues/275

こちらのスレッドにもある通り、shasumコマンドをリネームしている部分がありました。
ただ、リネームしちゃうとshasumに依存している他の部分に波及してしまうんではないかと思い、手を打ってみます。

```bash
$ 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`コマンドがほしい。

```bash
$ brew list | grep sha
wireshark
$ brew search shasum
==> Formulae
sha3sum
```

3?となりましたが、ひとまず動けばいいので入れてみます。

```bash
$ brew install sha3sum
$ sha3sum ${ファイル名}
faffad5de05ce9d02bb51c5ff6a1c08c490d3730  ${ファイル名}
```
↑こんな感じでハッシュ値を出す用途で使います。

```bash
$ 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を設定します。

```bash
$ export "alias shasum=sha3sum" > ~/.zshrc
$ tail -1 ~/.zshrc
alias shasum=sha3sum
$ source $_
```

ちなみにエイリアスを張らずにシンボリックリンクを張った場合でも動きましたが、`sha3sum`自体が参照ループのエラーになってしまうので正攻法では無いようです。

```bash
$ 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インストール再々々挑戦！！

```bash
$ 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'
```
入った :innocent:

```bash
$ 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でターミナル開いているわけではないのですが、がっつり「on darwin_amd64」！とでています。
一旦、`terraform`コマンド自体が動くようになったのでこれで御の字とします。