やっとApple Siliconデビューしました。Intel Macで何も困っていなくてズルズルと使ってたんですが、たまたま縁があり、M1を使わせていただくことになりました。今のところ大変快適です。
Apple Siliconデビューしたのが遅かったからか、M1初期にあったツールが対応していないという状況にもなかなか出会わなくて、なーんだ普通じゃん?とか思ってたんですが、とうとう非対応なツールに巡り合ってしまいました。
$ aws /opt/homebrew/Cellar/asdf/0.14.1/libexec/lib/commands/command-exec.bash: line 28: /Users/ttanaka/.asdf/installs/awscli/2.17.47/bin/aws: Bad CPU type in executable /opt/homebrew/Cellar/asdf/0.14.1/libexec/lib/commands/command-exec.bash: line 28: /Users/ttanaka/.asdf/installs/awscli/2.17.47/bin/aws: Undefined error: 0
ふむ。少し試行錯誤していきます。
原因調査
asdfでaws-cliをインストールするときに使われるプラグインはこちらです。
asdf install awscli
を実行したときに走るスクリプトはこちら
asdf-awscli/bin/install at main · MetricMike/asdf-awscli · GitHub
普通にバージョンを指定してインストールするとhttps://awscli.amazonaws.com/AWSCLIV2.pkg
からインストーラーがダウンロードされて、必要なファイルが展開されるみたいですね。プレビルドされたバイナリが展開されるんですが、これがarm64に対応していないみたいです。
READMEにも書いてありますが、Rosetta 2をインストールすれば解決しそうです。が、なんか負けた気がして、少しスクリプトを見ていると、ソースからインストールする記述がありました。
elif [ "${ASDF_INSTALL_TYPE}" = "ref" ]; then install_source "${ASDF_INSTALL_VERSION}" "${ASDF_DOWNLOAD_PATH}" "${ASDF_INSTALL_PATH}" "${ASDF_CONCURRENCY}" fi
READMEにもビルドできるぞっという記述が
GitHub - MetricMike/asdf-awscli
ということでソースからインストールします。
ソースからインストール
READMEにはPython 3.8+
とあります。私の環境はPython 3.12.6
でした。asdfのバージョン指定部分がrefから始まっていればいいようなのでasdf install awscli ref:$(asdf latest awscli 2)
を実行します。
$ asdf install awscli "ref:$(asdf latest awscli 2)" ... ERROR: Ignored the following versions that require a different python version: 4.10 Requires-Python <3.11,>=3.6; 4.6 Requires-Python <3.11,>=3.6; 4.7 Requires-Python <3.11,>=3.6; 4.8 Requires-Python <3.11,>=3.6; 4.9 Requires-Python <3.11,>=3.6; 5.0 Requires-Python <3.11,>=3.7; 5.0.1 Requires-Python <3.11,>=3.7; 5.1 Requires-Python <3.11,>=3.7; 5.10.0 Requires-Python <3.12,>=3.7; 5.10.1 Requires-Python <3.12,>=3.7; 5.11.0 Requires-Python <3.12,>=3.7; 5.12.0 Requires-Python <3.12,>=3.7; 5.2 Requires-Python <3.11,>=3.7; 5.3 Requires-Python <3.11,>=3.7; 5.4 Requires-Python <3.11,>=3.7; 5.4.1 Requires-Python <3.11,>=3.7; 5.5 Requires-Python <3.12,>=3.7; 5.6 Requires-Python <3.12,>=3.7; 5.6.1 Requires-Python <3.12,>=3.7; 5.6.2 Requires-Python <3.12,>=3.7; 5.7.0 Requires-Python <3.12,>=3.7; 5.8.0 Requires-Python <3.12,>=3.7; 5.9.0 Requires-Python <3.12,>=3.7 ERROR: Could not find a version that satisfies the requirement pyinstaller==5.12.0 (from versions: 2.0, 2.1, 3.0, 3.1, 3.1.1, 3.2, 3.2.1, 3.3, 3.3.1, 3.4, 3.5, 3.6, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.5.1, 5.13.0, 5.13.1, 5.13.2, 6.0.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, 6.5.0, 6.6.0, 6.7.0, 6.8.0, 6.9.0, 6.10.0) ERROR: No matching distribution found for pyinstaller==5.12.0 ... FileNotFoundError: [Errno 2] No such file or directory: '/Users/ttanaka/.asdf/installs/awscli/ref-2.17.47/lib/aws-cli/bin/aws' make: *** [install] Error 1 ~ asdf-awscli: Expected /Users/ttanaka/.asdf/installs/awscli/ref-2.17.47/bin/aws to be executable. asdf-awscli: An error ocurred while installing awscli 2.17.47.
悲しい。無事ビルドに失敗しました。pyinstallerがよくないみたいなのでNo matching distribution found for pyinstaller==5.12.0
で検索してみると
見事それらしいところにヒット。このIssueの一番下でPythonのバージョンについて別のIssueに飛ばされていました。
私の環境と一致してそうですね。どうやらaws-cli v2はPython 3.12には対応していないようです。公式のREADMEにもサポートバージョンにも3.11までしか書かれていませんでした。
ということで、asdfでpython 3.11をインストールしていきます。
$ asdf plugin add python $ asdf install python $(asdf latest python 3.11) $ asdf global python $(asdf latest python 3.11) $ python --version Python 3.11.10
再チャレンジ
$ asdf install awscli ref:$(asdf latest awscli 2) ... asdf-awscli: asdf-awscli 2.17.47 installation was successful!
\(^o^)/
インストールできました。
$ asdf list awscli *2.17.47 ref:2.17.47
インストールされたバージョンのref:
から始まるんですね。
$ asdf global awscli ref:2.17.47 $ aws --version aws-cli/2.17.47 Python/3.11.10 Darwin/23.6.0 source-exe/arm64
ひゃっはー
これにて完了です。
まとめ
ソースからインストールするオプションがあるのは知りませんでした。aws-cliプラグインがたまたま実装していたのか、他のプラグインでも実装されているのかまでは確認していませんが、何かあればソースを見てみるの大事ですね。