LoginSignup
5
1

More than 1 year has passed since last update.

M1 Mac miniのUTM上で「ゼロからのOS自作入門」の環境を構築する

Posted at

この記事は何?

自分用のメモとしてM1 Mac miniのUTM上で「ゼロからのOS自作入門」の環境を構築する手順を残します。

動作環境

  • Macのバージョン: macOS Big Sur 11.0.1(Apple M1)
  • UTMのバージョン: 2.4.1

事前準備

「ゼロからのOS自作入門」の「付録A 開発環境のインストール」を参照すると、「mikanos-build」というGitHubのリポジトリのURLが記載されており、このリポジトリのREADMEの中で「Ubuntu 18.04 で動作を確認しています」とありますが、今回は Ubuntu 20.04 で環境を構築してみようと思うので、対象となるISOファイルをダウンロードしておきます。

Ubuntu 20.04のReleaseページにアクセスします。
スクリーンショット 2022-01-11 19.56.30.png

Server版のISOファイル「ubuntu-20.04.3-live-server-amd64.iso」をダウンロードします。
スクリーンショット_2022-01-11_19_55_11.png

UTMで Ubuntu 20.04 をインストール

QEMUのコマンドをゴニョゴニョしたくなかったので今回はUTMを利用することにしました。

まず、UTMを起動します。
スクリーンショット 2022-01-10 21.52.56.png

UTMの「+」ボタンをクリックして「Start from Scratch」をクリックします。

スクリーンショット 2022-01-10 21.54.08.png

このような初期画面が表示されます。
スクリーンショット 2022-01-10 23.46.57.png

InformationタブのName欄に「Ubuntu 20.04 amd64」と入力し、Styleから「Operating System」を選択します。
スクリーンショット 2022-01-11 19.58.29.png

Systemタブに移動します。
スクリーンショット 2022-01-10 23.49.25.png

Architectureで「x86_64」が選択されていれば特に変更は不要です。
Memoryについては環境によって設定可能な値が変わってくると思いますが、今回は8192MB(8GB)で設定してみます。
スクリーンショット 2022-01-10 23.49.57.png

Deviceタブに移動します。
スクリーンショット 2022-01-10 23.50.42.png

「New Device」ボタンをクリックし、Interfaceで「VirtIO」が選択された状態でSizeに任意の値を入力します。今回は30GBで設定してみます。
スクリーンショット 2022-01-10 23.51.54.png

「Create」ボタンをクリックします。
スクリーンショット 2022-01-10 23.52.27.png

もう一度「New Device」ボタンをクリックします。「Removable」にチェックし、Interfaceから「USB」を選択します。
スクリーンショット 2022-01-10 23.52.58.png

「Create」ボタンをクリックします。
スクリーンショット 2022-01-10 23.53.19.png

Displayタブに移動します。
スクリーンショット 2022-01-11 22.26.12.png

「Emulated Display Card」の選択肢からホストPCの対応状況に応じて選択します。今回は「virtio-vga」を選択します。
スクリーンショット 2022-01-11 22.26.43.png

「Save」ボタンをクリックすると、仮想マシンの枠ができあがります。
スクリーンショット 2022-01-11 20.01.15.png

「CD/DVD」の欄をクリックすると「Browse」と表示されるのでこれをクリックします。
スクリーンショット 2022-01-11 20.03.00.png

事前にダウンロードしておいたISOファイルを選択します。
スクリーンショット 2022-01-11 22.41.19.png

再生アイコン(起動ボタン)をクリックすると仮想マシンが起動します。
スクリーンショット 2022-01-11 22.30.09.png

Ubuntuのインストール画面が表示されるので「Install Ubuntu Server」を選択します。
スクリーンショット 2022-01-11 22.30.15.png

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

インストールが完了するまでしばらく待ちます。
スクリーンショット 2022-01-11 22.54.27.png

インストールが完了すると再起動を求められます。
スクリーンショット 2022-01-11 23.53.03.png

CD/DVDでISOファイルを選択した状態だと再起動時にこのようにエラーが出まくります。
スクリーンショット 2022-01-11 23.53.58.png

なので、一旦仮想マシンを停止します。
スクリーンショット 2022-01-11 23.55.55.png

CD/DVDの「Clear」を選択して再度仮想マシンを起動します。
スクリーンショット 2022-01-11 23.57.09.png

Ubuntuが起動します。
スクリーンショット 2022-01-11 23.59.36.png

ホストPCとゲストPC間でクリップボードが共有ができるように spice-vdagent をインストールします。

$ sudo apt -y install spice-vdagent

開発時にGUI環境が必要なので、 ubuntu-desktop をインストールします。

$ sudo apt -y install ubuntu-desktop

ubuntu-desktop のインストールが完了したら再起動します。

$ sudo reboot

再起動後はGUIのログイン画面が表示されます。
スクリーンショット 2022-01-12 1.00.15.png

ログインするとデスクトップ環境が表示されます。
スクリーンショット 2022-01-12 1.04.12.png

ターミナルを起動します。

スクリーンショット 2022-01-12 19.07.07.png

ここからはmikanos-buildのリポジトリのREADMEに従って、環境構築を進めていきます。

mikanos-buildのリポジトリを git clone します。

$ cd $HOME
$ git clone https://github.com/uchan-nos/mikanos-build.git osbook

Ansibleを使って環境のプロビジョニングを行います。

$ sudo apt -y install ansible
$ cd $HOME/osbook/devenv
$ ansible-playbook -K -i ansible_inventory ansible_provision.yml
・
・
・
PLAY RECAP *********************************************************************
localhost                  : ok=8    changed=6    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   

プロビジョニングによって iasl コマンドがインストールされているか確認します。バージョン番号が表示されたら成功しています。

$ iasl -v

Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20190509
Copyright (c) 2000 - 2019 Intel Corporation

プロビジョニングによって edk2 ディレクトリが作成されているか確認します。ディレクトリの情報が表示されたら成功しています。

$ ls -ld $HOME/edk2
drwxrwxr-x 33 akase244 akase244 4096 Jan 12 10:50 /home/akase244/edk2

mikanosのリポジトリを git clone します。

$ cd $HOME
$ git clone https://github.com/uchan-nos/mikanos.git

ブートローダーをビルドします。

$ cd $HOME/edk2
$ ln -s /home/akase244/mikanos/MikanLoaderPkg ./
$ source edksetup.sh
Using EDK2 in-source Basetools
WORKSPACE: /home/akase244/edk2
EDK_TOOLS_PATH: /home/akase244/edk2/BaseTools
CONF_PATH: /home/akase244/edk2/Conf
Copying $EDK_TOOLS_PATH/Conf/build_rule.template
     to /home/akase244/edk2/Conf/build_rule.txt
Copying $EDK_TOOLS_PATH/Conf/tools_def.template
     to /home/akase244/edk2/Conf/tools_def.txt
Copying $EDK_TOOLS_PATH/Conf/target.template
     to /home/akase244/edk2/Conf/target.txt
$ cp Conf/target.txt Conf/target.txt.orig
$ vim Conf/target.txt
$ diff Conf/target.txt Conf/target.txt.orig 
20c20
< ACTIVE_PLATFORM       = MikanLoaderPkg/MikanLoaderPkg.dsc
---
> ACTIVE_PLATFORM       = EmulatorPkg/EmulatorPkg.dsc
44c44
< TARGET_ARCH           = X64
---
> TARGET_ARCH           = IA32
54c54
< TOOL_CHAIN_TAG        = CLANG38
---
> TOOL_CHAIN_TAG        = VS2015x86

$ build
・
・
・
- Done -
Build end time: 11:29:02, Jan.12 2022
Build total time: 00:02:58

以下のファイルが存在していたらビルド成功です。

$ ls -l Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi
-rw-rw-r-- 1 akase244 akase244 12032 Jan 12 11:29 Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi

mikanosをビルドします。

$ source $HOME/osbook/devenv/buildenv.sh
$ cd /home/akase244/mikanos
$ ./build.sh

ビルドの途中でsudoのパスワード入力を求められるので入力します。

[sudo] password for akase244: 

ビルドが完了したらQEMUを起動してみます。

$ ./build.sh run

このような画面が表示されたら起動成功です。
スクリーンショット 2022-01-12 20.41.59.png

起動確認を終えたらQEMUを終了します。

QEMU 4.2.1 monitor - type 'help' for more information
(qemu) quit

参考URL

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1