Skip to content

Instantly share code, notes, and snippets.

@ChronoMonochrome
Forked from eagleusb/qemu.md
Last active May 26, 2024 17:28
Show Gist options
  • Save ChronoMonochrome/d10aa7da6dbf1abf72c76f2df205da7a to your computer and use it in GitHub Desktop.
Save ChronoMonochrome/d10aa7da6dbf1abf72c76f2df205da7a to your computer and use it in GitHub Desktop.
QEMU build for virt-manager with Spice graphics support

QEMU

  • Debian like systems

KVM installation

$ sudo aptitude install qemu-kvm libvirt-daemon bridge-utils virt-manager
$ sudo aptitude install dnsmasq-base
$ sudo aptitude remove dnsmasq
$ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd
$ sudo usermod -aG libvirt $(whoami)
$ sudo usermod -aG kvm $(whoami)

QEMU Build Dependencies

$ git clone https://git.qemu.org/git/qemu.git --depth 1 && cd qemu
$ git submodule init
$ git submodule update --recursive
$ sudo aptitude install build-essential git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
$ sudo aptitude build-dep qemu-kvm
$ sudo aptitude install libaio-dev libbluetooth-dev libbrlapi-dev libbz2-dev
$ sudo aptitude install libsasl2-dev libsdl2-dev libsdl1.2-dev libseccomp-dev libsnappy-dev libssh2-1-dev libnuma-dev

Spice graphics dependencies

$ sudo aptitude install gir-glib-2.0 libsdl2-dev libgtk-3-dev libfdt-dev libfuse3-dev libbpf-dev librbd-dev
$ sudo aptitude install libharfbuzz-bin spice-client-gtk libspice-client-gtk-3.0-dev \
  libspice-client-glib-2.0-dev libxcomposite-dev libpango1.0-dev pango1.0-tools \
  libthai-dev libharfbuzz-dev libharfbuzz-cairo0 libgraphite2-dev libgdk-pixbuf-2.0-dev
$ sudo aptitude install libspice-client-glib-2.0-8 \
  libspice-client-glib-2.0-dev \
  libspice-client-gtk-3.0-5 \
  libspice-client-gtk-3.0-dev \
  libspice-protocol-dev \
  libspice-server1 \
  libspice-server-dev \
  spice-client-glib-usb-acl-helper \
  spice-client-gtk \
  gir1.2-ayatanaappindicator3-0.1 \
  gir1.2-freedesktop-dev \
  gir1.2-girepository-2.0 \
  gir1.2-glib-2.0-dev \
  gir1.2-gtk-vnc-2.0 \
  gir1.2-libosinfo-1.0 \
  gir1.2-libvirt-glib-1.0 \
  gir1.2-spiceclientglib-2.0 \
  gir1.2-spiceclientgtk-3.0 \
  gobject-introspection-bin
Other packages that might have been not necessary but were installed in my case anyway
bridge-utils \
cpp-13 \
cpp-x86-64-linux-gnu \
cpu-checker \
dmeventd \
dnsmasq-base \
dns-root-data \
fonts-liberation-sans-narrow \
foomatic-filters \
g++-13 \
g++-13-x86-64-linux-gnu \
gcc-x86-64-linux-gnu \
gfortran-13 \
gfortran-13-x86-64-linux-gnu \
gfortran-x86-64-linux-gnu \
g++-x86-64-linux-gnu \
ipxe-qemu \
ipxe-qemu-256k-compat-efi-roms \
libabsl20220623t64 \
libacl1-dev \
libaio1t64 \
libaio-dev \
libamd-comgr2 \
libamdhip64-5 \
libarchive13t64 \
libatk1.0-0t64 \
libatk1.0-dev \
libatk-bridge2.0-0t64 \
libatk-bridge2.0-dev \
libatspi2.0-0t64 \
libatspi2.0-dev \
libbluetooth-dev \
libboost-chrono1.74.0t64 \
libboost-locale1.83.0 \
libboost-program-options1.83.0 \
libbpf-dev \
libbrlapi-dev \
libcacard0 \
libcairo2-dev \
libclang1-17t64 \
libclang-cpp17t64 \
libclucene-contribs1t64 \
libclucene-core1t64 \
libcups2t64 \
libcupsimage2t64 \
libcurl4t64 \
libdatrie-dev \
libdb5.3t64 \
libdevmapper-event1.02.1 \
libdmapsharing-4.0-3t64 \
libduktape207 \
libevent-core-2.1-7t64 \
libevent-pthreads-2.1-7t64 \
libext2fs2t64 \
libext2fs-dev \
libfdt1 \
libfdt-dev \
libfuse3-dev \
libgail-3-0t64 \
libgdbm6t64 \
libgdk-pixbuf-2.0-dev \
libgfortran-13-dev \
libgom-1.0-0t64 \
libgpgme11t64 \
libgpgmepp6t64 \
libgpod4t64 \
libgraphite2-dev \
libgtk-3-0t64 \
libgtk-3-dev \
libgtk-vnc-2.0-0 \
libgvnc-1.0-0 \
libharfbuzz-bin \
libharfbuzz-cairo0 \
libharfbuzz-dev \
libhsakmt1 \
libhsa-runtime64-1 \
liblirc-client0t64 \
libllvm17t64 \
liblua5.4-0 \
liblvm2cmd2.03 \
liblz4-dev \
libminizip1t64 \
libmozjs-115-0t64 \
libmtp9t64 \
libopenmpi3t64 \
liborcus-0.18-0 \
liborcus-parser-0.18-0 \
libosinfo-1.0-0 \
libosinfo-l10n \
libpango1.0-dev \
libparted2t64 \
libparted-fs-resize0t64 \
libpcap0.8t64 \
libphodav-3.0-0 \
libphodav-3.0-common \
libpixman-1-dev \
libplist-2.0-4 \
libpmemobj1 \
libpmix2t64 \
libpng16-16t64 \
libpoppler-glib8t64 \
libpoppler-qt5-1t64 \
libpython3.12-dev \
libpython3.12t64 \
libqgpgme15t64 \
librados2 \
librados-dev \
librasqal3t64 \
librbd1 \
librbd-dev \
librdf0t64 \
librdmacm1t64 \
libreadline8t64 \
libreoffice-uiconfig-base \
libreoffice-uiconfig-calc \
libreoffice-uiconfig-common \
libreoffice-uiconfig-draw \
libreoffice-uiconfig-impress \
libreoffice-uiconfig-math \
libreoffice-uiconfig-writer \
librsync2t64 \
libseccomp-dev \
libsgutils2-1.46-2 \
libslirp0 \
libsmbclient0 \
libsnmp40t64 \
libsource-highlight4t64 \
libssh2-1-dev \
libssh2-1t64 \
libssl3t64 \
libtevent0t64 \
libthai-dev \
libtirpc3t64 \
libtpms0 \
libuno-cppu3t64 \
libuno-cppuhelpergcc3-3t64 \
libuno-purpenvhelpergcc3-3t64 \
libuno-sal3t64 \
libuno-salhelpergcc3-3t64 \
libusbredirhost1 \
libusbredirparser1t64 \
libvirglrenderer1 \
libvirglrenderer-dev \
libvirt0 \
libvirt-clients \
libvirt-daemon \
libvirt-daemon-config-network \
libvirt-daemon-config-nwfilter \
libvirt-daemon-driver-qemu \
libvirt-daemon-system \
libvirt-daemon-system-sysv \
libvirt-glib-1.0-0 \
libvirt-glib-1.0-data \
libvirt-l10n \
libxcomposite-dev \
libxmlsec1t64 \
libxmlsec1t64-nss \
lvm2 \
mdevctl \
msr-tools \
osinfo-db \
ovmf \
pango1.0-tools \
python3.12 \
python3.12-dev \
python3.12-minimal \
python3-libvirt \
qemu-system-common \
qemu-system-data \
qemu-system-modules-opengl \
qemu-system-x86 \
qemu-utils \
seabios 
swtpm \
swtpm-tools \
thin-provisioning-tools \
virtinst \
virt-manager \
virt-viewer

Configure

$ mkdir build && cd build
$ ../configure --audio-drv-list=alsa,sdl,pa \
  --enable-opengl \
  --enable-virglrenderer \
  --enable-spice \
  --enable-vnc \
  --enable-kvm \
  --enable-avx2 \
  --enable-vhost-net \
  --enable-vhost-kernel \
  --enable-malloc-trim \
  --enable-tpm \
  --enable-numa \
  --enable-sdl \
  --disable-docs \
  --disable-curses \
  --disable-debug-info \
  --disable-auth-pam \
  --disable-gtk \
  --disable-vte \
  --disable-xen \
  --disable-parallels \
  --disable-dmg \
  --disable-rbd \
  --disable-libiscsi \
  --disable-usb-redir
$ make -j$(nproc)
$ sudo make install

Workaround for the permission issues in the Virt-Manager

$ sudo cp /usr/bin/qemu-system-x86_64 /usr/bin/qemu-system-x86_64-orig
$ sudo cp /usr/local/bin/qemu-system-x86_64 /usr/bin/qemu-system-x86_64
$ sudo cp -r /usr/local/share/qemu/* /usr/share/qemu/
$ sudo systemctl restart libvirtd
$ type qemu-system-x86_64
qemu-system-x86_64 is hashed (/usr/local/bin/qemu-system-x86_64)
$ qemu-system-x86_64 --version
QEMU emulator version 9.0.50
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers

libharfbuzz and libpango-1.0 build - optional

$ apt source libharfbuzz0b
$ cd harfbuzz-8.3.0
$ ./configure
$ make -j$(nproc)
$ sudo cp ./src/.libs/*.so* /usr/lib/x86_64-linux-gnu/
$ cd ..
$ apt source libpango-1.0-0
$ cd pango1.0-1.52.1+ds
$ rm -rf release_build && bash make-release.sh
$ sudo cp -r release_build/pango/*.so* /usr/lib/x86_64-linux-gnu/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment