UTMを使ってM1 MacにUbuntu20.04をインストールして、その中でDockerを動かして、その中でUbuntu20.10を動かしてみる

Macの仮想化ソフトウェアというと、[VirtualBox](https://www.virtualbox.org/)、[VMware Fusion](https://www.vmware.com/jp/products/fusion.html)、[Parallels Desktop](https://www.parallels.com/jp/products/desktop/)といったプロダクトが代表的なところかと思いますが、この中で[Apple M1](https://www.apple.com/jp/mac/m1/)への対応が進んでいるのはParallels Desktopが先行している状況のようです。

- [Apple M1 チップを搭載した Mac への Parallels Desktop 対応状況について](https://www.parallels.com/jp/blogs/apple-m1-%E3%83%81%E3%83%83%E3%83%97%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9F-mac-%E3%81%B8%E3%81%AE-parallels-desktop-%E5%AF%BE%E5%BF%9C%E7%8A%B6%E6%B3%81%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
- [Mac版仮想化アプリParallels、AppleシリコンM1対応に積極的。仮想PCでWindowsが動くか](https://japanese.engadget.com/parallels-apple-silicon-120029592.html)
- [M1 Mac向けにArm版Windows提供？ MSとParallelsが正式に協力か](https://japanese.engadget.com/m1mac-armwindows-parallels-043038568.html)
- [仮想化アプリParallels、M1 Mac上でArm Windowsを中断|再開できるテクニカルプレビュー2公開](https://japanese.engadget.com/parallels-16-m-1-macs-techinical-preview-2-052057108.html)
- [Parallels Desktop for Mac with Apple M1 chip (Apple Silicon)​](https://b2b.parallels.com/Apple-Silicon)

上記のプロダクト以外にMac上で仮想環境を実現する方法としてはAppleが提供している[Virtualization framework](https://developer.apple.com/documentation/virtualization)を利用することで可能とのこと。

[Appleの開発者フォーラム](https://developer.apple.com/forums/thread/666633)ではVirtualization frameworkを利用したSimpleVM、vm-lite、virtualというプロダクトのGitHubのリポジトリが紹介されています。

「[Setting up Linux VM on Apple Silicon for Docker](https://piyush-agrawal.medium.com/setting-up-linux-vm-on-apple-silicon-for-docker-e5b9924fd09)」という記事にSimpleVMを利用したUbuntu上でDockerを起動するまでの手順が掲載されていたので実際にやってみたところ、Ubuntuが起動することは確認できましたが、vmlinuzとinitrdを準備するところが非常に煩雑だと感じました。

こうなると、やはりVirtualBoxやVMware Fusionのような仮想化のGUIフロントエンドが欲しくなります。そういった声に応えてくれるのがUTMやACVMといったQEMUラッパーです。

- [iOSデバイス上に仮想マシンを作成できるアプリ「UTM」がApple Silicon Macをサポートし、M1チップ搭載のMac上にARM64版WindowsやUbuntuをインストール可能に。](https://applech2.com/archives/20201207-utm-support-virtual-machines-for-apple-silicon-mac.html)
- [UTMとOpenCoreを利用し、x86版macOS 10.14 MojaveをApple Silicon Mac上で動作させることに成功したもよう。](https://applech2.com/archives/20210118-macos-10-run-with-opencore-and-utm-on-apple-silicon-mac.html)
- [Apple M1チップ搭載のMacでARM版Windows 10を動作させるQEMUラッパー「ACVM」がリリース。](https://applech2.com/archives/20201206-acvm-qemu-hvf-ui-wrapper-for-windows-10-arm.html)

前置きが長くなりましたが、それではUTMを使ってM1 MacにUbuntuをインストールしていきましょう。
手順については[UTMのリポジトリ](https://github.com/utmapp/UTM)の「[Install Ubuntu ARM64 on Apple M1](https://github.com/utmapp/UTM/wiki/Install%20Ubuntu%20ARM64%20on%20Apple%20M1)」というWikiか、もしくは、[UTMのページ](https://mac.getutm.app/)の「[Ubuntu 20.04](https://mac.getutm.app/gallery/ubuntu-20-04)」にキャプチャ付きでまとめられてるので、実はここを見れば一発なんですが今回はUTMをインストールするところから説明していきます。

UTMの[リリースページ](https://github.com/utmapp/UTM/releases)からMac用のインストールバイナリ(UTM.dmg)をダウンロードしてインストールします。（2020年2月25日時点では[v2.0.22](https://github.com/utmapp/UTM/releases/tag/v2.0.22)が最新版のようです。）

次に、[Ubuntu Server for ARM](https://ubuntu.com/download/server/arm)のページからARM版のイメージ(ISOファイル)をダウンロードします。今回は「20.04.2 LTS」を利用することとします。

あとは先程紹介したインストール手順に従い進めていきます。

UTMを起動します。
![スクリーンショット 2021-02-25 1.27.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/f03d672d-dc30-5e47-ad46-a67954e9bc46.png)

画面上段の「+」ボタン、もしくは、「Create a New Vitural Machine」のアイコンをクリックします。
![スクリーンショット 2021-02-25 1.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/5cb48d98-59a2-1cfb-c473-3d0a33a30a87.png)

InformationタブのName欄に「Ubuntu 20.04」と入力し、Styleから「Operating System」を選択します。
![スクリーンショット 2021-02-25 1.31.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/5365a271-7693-2fdc-da29-ec4d75d583fa.png)

Systemタブに移動します。
![スクリーンショット 2021-02-25 1.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/b2bac45b-6556-c03f-4d9f-39323019c8ef.png)

Architectureから「ARM64 (aarch64)」を選択すると、自動的にSystemから「QEMU 5.2 ARM Virtual Machine (alias of virt-5.2) (virt)」が選択されます。
Memoryについては環境によって設定可能な値が変わってくると思いますが、今回は8192MB(8GB)で設定してみます。
![スクリーンショット 2021-02-25 9.19.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/8f080462-6017-553b-c7fe-cedb9862dcae.png)

Deviceタブに移動します。
![スクリーンショット 2021-02-25 1.36.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/a6874b74-5d65-3d45-3d28-cea0e38e3f12.png)

「New Device」ボタンをクリックし、Interfaceで「VirtIO」が選択された状態でSizeに「10GB」と入力します。
![スクリーンショット 2021-02-25 1.37.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/8ebc4d81-f198-fbbd-fb07-9c1e7edff1bb.png)

「Create」ボタンをクリックします。
![スクリーンショット 2021-02-25 1.40.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/b0b458dd-2622-1ea8-da21-25c901c90a3e.png)

もう一度「New Device」ボタンをクリックします。「Removable」にチェックすると、Interfaceで「USB」が選択された状態となります。
![スクリーンショット 2021-02-25 1.41.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/fb0908c3-10b3-f64b-b658-e427228bb14e.png)

「Create」ボタンをクリックします。
![スクリーンショット 2021-02-25 1.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/fdece8b8-7514-f2ca-3159-0e27dc65923c.png)

「Save」ボタンをクリックすると、仮想マシンの枠ができあがります。
![スクリーンショット 2021-02-25 1.44.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/00534627-9f25-0e94-6925-0584d175b49c.png)

「CD/DVD」の欄をクリックすると「Browse」と表示されるのでこれをクリックします。
![スクリーンショット 2021-02-25 1.46.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/f6399e5c-a1ce-14ed-ff7e-cd3af7967b7a.png)

事前にダウンロードしておいたISOファイルを選択します。
![スクリーンショット 2021-02-25 1.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/ea55ca7d-9f97-3abe-1afb-ba7725fe0f92.png)

再生アイコン（起動ボタン）をクリックすると仮想マシンが起動します。
![スクリーンショット 2021-02-25 1.52.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/0661c195-e121-751a-ccb8-16c52b06548c.png)

事前に作成したCD/DVDドライブより先にハードディスクの方を起動ドライブとして認識しているため起動できない状態となっています。
![スクリーンショット 2021-02-25 1.55.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/35ed5d85-8388-11d3-046c-a3391b0b0683.png)

EXITと入力してEnterを押下します。
![スクリーンショット 2021-02-25 2.02.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/fa0a4833-6b34-1850-4b1f-64c85d6e2418.png)

UEFIの設定画面へ遷移します。
![スクリーンショット 2021-02-25 2.02.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/47318d96-28d3-94af-ca43-6a43abaf04d7.png)

「Boot Manager」を選択します。
![スクリーンショット 2021-02-25 2.03.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/852b42d4-ffbd-2345-73e0-a0a45ef16dfc.png)

「UEFI QEMU QEMU USB HARDDRIVE」を選択します。
![スクリーンショット 2021-02-25 2.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/07648f8e-6797-397c-54f0-85fac93b2f1d.png)

Ubuntuのインストール画面が表示されるので「Install Ubuntu Server」を選択します。
![スクリーンショット 2021-02-25 2.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/d4c99b17-313f-2769-1af9-35f51d1670ac.png)

Ubuntuの詳細なインストール手順については割愛します。

インストール後に利用したいパッケージが決まっているのであれば、「Featured Server Snaps」の画面で選択しておきます。今回はdockerを選択しました。
![スクリーンショット 2021-02-25 9.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/9dd7d547-9a33-4a94-42ed-309ec4d93d3d.png)

インストールが完了したら一旦仮想マシンを停止し、CD/DVDの「Clear」を選択して再度仮想マシンを起動します。
![スクリーンショット 2021-02-25 9.40.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/dd7b57a9-7afa-4dcb-e1f3-374dcaa784c8.png)

GRUBの画面が表示されますので、「Ubuntu」を選択します。
![スクリーンショット 2021-02-25 9.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/1039581a-16de-e820-454a-11f87e1362e7.png)

Ubuntuが起動します。
![スクリーンショット 2021-02-25 9.42.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/dba437b0-bfe6-3fdd-13a4-c5b3706a70d0.png)

インストール時に設定したアカウントでログインし、unameと/etc/os-releaseを確認してみます。
![スクリーンショット 2021-02-25 9.47.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/c82f020a-bcfa-ea6b-c983-825aa106450d.png)

`sudo apt-get -y install ubuntu-desktop` を実行してデスクトップ環境をインストールしてみます。
![スクリーンショット 2021-02-25 9.48.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/7a18ba07-4a3b-a1e9-bde6-c32ec8713a3d.png)

インストールが完了したら `sudo reboot` で再起動します。
![スクリーンショット 2021-02-25 9.53.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/cf3126b7-f9be-3faa-5dde-60f50d9bd48c.png)

再起動後はGUIのログイン画面が表示されます。
![スクリーンショット 2021-02-25 9.54.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/df5dea88-ca60-d8d7-2d0d-027735460fd6.png)

ログインするとデスクトップ環境が表示されます。
![スクリーンショット 2021-02-25 9.55.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/c29ca292-b2e8-6317-3d99-3509203e659c.png)

Ubuntuのインストール時にDockerをインストールしていたので、Dockerのバージョン情報を表示してみます。
![スクリーンショット 2021-02-25 12.30.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/5cf4058c-20af-949f-d95e-704c5d908696.png)

`docker image pull （もしくは docker pull）` を実行してUbuntu 20.10のイメージを取得し、 `docker image ls （もしくは docker images）` でイメージが取得できているか確認します。
![スクリーンショット 2021-02-25 12.36.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/155c36f9-5b03-4153-d3c2-4677b48f26b4.png)

`docker container run （もしくはdocker run）` でコンテナのシェルを表示し、unameと/etc/os-releaseを確認してみます。
![スクリーンショット 2021-02-25 12.40.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/eddaee61-4dc8-3718-8e62-e98055a21ec7.png)

- 参考ページ
    - [M1 Macのqemuで動くUbuntu ServerをACVMで簡単に起動しよう](https://www.kaias1jp.com/entry/2020/12/09/043203)
    - [ARM 版 Windows 10 や Ubuntu for ARM64 を Apple Silicon な Mac で動かす](https://gist.github.com/niw/e4313b9c14e968764a52375da41b4278)
    - [M1でLinux仮想を動かす(SimpleVM)](https://qiita.com/bellx2/items/3a860c02080a520bd5a8)
    - [M1でLinux仮想を動かす(QEMU)](https://qiita.com/bellx2/items/c06e1c00ad9de77a4fb9)
    - [Apple M1 マシンで快適にUbuntuを使う](https://qiita.com/tatsuyai713/items/04c069d0389cfd7bee59)
    - [QEMU on M1 Mac](https://qiita.com/hjmr/items/abeb9a4567d08ddcc3b9)
    - [Experiments With Arm64 VMs on AppleSilicon Mac](https://netjibbing.com/post/experiments-with-arm64-vms-on-applesilicon-mac/)