はじめに
MatsuribaTech(祭り場Tech) Advent Calendar 2023の17日目です。
Linuxの学習用に、自分の使っているPCのMacBook Air(M1, 2020)でもLinuxを手軽に使えないかなと思い、仮想化アプリケーションのVirtual Boxをインストールすることにしました。(実のところ数年前にもインストールしようとしたのですが、その時はM1Macにはインストール出来ないと言う結論に至り、数年経ったのでできるようになっているんじゃないかな〜と淡い期待を込めて再挑戦しました。)
しかし、CPUアーキテクチャがサポートしていないという旨のエラーが出て、そういえばCPUアーキテクチャ、理解があやふやな部分あるな〜と思ったのでこの際に学び直すことにしました。
結論から言うとAppleシリコンのPC(M1, M2など)にVirtual Boxをインストールすることはできます!が、少しだけコツがいります。
対象読者
- AppleシリコンのPC(M1, M2など)にVirtual Boxをインストールしたい人
- CPUアーキテクチャの違いがあやふやな人
Virtual BoxをMacBook Air(M1, 2020)にインストールしてみる
今回はパッケージ管理ツールのHomebrewを使ってVirtual BoxをM1Macにインストールしてみます。
ターミナルで以下のコマンドを実行します。
$ brew install --cask virtualbox
すると、このようにエラーになるかと思います。
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/8290ef01e26f1fe87714eea55b1175ae1910583b/Casks/v/virtualbox.rb
Already downloaded: /Users/leminhthientoan/Library/Caches/Homebrew/downloads/f8c3d1134ba4b9df0f82b944132ac0b0aca3df829588d69591bf17185b700836--virtualbox.rb
Error: Cask virtualbox depends on hardware architecture being one of [{:type=>:intel, :bits=>64}], but you are running {:type=>:arm, :bits=>64}.
Errorの行を見てみると、Virtual Boxはintel 64bitのCPUアーキテクチャを必要としているのに対して、あなたのPCはarm 64bitのCPUアーキテクチャを使用していますよと言われています。
CPUアーキテクチャについて整理する
上記のintel 64bit CPUアーキテクチャとかarm 64bit CPUアーキテクチャとはなんでしょうか?
CPUアーキテクチャにはx86とかx64とかx86_64とかarmとかいろいろあって混乱します。呼び方が複数あるものとかもありますし。
プログラムをインターネットからダウンロードするときなどに、自分のPCのCPUアーキテクチャに合わせてダウンロードするものを選んだりしなければいけない場面があり、今後困る可能性もあるのでここで整理しておこうと思います。
CPUアーキテクチャにはCISCとRISCの2種類が存在する
CPUには大きく分けてCISC(シスク)とRISC(リスク)の2種類が存在します。
CISC、RISCとは、命令セットアーキテクチャの設計手法を指す言葉です。もっと簡単にいうと、命令の仕方の違いを表しています。
CISC(Complex Instruction Set Computer)
日本語に訳すと「複雑命令セットコンピュータ」となります。
複雑命令とは、1つの命令が一連の複雑な処理を実行する方式です。
x86,x86_64といったものがあります。
x86
x86はPCのビット数が32bitのものを表します。
PCのビット数とは頭脳部分であるCPUが扱う情報量を示します。
x86_64
x86_64はx86を64bitに拡張させたものを表します。
他にx64,amd64とも呼ばれます。
x86アーキテクチャを採用している企業
x86のアーキテクチャを採用している企業は、有名どころだとIntel社とAMD社です。
Intel社の有名な商品には、Xeon、Core、Pentium、Celeronなどがあります。
AMD社の有名な商品には、Ryzen、Athlon、Optelonなどがあります。
RISC(Reduce Instruction Set Computer)
日本語に訳すと「縮小命令セットコンピュータ」となります。
縮小命令とは、1つの命令が簡単な処理しか行わない方式です。
armはRISCです。
arm
armにはバージョンがあり,ARMv7とARMv8があります。
ARMv7
以前のバージョンのARMv7はPCのビット数が32bitのものを表します。
ARMv8
今のバージョンのARMv8はAArch32(32bit)とAArch64(64bit) の2種類があります。
LinuxではAArch32のアーキテクチャをarmと表記し,AArch64をarm64と表記しています。
armアーキテクチャを採用している企業
armのアーキテクチャを採用している企業は、有名どころだとARM社です。
自分のPCのCPUアーキテクチャを調べる
CPUアーキテクチャの整理が大体できたところで自分のPCのCPUアーキテクチャを調べてみます。
Rosettaを使用しない場合
まずはFinderから「アプリケーション」のタブを選択し、使っているターミナルアプリケーションの上で右クリックして、「情報を見る」を選択して下さい。「Rosettaを使用して開く」という項目にチェックが入っていないことを確認して下さい。
ターミナルでuname -m
コマンドを実行してみて下さい。
$ uname -m
arm64
arm64と出力されたので、MacBook Air(M1, 2020)はARMv8のAArch64(64bit)であることが分かりましたね!
Rosettaを使用した場合
今度も同じようにFinderから「アプリケーション」のタブを選択し、使っているターミナルアプリケーションの上で右クリックして、「情報を見る」を選択して下さい。「Rosettaを使用して開く」という項目にチェックを入れて下さい。そして使っているターミナルアプリケーションを再起動します。
同じくターミナルでuname -m
コマンドを実行してみて下さい。
$ uname -m
x86_64
x86_64と表示されたので、MacBook Air(M1, 2020)はx86_64として認識されました!
同じPCなのにCPUアーキテクチャが別のCPUアーキテクチャとして認識されました。これはなぜでしょう?それはRosettaというものを使用しているからです。
Rosettaとは
RosettaとはIntelプロセッサ搭載Mac(M1以前のMac)用に開発されたアプリケーションをAppleシリコン搭載Mac(M1, M2など)でも使えるようにするためのアプリケーションです。
このアプリケーションはユーザーが開いたり操作したりするものではなく、自動的にバックグラウンドで動いてくれるアプリケーションで、Appleシリコンで使えるようにAppを自動変換してくれます。
つまり、ターミナルアプリケーションをRosettaを使用して開くことにより、arm64アーキテクチャをx86_64アーキテクチャだと認識して表示してくれていたということですね。(実際にCPUのアーキテクチャが変換されているわけではありません。)
Rosettaを使用して再びVirtual Boxをインストールしてみる
ターミナルアプリケーションの「Rosettaを使用して開く」という項目にチェックが入ったまま最初と同じようにVirtual Boxをインストールしてみます。
$ brew install --cask virtualbox
==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/8290ef0
Already downloaded: /Users/leminhthientoan/Library/Caches/Homebrew/downloads/f8c3d1134ba4b9df0f82b944132ac0b0aca3df829588d69591bf17185b700836--virtualbox.rb
==> Downloading https://download.virtualbox.org/virtualbox/7.0.12/VirtualBox-7.0
######################################################################### 100.0%
==> Installing Cask virtualbox
==> Running installer for virtualbox with sudo; the password may be necessary.
Password:
installer: Package name is Oracle VM VirtualBox
installer: choices changes file '/private/tmp/choices20231023-7920-zyiodv.xml' applied
installer: Installing at base path /
installer: The install was successful.
🍺 virtualbox was successfully installed!
今度はインストールできたようですね!
Rosettaを使用したことにより、Intelプロセッサ搭載Mac(M1以前のMac)用に開発されたアプリケーションをAppleシリコン搭載Mac(M1, M2など)でも使用できるようにAppを自動変換してくれていたのです。
現在のM1Macはx86_64アーキテクチャとして認識されていますから、問題なくインストールできたというわけです。
まとめ
少々長くなってしまいましたが、Virtual BoxをMacBook Air(M1, 2020)にインストールすることを通して、CPUアーキテクチャの違いについて整理しました。
CPUアーキテクチャはCISCとRISCの2つに大別できます。
CISCにはx86やx86_64などのCPUアーキテクチャがあり、Intel社やAMD社が有名です。
x86_64はx64やamd64と呼ばれることもあります。
RISCにはarmやarm64などのCPUアーキテクチャがあり、ARM社が有名です。
補足
今回は仮想化アプリケーションにVirtual Boxを使ってみましたが、検索してみるとAppleシリコンのMacでは、UTMという仮想化アプリケーションを使用している記事が散見されました。
ただのLinuxの学習目的ならVirtual Boxに固執する必要はなく、UTMを使ってみるのも手かもしれません。自分も時間があったら使ってみようと思います。
参考