ARMといえば、その電力効率のよさからスマートフォンをはじめ、様々な用途で利用されているCPUですよね。本連載でも、ARMプロセッサ搭載のデバイスであるRaspberry PiにUbuntuをインストール する方法を紹介してます。
モバイル市場においては支配的なARMアーキテクチャですが、一般的なデスクトップ/ノートPCの分野においては、まだまだx86_64が主流です。そんな中でARMアーキテクチャのApple M1チップを搭載したMac miniやMacBook Proの登場は、一時期話題になりました。
最近は筆者も、M1を搭載したMac miniを使用して、日常の業務を行っています。このように普段のデスクトップ環境としてはMacを使い、Linux環境は仮想マシン内に作るという運用をしている方は、筆者を含めて多いと思います。しかし現在のM1 Macでは、VirtualBoxの仮想マシンが動かないという問題があります。
そこで今回は、Apple Silicon上でARM64をエミュレートできるmacOS向けの仮想マシンホストUTM を使って、M1 Mac上でUbuntuを動かす方法を紹介します。
UTMのインストール
公式のドキュメントによるとUTMとは、macOSやiOS向けの、フル機能のシステムエミュレーターおよび仮想マシンホストです。UTMはオープンソースのCPUエミュレーターであるQEMUをベースに作られており、Appleのデバイス上で様々なアーキテクチャの実行を可能にしています。
macOS向けのUTMには、いくつかのインストール方法が用意されています。まず第一の選択肢は、GitHub からdmgファイルをダウンロードして、手動でインストールすることです。一般的なMac向けのアプリのインストールと同じですので、特に迷うことはないでしょう。またMac App Store からインストールすることもできます。ただしこちらのバージョンは有料(1220円)となっています。GitHubにある無料版と機能的な差異はありませんので、どちらを選んでも構いません。App Storeを使った自動アップデートの恩恵を受けたい場合や、開発元に援助を行いたい場合はApp Store版を、そうでなければ手動インストールを選択するとよいでしょう。
ちなみにHomebrewでインストールすることもできます。その場合は以下のコマンドを実行してください。なお筆者はHomebrewを使い、バージョン2.1.1をインストールしました。
HomebrewによるUTMのインストール
$ brew install --cask utm
仮想マシンの作成
UTMを起動すると、以下のウィンドウが表示されます。「 Create a New Virtual Machine」をクリックしてください。
図1 UTMの初回起動状態
「Information」では仮想マシンの情報を入力します。「 Name」には仮想マシンの名前を入力してください。わかりやすければ何でもかまいません。ただし、複数の仮想マシンを作成する場合、名前はユニークである必要があります。
「Style」は仮想マシンリストに表示される際の見た目の設定ですので、デフォルトの「Generic」ままでも構いませんが、せっかくですので「Operationg System」に変更しましょう。アイコンをクリックすると、仮想マシンにつくアイコンを変更できます。
図2 仮想マシンの名前を設定する。アイコンにはUbuntuのマークも用意されているので、変更しておくとわかりやすい。Notesには自由にメモが書けるので、似たような仮想マシンを複数の運用する場合は、判別できる情報を書いておこう。
「System」ではCPUアーキテクチャとメモリ量を設定します。「 Architecture」を「ARM64(aarch64)」に変更してください。自動的に「System」が「QEMU 6.0 ARM Virtual Machine」に変化します。「 Memory」はMacに実装されているメモリ量と相談して決定してください。用途にもよりますが、後述する手順でデスクトップ環境を導入する場合は、4096MB(4GB)以上くらいは割り当てておくとよいでしょう。
図3 ゲストのアーキテクチャと割り当てるメモリ量を設定する
「Drives」では仮想マシンに接続するディスクを設定します。まずは「New Drive」をクリックして、OSをインストールするディスクを作成しましょう。「 Interface」は「VirtIO」 、「 Size」は用途にもよりますが、最低でも20GBくらいを確保しておくと安心です。「 Create」をクリックすると、ディスクが作成されます。
図4 OSをインストールするディスクを作成する
続いて、インストール用のISOイメージをマウントするリムーバブルディスクを作成します。もう一度「New Drive」をクリックし、今度は「Removable」にチェックを入れてください。「 Interface」は「USB」です。
図5 インストールメディアをマウントするため、USBのリムーバブルなドライブを作成する
それ以外の項目はデフォルトのままで構いません。「 Save」をクリックすると、仮想マシンが作成されます。
Ubuntuのインストールとデスクトップ化
インストールに先立って、ARM64版Ubuntu Serverのインストール用ISOイメージをダウンロード しておいてください[1] 。今回はUbuntu 20.04.2 LTSを利用しました。
UTMの左ペインから、作成した仮想マシンをクリックして選択してください。仮想マシンの情報が表示されたら、(empty)となっている「CD/DVD」の部分をクリックして「Browse」を選択します。ファイルを開くダイアログが表示されますので、ダウンロードしたISOイメージを開いてください。これでインストールメディアがマウントされます。ウィンドウ右上の▶ボタン(再生ボタン)をクリックすると、仮想マシンが起動します。
図6 仮想マシンが完成した状態
あとは通常のUbuntu Serverのインストールと同様です。ただしブートローダーの画面で「Install Ubuntu Server」を選択してから、実際にインストーラーが起動するまで、1〜2分ほど時間がかかります。その間は以下の画面が表示された状態となりますが、仮想マシンが停止しているわけではありませんので、そのまましばらく待ってください。
図7 仮想マシンが起動すると、画面出力を表示するウィンドウが開くのはVirtualBoxと同じ。インストーラーが起動するまで、しばらくこの画面が表示されるが、ハングアップしているわけではない
図8 後は通常どおり、Ubuntu Serverをインストールする
インストールが終了したら仮想マシンを再起動します。ただ筆者が試したところ、インストーラーから「Reboot Now」を選択しても、再起動が行われず、画面が黒いまま停止してしまいました。その場合は仮想マシンのウィンドウのタイトルバーにある電源ボタンをクリックして、仮想マシンを強制的に停止してから再起動してください。またこの際、先ほどインストールメディアをマウントした「CD/DVD」の部分をクリックし、「 Clear」を選択してインストールメディアをアンマウントしておいてください。
図9 インストールが完了し、起動したUbuntu Serverのログイン画面。後はVirtualBoxとほぼ同じ感覚で利用できる
インストールしたUbuntuはサーバー版ですから、当然デスクトップは使えません。サーバーとして使うのであればこのままで構いませんが、デスクトップを利用したい場合は以下の手順でデスクトップ環境を追加インストールしてください。
なおこの際、すべてのパッケージを取得できず、途中でtaskselがエラー終了してしまうことが何度かありました。その場合はtaskselを再実行してみてください。ダウンロード済みのパッケージはキャッシュされていますので、残りのパッケージのダウンロードから処理が行われます。
$ sudo apt install tasksel
$ sudo tasksel install ubuntu-desktop
OSを再起動すると、見慣れたグラフィカルなログイン画面が表示されます。
図10 ubuntu-desktopをインストール後、再起動した状態
Ubuntuデスクトップの日本語化
サーバー版のインストーラーでは日本語を選択できないため、多くの場合は使用言語に英語を選択することになるでしょう。そのままデスクトップ環境をインストールすると、当然ながら英語のデスクトップが表示されます。このままでは使いにくいので、日本語を追加します。
まずGNOMEの「Settings(日本語では設定)」から、「 Region & Language」を開きます。「 Manage Installed Languages」をクリックすると「Language Support」のウィンドウが開きますので、「 Install / Remove Languages」をクリックします。言語の一覧が表示されたら、「 Japanese」にチェックを追加して「Apply」をクリックしてください。
図11 Language Supportから日本語を追加する
ここで一度、「 Settings」のウィンドウを閉じてください。というのも、一度ウィンドウを閉じて開き直さないと、インストールした言語が反映されないためです。再度「Region & Language」を開いたら、「 Language」を「日本語」に、「 Formats」を「日本」に変更してください。ここまでできたら、「 Language」の欄に「Restart」ボタンが表示されているはずです。このボタンをクリックして、一度Ubuntuからログアウトしてください。
図12 LanguageとFormatsを変更してから、一度ログアウトする
ログインし直したら、もう一度「Region & Language」の画面を開きます。日本語化されているため、名前は「地域と言語」になっているでしょう。そこで「入力ソース」の「英語(US)」の下にある「+」ボタンをクリックして、「 日本語」 →「 日本語(Mozc)」を追加してください。これでMozcによる日本語入力が可能になります。
図13 入力ソースにMozcを追加する
これで基本的な設定は終了です。UTMでは3Dアクセラレーションが使えないため、グラフィック表示のパフォーマンスで少々難はありますが、テスト目的としては十分使用できるでしょう。またサウンドの再生や、YouTubeの閲覧なども、デフォルトのままで問題なく可能です。またホストであるmacOSとのクリップボード共有も、デフォルトの状態でできるようになっています[2] 。
ポートフォワードで仮想マシンにアクセスする
仮想マシンでサーバーを立てて利用する場合、他のPCからサーバーに直接アクセスできたほうが便利です。そのためVirtualBoxなどではネットワークインターフェイスをNATではなくブリッジにして、仮想マシンをLANに直接接続するのが一般的でしょう。しかし現在のUTMでは、ブリッジインターフェイスを作ることができません。そのため仮想マシンに外部からアクセスするには、ポートフォワードを設定する必要があります。
例としてTCPの22番ポートをフォワードして、SSH接続ができるようにしてみましょう。仮想マシンの設定画面の「Network」を開き、「 Port Forward」の「New」をクリックします。以下の表の通りの値を設定して、「 Save」をクリックしてください。
Protocol TCP
Guest Address 0.0.0.0
Guest Port 22
Host Address 127.0.0.1
Host Port 22
これでホストであるMacの22番ポートへのアクセスが、仮想マシンに転送されます。仮想マシンにSSHしたい場合は、次のコマンドを実行してください[3] 。
ホストのMacから仮想マシンへSSHする
$ ssh localhost
別のPCからMac上の仮想マシンへSSHする $ ssh (MacのIPアドレス)
図14 ホストの22番ポートをゲストへフォワーディングする設定を追加する例
図15 ホストのMacのターミナルから、localhostを指定して仮想マシンにSSHができた
VirtualBoxを完全に置き換えられるとまでは言いませんが、M1 Mac上で仮想マシンを実行したい場合は、UTMは現在の有力な選択肢ではないでしょうか。