UbuntuでQEMU6.2をビルドして使ってみる


AppArmor周りでハマったのでメモ

必要なパッケージのインストール

sudo apt-get install -y git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
sudo apt-get install -y git-email
sudo apt-get install -y libaio-dev libbluetooth-dev libbrlapi-dev libbz2-dev
sudo apt-get install -y libcap-dev libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install -y libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install -y librbd-dev librdmacm-dev
sudo apt-get install -y libsasl2-dev libsdl1.2-dev libseccomp-dev libsnappy-dev libssh2-1-dev
sudo apt-get install -y libvde-dev libvdeplug-dev libvte-2.90-dev libxen-dev liblzo2-dev
sudo apt-get install -y valgrind xfslibs-dev 
sudo apt-get install -y libnfs-dev libiscsi-dev

リポジトリを落とす

git clone git://git.qemu-project.org/qemu.git
git checkout  v6.2.0
git submodule update --init --recursive

ビルド用のディレクトリ作成

cd qemu
mkdir -p user/Build
cd user/Build

ビルド

../../configure --target-list=x86_64-softmmu # x86_64-softmmuのCPUのみをビルドする
make -j 16

AppAmorへ設定追加

Ubuntuのセキュリティ機能が邪魔をするので、先にバイナリを登録しておきます。

/etc/apparmor.d/usr.sbin.libvirtd
 以下の2行を追加
 /home/user/Workspace/qemu/user/Build/* PUx,
 /home/user/Workspace/qemu/user/Build/pc-bios/** PUxr,
/etc/apparmor.d/abstractions/libvirt-qemu
 以下の1行を追加
 /home/user/Workspace/qemu/rarudo/Build/* rmix,
 sudo systemctl reload apparmor.service

起動したいVishのxmlをいじる

virsh edit vmの名前

<!-- VM起動を妨げるAppArmorを使わない -->
<domain>
 <seclabel type='none' model='apparmor'/>
...

<!-- ビルドしたqemuのパス指定 -->
<emulator>/home/user/Workspace/qemu/user/Build/qemu-system-x86_64</emulator> 

トラブルシューティング

virsh edit時にcannot execute binary

AppArmorの設定に不備がある

virsh start時にPermission Denied

<seclabel type='none' model='apparmor'/>を設定すると実行できる

参考