この記事は何?
自分用のメモとして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ページにアクセスします。
Server版のISOファイル「ubuntu-20.04.3-live-server-amd64.iso」をダウンロードします。
UTMで Ubuntu 20.04 をインストール
QEMUのコマンドをゴニョゴニョしたくなかったので今回はUTMを利用することにしました。
UTMの「+」ボタンをクリックして「Start from Scratch」をクリックします。
InformationタブのName欄に「Ubuntu 20.04 amd64」と入力し、Styleから「Operating System」を選択します。
Architectureで「x86_64」が選択されていれば特に変更は不要です。
Memoryについては環境によって設定可能な値が変わってくると思いますが、今回は8192MB(8GB)で設定してみます。
「New Device」ボタンをクリックし、Interfaceで「VirtIO」が選択された状態でSizeに任意の値を入力します。今回は30GBで設定してみます。
もう一度「New Device」ボタンをクリックします。「Removable」にチェックし、Interfaceから「USB」を選択します。
「Emulated Display Card」の選択肢からホストPCの対応状況に応じて選択します。今回は「virtio-vga」を選択します。
「Save」ボタンをクリックすると、仮想マシンの枠ができあがります。
「CD/DVD」の欄をクリックすると「Browse」と表示されるのでこれをクリックします。
再生アイコン(起動ボタン)をクリックすると仮想マシンが起動します。
Ubuntuのインストール画面が表示されるので「Install Ubuntu Server」を選択します。
Ubuntuの詳細なインストール手順については割愛します。
CD/DVDでISOファイルを選択した状態だと再起動時にこのようにエラーが出まくります。
CD/DVDの「Clear」を選択して再度仮想マシンを起動します。
ホストPCとゲストPC間でクリップボードが共有ができるように spice-vdagent をインストールします。
$ sudo apt -y install spice-vdagent
開発時にGUI環境が必要なので、 ubuntu-desktop をインストールします。
$ sudo apt -y install ubuntu-desktop
ubuntu-desktop のインストールが完了したら再起動します。
$ sudo reboot
ターミナルを起動します。
ここからは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
起動確認を終えたらQEMUを終了します。
QEMU 4.2.1 monitor - type 'help' for more information
(qemu) quit
参考URL
- UTMを使ってM1 MacにUbuntu20.04をインストールして、その中でDockerを動かして、その中でUbuntu20.10を動かしてみる
- Windows で MikanOS (その1:VMware)
- linux ド素人だけど OS 自作 みかん 本にチャレンジしてみた
- linux ド素人だけど OS 自作 みかん 本の環境とか色々 かじってみた
- macで自作OS with EDK2
- 【ゼロからのOS自作入門】WSLでHelloWorldするまで
- Mac で始める「ゼロからのOS自作入門」
- WSL2のapt installエラー発生時にやったこと
- ゼロからのOS自作入門をMacで勉強する方法 (Docker使用)
- 【ゼロからのOS自作入門】フォロー1日目
- Vagrantを利用してMikanOSをビルドする
- QEMU/KVM ホスト・ゲスト間の文字コピペ設定