2023.07.10

Apple Silicon (M1/M2)MacでのVagrant+VirtualBoxの代替手段

みなさんこんにちは、グループ研究開発本部 AI研究開発室のK.Fです。

これまで、Intel MacでVirtualBox + Vagrantを利用してCentOS 7の仮想(VM)環境を利用していたのですが、Apple Silicon MacにPCを乗り換えたので、代替方法がないか調査してみました。

結論

  • Ubuntu 22.04/aarch64 on multipass -> CentOS 7/x86_64 on vagrant + libvirt が最もよい
  • 動作は少し遅いと感じることがあるが、x86_64をエミュレートしているので本番との環境差分が少なくなってうれしい

1. はじめに

筆者の環境

  • MacBook Pro 14 inch, M2 Pro, 32GB RAM
  • MacOS Ventura 13.4.1

なるべくこれまで使ってきたVagrantfileを変更したくないので、どうにかして上記の環境でvagrantを利用したいです。Vagrantで利用できる主要なproviderの選択肢は以下のものがあります。

  1. VMWare
  2. Parallels
  3. VirtualBox
  4. libvirt
  5. qemu

VMWareとParallelsは、利用するのにコストが掛かってしまうので今回は対象外とします。残る選択肢は、VirtualBoxとlibvirt、qemuです。ホストPCがApple Silicon Macの場合、libvirtは直接vagrantのproviderに選択できないようなので、実質VirtualBoxとqemuの二択です。

2. どのような選択肢があるのか?

(1). CentOS 7/aarch64 on vagrant + VirtualBox

VirtualBoxはdeveloper preview版でaarch64のMacに対応しているのですが、VirtualBoxをベースにしたCentOS 7のvagrant boxが見つからなかったので、検証できませんでした。また、technical preview版なので、開発環境のテストにはおすすめしませんと注意書きもあったので利用するのはおすすめできないでしょう。

(2). CentOS 7/aarch64 on vagrant + qemu

centos-7-aarch64-2009-4Kのvagrant boxとvagrant-qemuを利用することで、centos 7/aarch64のOSを動かすことができます。しかし、ネットワークの利用に制限があり、ファイルマウントでSMBを利用しているなど、すこし特殊な実装になっており、筆者の環境ではうまく動きませんでした。

Vagrant.configure("2") do |config|
    config.vm.box = "ppggff/centos-7-aarch64-2009-4K"
    config.vm.provider "qemu" do |qe|
        qe.memory = "3G"
        qe.cpu = "host"
        qe.machine = "virt,accel=hvf,highmem=off"
    end
end

(3). Ubuntu 22.04/aarch64 on multipass -> CentOS 7/aarch64 on vagrant + qemu

aarch64ベースのUbuntuVMを立ち上げて、その中でCentOSのVMを動かす方法です。Apple Siliconでは、Nested VMができないみたいで、TCG(Tiny Code Generation)を使うと動くようです。vagrant-qemuを利用するのですが、筆者の環境ではうまく動きませんでした。

Vagrant.configure("2") do |config|
    config.vm.box = "ppggff/centos-7-aarch64-2009-4K"
    config.vm.provider "qemu" do |qe|
        qe.qemu_dir = "/usr/local/share/qemu"
        qe.memory = "3G"
        qe.machine = "virt,accel=tcg,highmem=off"
    end
end

(4). Ubuntu 22.04/arrch64 on multipass -> CentOS 7/x86_64 on vagrant + libvirt

aarch64ベースのUbuntuVMを立ち上げるのは同じですが、CentOSをx86_64でエミュレートします。aarch64でvagrantを動かさないので、 boxの選択肢が広いです。特に、centos公式のboxを利用できるので安心です。さらに、従来うごいていたx86_64のcentos環境をテストできるので、本番との環境差分を考えた際もこちらが最適でしょう。筆者の環境ではこれが唯、問題なく一動きました。欠点は、エミュレータを動かしているのでリソースをそれなりに割り当てても(筆者の環境では 6cpus, 6GB RAM)すこし遅いと感じることですかね、、

3. 環境構築手順

Ubuntu 22.04/arrch64 on multipass -> CentOS 7/x86_64 on vagrant + libvirtの環境構築手順は以下のとおりです。

(1). multipassのインストール

brew install --cask multipass
multipass launch --name ubuntu-22.04 --cpus 8 --mem 8G --disk 32G 22.04
multipass shell ubuntu-22.04

(2). vagrantのインストール on Ubuntu/aarch64

sudo apt -y install qemu qemu-system-x86 virt-manager vagrant vagrant-libvirt
sudo systemctl start libvirtd
sudo adduser $USER libvirt
(logout/login)

(3). Vagrantfileの設定

Vagrant.configure(2) do |config|
    config.vm.box = "centos/7"

    config.vm.provider "libvirt" do |virt|
        virt.driver = "qemu"
        virt.cpu_mode = "custom"
        virt.emulator_path = "/usr/bin/qemu-system-x86_64"
        virt.machine_arch = "x86_64"
    end
end

最後に

意外と、同じような課題を抱えている方が多そうなApple Silicon Macに切り替えてからのvagrant+VirtualBoxどうするか問題の一つの解決策をご紹介しました。困っている方の助けになれば幸いです。

グループ研究開発本部 AI研究開発室では、データサイエンティスト/機械学習エンジニアを募集しています。ビッグデータの解析業務などAI研究開発室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集要項一覧からご応募をお願いします。 一緒に勉強しながら楽しく働きたい方のご応募をお待ちしております。

参考

1. https://wiliki.zukeran.org/memo/1654534938.html

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事