Code Monkey home page Code Monkey logo

mikanos-docker's Introduction

MikanOS-Docker

build and publish container image

image

ゼロからのOS自作入門 で開発するOS (MikanOS) の 開発環境が設定された Docker イメージ.

github.com/uchan-nos/mikanos-build リポジトリで解説されているツール, ファイルを収録しています.

Docker ではじめる "ゼロからのOS自作入門" | Zenn

  • ⭐ 最終章終了時のMikanOSのビルド, 実行を確認! (github.com/uchan-nos/mikanos)
  • ⭐ Docker for ( Windows (WSL2, Hyper-V) | Mac (Intel, M1) ), Linux に対応! (たぶん)
  • ⭐ X11対応!ホストのX11 Serverに簡単接続!
  • ⭐ VSCode Devcontainer対応! (github.com/sarisia/mikanos-devcontainer)
  • ⭐ M1 Mac ネイティブ対応! arm64 イメージあります!

配布している Docker イメージ

Image Tags Arch
ghcr.io/sarisia/mikanos latest linux/amd64, linux/arm64
ghcr.io/sarisia/mikanos vnc linux/amd64, linux/arm64

使い方

VSCode Devcontainer (推奨)

VSCode Devcontainer を使うことで, コンテナを用いた完全な作業環境を簡単に設定することができます.

詳細は github.com/sarisia/mikanos-devcontainer を参照してください.

コンテナイメージを直接起動

--privileged をつけてください!ビルドスクリプトの mount ができません!

$ docker run --privileged --user vscode -it ghcr.io/sarisia/mikanos /bin/bash
vscode ➜ ~ $ 

適宜コンテナ内で頑張ったり, ホストのディレクトリをマウントしたりしてお使いください.

VNC イメージについて

ghcr.io/sarisia/mikanos:vnc イメージを提供しています. VNC イメージを利用することで, ホスト環境に X11 Server を用意することなく, MikanOS の動作確認をすることが可能です. また, GitHub Codespaces を利用することで, ブラウザのみでコーディング&動作確認を 完結することができます.

使い方

VSCode Devcontainer を推奨しています. 詳細は mikanos-devcontainer の ドキュメントを参照して下さい.

それ以外の場合は, 通常のイメージと同様の使い方が可能です. コンテナ起動時に自動で noVNC が 起動し, コンテナ実行中は常に常駐します. QEMU を実行する際に, オプションとして -vnc :0 を指定することで, ブラウザから http://localhost:6080 を開いて動作確認ができます.

カスタマイズ

noVNC のポートなどを変更する際は, 以下の環境変数を設定して下さい.

Environment Variable Default Note
NOVNC_PORT 6080 noVNC Webクライアントと WebSocket API のポート番号
VNC_PORT 5900 QEMU が待ち受ける VNC ポート番号. デフォルトでは 5900 + <ディスプレイ番号> となります. 例えば, QEMU を -vnc :1 オプションで起動した場合, VNC_PORT5901 です.
(参考) QEMU_OPTS QEMU を実行する際の追加オプション. ~/osbook/devenv/run_image.sh 内で展開されます. -vnc :0 などと設定しておくと便利です.

FAQ

M1 Mac での動作は?

可能です. linux/arm64 アーキテクチャに対応したイメージを用意しています.

ただし, X64 向けにブートローダをビルドするため, クロスコンパイル関連の設定が必要です. ゼロからのOS自作入門 2.2節で生成される /$HOME/edk2/Conf/tools_def.txt に対し, 当リポジトリの tools_def.txt.diff を参考に, 設定を変更して下さい.

その他の手順は, 書籍に従います.

エミュレータを用いた互換動作

書籍と違う設定を行うことに抵抗がある, もしくは前述の方法が上手く行かない場合は, 明示的に linux/amd64 イメージを互換レイヤを通して利用することが可能です.

ただし, 互換レイヤを通すことでパフォーマンスは大きく劣化し, コンパイル時や QEMU を用いたテスト動作時の速度は遅くなります.

互換レイヤを用いるには, ghcr.io/sarisia/mikanos:amd64 イメージを取得した後, コンテナ実行時に --platform linux/amd64 を指定して実行してください:

$ docker run --platform linux/amd64 --privileged -it --user vscode ghcr.io/sarisia/mikanos:amd64 /bin/bash

WSLg での動作は?

正常な動作を確認しました. ドキュメント に従い WSLg を設定した後, X11 のソケットをコンテナ内にバインドして下さい:

$ docker run --privileged -it --user vscode --mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix ghcr.io/sarisia/mikanos /bin/bash

トラブルシューティング

Wiki をご確認ください.

ライセンス

当 Dockerfile のライセンスは MIT です.

ただし, 当 Dockerfile からビルドされるコンテナイメージ, 及び配布された ビルド済みイメージに含まれる著作物のライセンスは, それぞれの固有のライセンスに 従います.

バグ, 要望

Twitter (@A1ces)Issues で教えてくださると嬉しいです!

mikanos-docker's People

Contributors

dependabot[bot] avatar sarisia avatar three-0-3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

mikanos-docker's Issues

edk2 build fails

edk2 build fails.

Here is the error log

------
 > [5/7] RUN git clone --recursive https://github.com/tianocore/edk2.git edk2  && (cd edk2 && git checkout 38c8be123aced4cc8ad5c7e0da9121a181b94251)  && make -C edk2/BaseTools/Source/C:
#8 114.2 /usr/bin/ld: /home/vscode/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:53: undefined reference to `kBrotliLog2Table'
#8 114.2 /usr/bin/ld: /home/vscode/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:53: undefined reference to `kBrotliLog2Table'
#8 114.2 /usr/bin/ld: brotli/c/enc/metablock.o:/home/vscode/edk2/BaseTools/Source/C/BrotliCompress/brotli/c/enc/fast_log.h:53: more undefined references to `kBrotliLog2Table' follow
#8 114.2 /usr/bin/ld: ../bin/BrotliCompress: hidden symbol `kBrotliCopyExtra' isn't defined
#8 114.2 /usr/bin/ld: final link failed: bad value
#8 114.2 collect2: error: ld returned 1 exit status
#8 114.2 make[1]: *** [../Makefiles/app.makefile:18: ../bin/BrotliCompress] Error 1
#8 114.2 make[1]: Leaving directory '/home/vscode/edk2/BaseTools/Source/C/BrotliCompress'
#8 114.2 make: Leaving directory '/home/vscode/edk2/BaseTools/Source/C'
#8 114.2 make: *** [GNUmakefile:76: BrotliCompress] Error 2
------
error: failed to solve: executor failed running [/bin/sh -c git clone --recursive https://github.com/tianocore/edk2.git edk2  && (cd edk2 && git checkout 38c8be123aced4cc8ad5c7e0da9121a181b94251)  && make -C edk2/BaseTools/Source/C]: exit code: 2
Error: Process completed with exit code 1.

build fails for new EDK2

EDK2 build fails with the error below

/home/vscode/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc(...): error 4000: Instance of library class [RegisterFilterLib] is not found
        in [/home/vscode/edk2/MdePkg/Library/BaseLib/BaseLib.inf] [X64]
        consumed by module [/home/vscode/edk2/MikanLoaderPkg/Loader.inf]

Seems happening by EDK2 update in Apr 2021
Version fix will resolve this issue

Same issue has been raised and resolved for mikanos-build
ブートローダーのビルド
fix #6 use older version to avoid error

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.