ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

M1 MacにおけるHyperkitとそれが必要なアプリケーションの利用について

Minikubeは、macOSではVirtualBox, Docker, Hyperkitなどの中で動かすことができました。 M1 MacではVirtualBoxが動作しないので、それ以外のDockerかHyperkitを使う必要があります。

MinikubeでKubernetesクラスターを作る場合、Dockerベースでは一部のアドオンが動かない場合があり、Intel Mac環境ではこれまでHyperkitベースで使っていました。

MinikubeなどでHyperkitを使いたい場合は、次のドキュメントに要件が書かれています。

「そういえばDocker for Macを入れればHyperkitが入ったよな?」と思い、Docker for Mac(With Apple chipの方)を入れてみました。再起動後にCLIでhyperkitの所在を確認しましたが、hyperkitは入っていないようです(Intel Macではこの対応でよかった)。

% hyperkit
zsh: command not found: hyperkit
% which hyperkit
hyperkit not found

M1対応のDockerはHyperKitからAppleの新しいVirtualization Frameworkへ移行したようで、内部的にHyperkitは使われていないようです。そのため、M1対応版のDocker for Macを入れてもHyperkitは導入されないようです。

そこで、HyperkitをHomebrewを使って入れようと思いました。

% brew install hyperkit
hyperkit: A full installation of Xcode.app 9.0 is required to compile
this software. Installing just the Command Line Tools is not sufficient.

Xcode can be installed from the App Store.
Error: An unsatisfied requirement failed this build.

ところが失敗です。 どうやら、M1 MacでHyperkitをHomebrewでインストールする場合は、Xcodeも入っていないといけないようです。

というわけで、以下からXcodeをダウンロードしました(ここからダウンロードにはApple Developerアカウントが必要です。AppStoreでもダウンロードできます)。

Xcode.xipをダウンロードしたら展開(時間がかかる)して、アプリケーションディレクトリーにドラックアンドドロップします。終わったらダブルクリックしてライセンスに同意します。

そうしてもう一度brew install hyperkitを実行すると、今度はうまくい...かない!

% brew install hyperkit 
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 8 formulae.

Error: hyperkit: no bottle available!
You can try to install from source with:
  brew install --build-from-source hyperkit
Please note building from source is unsupported. You will encounter build
failures with some formulae. If you experience any issues please create pull
requests instead of asking for help on Homebrew's GitHub, Twitter or any other
official channels.

言われたように、「ソースからビルド」を実行してみます。 何か必要なソースをダウンロードしている様子です。

% brew install --build-from-source hyperkit
==> Downloading https://ghcr.io/v2/homebrew/core/lua/manifests/5.4.3-1
######################################################################## 100.0%
...
==> opam config exec -- opam install -y uri.3.1.0 qcow.0.11.0 conduit.2.1.0 lwt.5.3
Last 15 lines from /Users/ytooyama/Library/Logs/Homebrew/hyperkit/02.opam:
conduit.2.1.0

lwt.5.3.0
qcow-tool.0.11.0
mirage-block-unix.2.12.0
conf-libev.4-11
logs.0.7.0
fmt.0.8.8
mirage-unix.4.0.0
prometheus-app.0.7

The following dependencies couldn't be met:
  - lwt → ocaml < 4.12
      base of this switch (use `--unlock-base' to force)

No solution found, exiting

Do not report this issue to Homebrew/brew or Homebrew/core!

These open issues may also help:
hyperkit 0.20210107 https://github.com/Homebrew/homebrew-core/pull/72028

結構な時間待ったあげく、ビルドに失敗しました(回避方法なはさそう)。 どうやらM1 MacではHyperkitのビルドはまだだめっぽいです。

話を戻してM1 MacでMinikubeを使う方法ですが、HyperkitもVirtualBoxも使えない場合はDockerかQEMUが最適と思われます。

Ubuntu VMを実行できて便利なMultipassも同じ問題で使えないため、こちらも対応中みたいです。次から進捗を確認できます。

追記: 現在のバージョンのMultipassはM1以降のMacでも動作します。

そして、実行にHyperkitが必要なRancher Desktopは、現状M1 Macでは動かないようです。

追記: Rancher Desktopは0.7以降はM1以降のMacでも動作します。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。