MikanOSのビルドを自動化してみた
by だいみょーじん
目次
2
自己紹介
3
告知!
4
昨日のOSC大阪の様子
今日のテーマ
5
MikanOSのビルド手順を復習
この一連の手順を自動化する
6
ブートローダのビルドをシェルスクリプト化(build_boot_loader.sh)
7
#!/bin/bash
source edksetup.sh
cd Conf
sed -i "s/^ACTIVE_PLATFORM[\t ]*=[\t ]*.*$/ACTIVE_PLATFORM = MikanLoaderPkg\/MikanLoaderPkg.dsc/" target.txt
sed -i "s/^TARGET[\t ]*=[\t ]*.*$/TARGET = DEBUG/" target.txt
sed -i "s/^TARGET_ARCH[\t ]*=[\t ]*.*$/TARGET_ARCH = X64/" target.txt
sed -i "s/^TOOL_CHAIN_TAG[\t ]*=[\t ]*.*$/TOOL_CHAIN_TAG = CLANG38/" target.txt
build
MikanOS本体のビルドをシェルスクリプト化(build_mikanos.sh)
8
#!/bin/bash
source ../osbook/devenv/buildenv.sh
./build.sh
ビルドのための環境構築部分も自動化したい
9
Dockerを使おう!
10
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update
RUN apt upgrade -y
RUN apt install -y ansible
RUN apt install -y dosfstools
RUN apt install -y git
Dockerを使おう!
11
WORKDIR /root
RUN git clone https://github.com/uchan-nos/mikanos-build.git osbook
WORKDIR /root/osbook
RUN git checkout 8d4882122ec548ef680b6b5a2ae841a0fd4d07a1
COPY osbook.patch /root/osbook.patch
RUN git apply ../osbook.patch
WORKDIR /root/osbook/devenv
RUN ansible-playbook -i ansible_inventory ansible_provision.yml
WORKDIR /root
RUN git clone https://github.com/uchan-nos/mikanos.git
WORKDIR /root/mikanos
RUN git checkout b5f7740c04002e67a95af16a5c6e073b664bf3f5
WORKDIR /root/edk2
RUN ln -s /root/mikanos/MikanLoaderPkg .
COPY build_boot_loader.sh /root/edk2/build_boot_loader.sh
COPY build_mikanos.sh /root/mikanos/build_mikanos.sh
WORKDIR /root
Dockerを使おう!
12
Dockerを使おう!
13
#!/bin/bash
image=$1
container=$2
vnc_port=$3
target=$4
# Build a docker image.
if [ -z "$(docker images --format {{.Repository}} | grep -x $image)" ]; then
docker build --build-arg vnc_port=$vnc_port --no-cache -t $image .
fi
# Create a docker conatiner.
if [ -z "$(docker ps -a --format {{.N ames}} | grep -x $container)" ]; then
docker create -i -t -p $vnc_port:$vnc_port --privileged --name $container $image /bin/bash
docker start $container
docker exec --workdir /root/edk2 $container ./build_boot_loader.sh
docker exec --workdir /root/mikanos $container ./build_mikanos.sh
docker stop $container
fi
# Download MikanOS image file.
docker cp $container:/root/mikanos/$4 $4
QEMUでMikanOSを実行
14
QEMUでMikanOSを実行
15
QEMUでMikanOSを実行
16
.PHONY: run
run:
docker start $(CONTAINER)
docker exec --workdir /root/mikanos $(CONTAINER) ./build.sh run
makeでビルドできるようにする
17
$(MOUNT): $(TARGET)
mkdir $@
sudo mount -o loop $^ $@
$(TARGET):
./build.sh $(IMAGE) $(CONTAINER) $(VNC_PORT) $(TARGET)
GitHub Actionsによるビルド
18
name: build
on:
push:
branches:
- main
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@main
- name: Build MikanOS
run: make
- name: Upload MikanOS
uses: actions/upload-artifact@main
with:
name: MikanOS
path: disk
まとめ
19
ご清聴ありがとうございました!