1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yoctoビルドしたimageをvirt-managerにimportする

Last updated at Posted at 2024-09-23

1. はじめに

1.1. 動機

  • 最近、yoctoビルドについてゼロから学んでいるのですが、yoctoのエミュレータにはqemuが使用されています。
  • qemu自体は、私も過去LinuxKVMを通して使用してきたこともあるため、「もしかしてLinuxKVMを用いて仮想マシンとして動作させられるのでは?」と考えておりました。
    • ただし、検索してもvirt-manager等でyoctoビルドしたイメージを動かす事例に行き着くことができませんでした。
  • 今回、参考資料[1][2]をもとに、core-image-minimalをvirt-managerで仮想マシン化することができたため、その方法についてまとめます。
    • なお、本ページではLinuxKVMやvirt-managerのインストール方法については扱いません。

1.2. 開発環境

  • OS: Ubuntu22.04
  • CPU: Core(TM) i7-12700
  • RAM: 32GB
  • 利用ツール
    • VS Code
    • Docker (devcontainer利用)

1.3. リポジトリ

1.4. 参考資料

No. URL 説明
[1] Running QEMU Images with virtio, virsh and virt-manager, Tim Orling yoctoイメージをvirt-managerで動かしたことを紹介したyoutube動画
[2] MENDER docs Building for demo 適用するmeta-menderについてのmenter社のドキュメント
[3] Yocto Project Quick Build Yoctoビルドのガイド

2. core-image-minimalのビルド

2.1. yocto環境の用意

  • HostOS側にて、my-yocto-devcontainerをgit cloneし、ルートフォルダにてVS Codeを開きます。
git clone https://github.com/tomoten-umino/my-yocto-devcontainer.git
cd my-yocto-devcontainer
code .
  • "Reopen in Container" を選択し、devcontainerを起動させます。
    • VS Codeが開き、コンテナにログインした状態となります。
    • コンテナ内のworkdirにmy-yocto-devcontainerのルートフォルダがマウントされた状態となります。
  • pokyを取得します。本資料では、kirkstoneを利用します。
git clone -b kirkstone git://git.yoctoproject.org/poky
  • oe-init-build-envを読み込んで、環境変数セットとbuildディレクトリを作成します。
source ./poky/oe-init-build-env build
  • この段階で、workdir以下は以下のような構成となります。
workdir
├── build
├── poky
├── README.md
└── UNLICENSE

2.2. core-image-minimalのビルド

  • buildディレクトリにて、core-image-minimalをビルドします。
    • bitbakeでのビルドには時間がかかります。
# buildディレクトリにて
bitbake core-image-minimal
  • ビルドが完了すると、tmp/deploy/images/qemux86-64以下にイメージが作成されます。
    • ただし、この状態ではuefi用のimgファイルがありません。
# core-image-minimalのイメージが作成される 
./tmp/deploy/images/qemux86-64
├── bzImage -> bzImage--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923125041.bin
├── bzImage--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923125041.bin
├── bzImage-qemux86-64.bin -> bzImage--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923125041.bin
├── core-image-minimal-qemux86-64-20240923125041.qemuboot.conf
├── core-image-minimal-qemux86-64-20240923125041.rootfs.ext4
├── core-image-minimal-qemux86-64-20240923125041.rootfs.manifest
├── core-image-minimal-qemux86-64-20240923125041.rootfs.tar.bz2
├── core-image-minimal-qemux86-64-20240923125041.testdata.json
├── core-image-minimal-qemux86-64.ext4 -> core-image-minimal-qemux86-64-20240923125041.rootfs.ext4
├── core-image-minimal-qemux86-64.manifest -> core-image-minimal-qemux86-64-20240923125041.rootfs.manifest
├── core-image-minimal-qemux86-64.qemuboot.conf -> core-image-minimal-qemux86-64-20240923125041.qemuboot.conf
├── core-image-minimal-qemux86-64.tar.bz2 -> core-image-minimal-qemux86-64-20240923125041.rootfs.tar.bz2
├── core-image-minimal-qemux86-64.testdata.json -> core-image-minimal-qemux86-64-20240923125041.testdata.json
├── modules--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923125041.tgz
└── modules-qemux86-64.tgz -> modules--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923125041.tgz

3. meta-mender導入とcore-image-minimalの再ビルド

3.1. meta-menderについて

  • 参考資料[2]のIntroductionによると、meta-mender自体は、deviceのsoftware updateのシステム機能を提供するもののようです。

3.2. meta-memderレイヤーの追加

  • build, pokyと同じディレクトリにて、meta-menderをgit cloneします。
git clone -b kirkstone https://github.com/mendersoftware/meta-mender
  • buildディレクトリにて、meta-mender-coreをaddします。
bitbake-layers add-layer ../meta-mender/meta-mender-core
  • add-layerが成功すると、build/conf/bblayers.confにmeta-mender-coreが追加されます。
# bblayers.conf
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /workdir/poky/meta \
  /workdir/poky/meta-poky \
  /workdir/poky/meta-yocto-bsp \
  /workdir/meta-mender/meta-mender-core \
  "
  • この段階で、workdir以下は以下のような構成となります。
workdir
├── build
├── meta-mender
├── poky
├── README.md
└── UNLICENSE

3.3. local.confの修正

  • build/conf/local.conf の末尾に以下を追加します。
    • 参考資料[2]のうち、特にfilesystem tipesConfiguring strageの設定が重要となります。
    • とくに、MENDER_STORAGE_DEVICE のデフォルト値は /dev/mmcblk0" となっています。LinuxKVMで仮想マシンを稼働させる場合、vdiskは /dev/vda をマウントするため、修正が必須となります。
# local.conf に以下を追加する
# User settings
MENDER_ARTIFACT_NAME = "release-1"
INHERIT += "mender-full"
MACHINE = "qemux86-64"
MENDER_STORAGE_DEVICE = "/dev/vda"

3.4. core-image-minimalの再ビルド

  • buildディレクトリにて、再度core-image-minimalをビルドします。
    • bitbakeでのビルドには時間がかかります。
  • ビルドが完了すると、tmp/deploy/images/qemux86-64以下にイメージが作成されます。
    • uefi用のimgファイルとして、.uefiimgが生成されています。
./tmp/deploy/images/qemux86-64
├── bzImage -> bzImage--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923165336.bin
├── bzImage--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923165336.bin
├── bzImage-qemux86-64.bin -> bzImage--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923165336.bin
├── core-image-minimal.env
├── core-image-minimal-qemux86-64-20240923165336.bootimg
├── core-image-minimal-qemux86-64-20240923165336.bootstrap-artifact
├── core-image-minimal-qemux86-64-20240923165336.dataimg
├── core-image-minimal-qemux86-64-20240923165336.ext4
├── core-image-minimal-qemux86-64-20240923165336.manifest
├── core-image-minimal-qemux86-64-20240923165336.mender
├── core-image-minimal-qemux86-64-20240923165336.qemuboot.conf
├── core-image-minimal-qemux86-64-20240923165336.tar.bz2
├── core-image-minimal-qemux86-64-20240923165336.testdata.json
├── core-image-minimal-qemux86-64-20240923165336.uefiimg
├── core-image-minimal-qemux86-64-20240923165336.uefiimg.bmap
├── core-image-minimal-qemux86-64-20240923165336.uefiimg.bz2
├── core-image-minimal-qemux86-64.bootimg -> core-image-minimal-qemux86-64-20240923165336.bootimg
├── core-image-minimal-qemux86-64.bootstrap-artifact -> core-image-minimal-qemux86-64-20240923165336.bootstrap-artifact
├── core-image-minimal-qemux86-64.dataimg -> core-image-minimal-qemux86-64-20240923165336.dataimg
├── core-image-minimal-qemux86-64.ext4 -> core-image-minimal-qemux86-64-20240923165336.ext4
├── core-image-minimal-qemux86-64.manifest -> core-image-minimal-qemux86-64-20240923165336.manifest
├── core-image-minimal-qemux86-64.mender -> core-image-minimal-qemux86-64-20240923165336.mender
├── core-image-minimal-qemux86-64.qemuboot.conf -> core-image-minimal-qemux86-64-20240923165336.qemuboot.conf
├── core-image-minimal-qemux86-64.tar.bz2 -> core-image-minimal-qemux86-64-20240923165336.tar.bz2
├── core-image-minimal-qemux86-64.testdata.json -> core-image-minimal-qemux86-64-20240923165336.testdata.json
├── core-image-minimal-qemux86-64.uefiimg -> core-image-minimal-qemux86-64-20240923165336.uefiimg
├── core-image-minimal-qemux86-64.uefiimg.bmap -> core-image-minimal-qemux86-64-20240923165336.uefiimg.bmap
├── core-image-minimal-qemux86-64.uefiimg.bz2 -> core-image-minimal-qemux86-64-20240923165336.uefiimg.bz2
├── grub-efi-bootx64.efi
├── linuxx64.efi.stub
├── modules--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923165336.tgz
├── modules-qemux86-64.tgz -> modules--5.15.166+git0+567f0adb9d_a78a104311-r0-qemux86-64-20240923165336.tgz
└── systemd-bootx64.efi

4. virt-managerへのインポート

新しい仮想マシンの作成のダイアログにしたがってインポートしますが、以下の点に気をつけて進めます。

  • オペレーティングシステムのインストール方法は、「既存のディスクイメージをインポート」を選択します。

image.png

  • ストレージパスを指定するときは、上記でビルドしたイメージファイルのうち、core-image-minimal-qemux86-64.uefiimg を指定します。
  • オペレーティングシステムの選択としては、Generic Linux2022を選択します。
    • 適合するものが無いため、Generic Linux2022にしています。

image.png

  • メモリとCPUの設定は、お好みで設定します。

  • インストール準備を始める前に、「インストールの前にカスタマイズする」にチェックを入れて「完了」を押下します。

image.png

  • カスタマイズ画面にて、ファームウェアをOVMF_CODE_4M.fdに変更し、適用します。その後、「インストールの開始」を押下します。

image.png

  • 仮想マシンが起動し、login画面となれば、起動成功です。
    • core-image-minimalのデフォルトのため、rootでログインできます。

image.png

5. おわりに

  • 本ページ作成時点、3.4. core-image-minimalの再ビルドでyoctoビルドエラーが7つ残っています。
    • こちらは、順次確認します。
  • LinuxKVMの仮想マシンとしてインポートできることを確認できました。そのため、virt-managerの編集画面からCPUやメモリ、デバイスの追加等などのカスタマイズ性が向上すると思います。
  • 今回は、meta-menderレイヤーを利用しましたが、uefiimgの作成処理を勉強させていただき、自分でLinuxKVMにインポートできる形式のimgファイルやqcow2ファイルを生成できるようにしたいと思っております。

6. (追加)core-image-satoのビルド

6.1. local.confへの追加、ビルド

  • 3.3. local.confの修正に加えて、以下のMENDER_STORAGE_TOTAL_SIZE_MBを指定します。
    • これは、core-image-satoのビルド結果のimgサイズがデフォルトのサイズを超過してしまうためです。
# local.conf に以下を追加する
# User settings
MENDER_ARTIFACT_NAME = "release-1"
INHERIT += "mender-full"
MACHINE = "qemux86-64"
MENDER_STORAGE_DEVICE = "/dev/vda"
MENDER_STORAGE_TOTAL_SIZE_MB = "2048"
  • buildディレクトリにて、core-image-satoをビルドします。
    • やはりビルドには時間がかかります。
    • ビルド完了後、core-image-sato-qemux86-64.uefiimg が生成されます。

6.2. virt-managerへのインポート

    1. virt-managerへのインポート と同様の進め方でインポートします。
  • 仮想マシンを起動するとGUIが起動し、操作できることが確かめられます。

image.png

  • 試しにTerminalでwgetをしてみたところ、導通していることが確認できました。

image.png

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?