日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

M1 Mac で Vagrant を実行する

メイン開発機を M1 の MacBook Pro に切り替えるため、色々調べていたので、動かすまでのログと参考 URL です。

M1 MacVagrant を使う時の障害

VagrantVirtualBox が標準的な仮想マシンの実行環境です。が、VirtualBox は今のところ Apple Silicon に対応する予定はなさそうです…

M1 環境に VirtualBox をインストールすると問題が起こるため、現在は M1 環境ではインストールが行えないように VirtualBox の修正 が行われたようです。

VirtualBox の代替候補

macOS 上の VirtualBox に変わる仮想環境としては、次が挙げられます。

multipass で頑張るという方法もあるみたいですが、Vagrant で動かす、という趣旨から外れるので、今回は multipass は除外しました。

VMWare Fusion

Fusion Pro というエディションだと、Vagrant に対応できるようです。

M1 対応版は現在 Technical Preview という状態 でした。

Parallels Desktop

Parallels Desktop も Pro Edition というものだと Vagrant に対応するようです。

M1 は正式対応となっており、比較的安心して使えます。

Pro Edition は、サブスクリプション体系の料金で買い切りはありません。買い切りは Standard Edition というものになりますが、Vagrant など開発者が使うようなツールとの統合が省かれてます。

もともと、ParallelsWindows 環境での検証を行う時に使っていたので、ライセンスを M1 MacBook Pro に移して使う ことにしました。

Vagrant から Parallels を使う手順

Vagrant のインストール

これは Intel Mac のときと変わらず、.dmg ファイルや brew などからインストールを行います。

Parallels Provider のインストール

Vagrant は標準環境が VirtualBox であるため、Parallels を利用するためのプラグインをインストールします。

$ vagrant plugin install vagrant-parallels

仮想マシン起動まで

$ vagrant init bento/ubuntu-20.04-arm64
$ vagrant up

以上で起動するはずです。 M1 MacVirtualBox をインストールしていなければ、余計なオプションも特に必要ありません。

仮想マシンの構成変更や設定について

VirtualBox の時とは設定可能な項目も変わるので、公式ドキュメント を参考に変更しましょう。

注意点や補足

Box について

vagrant init bento/ubuntu-20.04-arm64 として、Vagrantfile を作成していますが、指定している Box 名の通り、ARM64 版の Ubuntu-20.04 です。

M1 上で動作する Parallelsx86/amd64 版の OS をゲスト OS として動作させることはできません。

Parallels 公式の情報 が出ているので、動作する OS などはそれを参照してください。

ネットワーク構成について

VirtualBox では Vagrantfile で定義できた、ホストオンリーアダプタと内部ネットワーク(かつ固定 IP アドレス)、ポートフォワードの組み合わせがうまくできませんでした。(IP アドレスを明確に分けて、構成をテストしたいシチュエーションだったもので…)

Parallels に移行してからは、しかたなくホストオンリーアダプタとポートフォワードだけでネットワークを構成しました。

apt upgrade 後に Ubuntu 20.04 が起動しなくなる問題

vagrant up で起動したものの再起動すると、Ubuntu 20.04 が起動しなくなる問題に遭いました。apt upgrade 後に問題が起こることまでは、原因を特定できたので、新しいカーネルを適用しないようにして、影響が出ないようにしていました。(Parallels 側で現在は修正対応済みです)

Parallels Forum で同様の問題のトピックを見つけました。カーネルバージョンと Parallels バージョンの食い合わせで発生する問題で、自分の環境は バージョン 17.1.1 (51537) でした。

この問題は修正済みで バージョン 17.1.2 (51548) にアップデートにすることで解消します。

まとめ

M1 Mac に移行しても、Parallels があれば Vagrant 環境もあまり違和感なく使えるようになりました。

Ubuntu 公式の Box などは、今のところ存在しないので、前述の bento か、自前で Box を作る必要があります。 Vagrant Cloud を見る限り、CentOSDebian の Box も存在してないので、chef/bento のテンプレートを利用して、自分で Box を作るのも良いかもしれません。

Parallels Desktop のライセンス費用もかかりますが、Docker コンテナでは目的に合わない場合には M1 Mac であっても、Vagrant は選択肢になり得そうです。

参考

https://parallels.github.io/vagrant-parallels/docs/