diff options
-rw-r--r-- | .SRCINFO | 127 | ||||
-rw-r--r-- | 65-kvm.rules | 1 | ||||
-rw-r--r-- | GUI_REFRESH_INTERVAL_DEFAULT.patch | 12 | ||||
-rw-r--r-- | PKGBUILD | 230 | ||||
-rw-r--r-- | qemu-ga.service | 9 | ||||
-rw-r--r-- | qemu.install | 8 |
6 files changed, 387 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..cc4dfd82d2fa --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,127 @@ +pkgbase = qemu-60fps + pkgdesc = A generic and open source machine emulator and virtualizer + pkgver = 4.2.0 + pkgrel = 2 + url = https://wiki.qemu.org/ + arch = x86_64 + license = GPL2 + license = LGPL2.1 + makedepends = spice-protocol + makedepends = python + makedepends = ceph + makedepends = libiscsi + makedepends = glusterfs + makedepends = python-sphinx + depends = virglrenderer + depends = sdl2 + depends = vte3 + depends = libpulse + depends = brltty + depends = seabios + depends = gnutls + depends = libpng + depends = libaio + depends = numactl + depends = jemalloc + depends = xfsprogs + depends = libnfs + depends = lzo + depends = snappy + depends = curl + depends = vde2 + depends = libcap-ng + depends = spice + depends = libcacard + depends = usbredir + depends = libslirp + depends = libssh + provides = qemu + provides = qemu-headless + provides = qemu-arch-extra + provides = qemu-headless-arch-extra + provides = qemu-block-iscsi + provides = qemu-block-rbd + provides = qemu-block-gluster + provides = qemu-guest-agent + source = https://download.qemu.org/qemu-4.2.0.tar.xz + source = https://download.qemu.org/qemu-4.2.0.tar.xz.sig + source = qemu-ga.service + source = 65-kvm.rules + source = GUI_REFRESH_INTERVAL_DEFAULT.patch + validpgpkeys = CEACC9E15534EBABB82D3FA03353C9CEF108B584 + sha512sums = 2a79973c2b07c53e8c57a808ea8add7b6b2cbca96488ed5d4b669ead8c9318907dec2b6109f180fc8ca8f04c0f73a56e82b3a527b5626b799d7e849f2474ec56 + sha512sums = SKIP + sha512sums = 269c0f0bacbd06a3d817fde02dce26c99d9f55c9e3b74bb710bd7e5cdde7a66b904d2eb794c8a605bf9305e4e3dee261a6e7d4ec9d9134144754914039f176e4 + sha512sums = bdf05f99407491e27a03aaf845b7cc8acfa2e0e59968236f10ffc905e5e3d5e8569df496fd71c887da2b5b8d1902494520c7da2d3a8258f7fd93a881dd610c99 + sha512sums = ac88a7307c081c88a4c20a563fc566e8c3474f33bac428a8c2d4415573d11a1da7f6ca08c1ae60b5298085635ef460a05efd8a3fb42f59f81703cb346992b48f + +pkgname = qemu-60fps + optdepends = qemu-arch-extra-60fps: extra architectures support + provides = qemu + provides = qemu-headless + conflicts = qemu + conflicts = qemu-headless + replaces = qemu-kvm + +pkgname = qemu-headless-60fps + pkgdesc = QEMU without GUI + depends = seabios + depends = gnutls + depends = libpng + depends = libaio + depends = numactl + depends = jemalloc + depends = xfsprogs + depends = libnfs + depends = lzo + depends = snappy + depends = curl + depends = vde2 + depends = libcap-ng + depends = spice + depends = libcacard + depends = usbredir + depends = libslirp + depends = libssh + optdepends = qemu-headless-arch-extra: extra architectures support + provides = qemu-headless + +pkgname = qemu-arch-extra-60fps + pkgdesc = QEMU for foreign architectures + depends = qemu + provides = qemu-headless-arch-extra + conflicts = qemu-headless-arch-extra + options = !strip + +pkgname = qemu-headless-arch-extra-60fps + pkgdesc = QEMU without GUI, for foreign architectures + depends = qemu-headless + provides = qemu-headless-arch-extra + options = !strip + +pkgname = qemu-block-iscsi-60fps + pkgdesc = QEMU iSCSI block module + depends = glib2 + depends = libiscsi + depends = jemalloc + provides = qemu-block-iscsi + +pkgname = qemu-block-rbd-60fps + pkgdesc = QEMU RBD block module + depends = glib2 + depends = ceph + provides = qemu-block-rbd + +pkgname = qemu-block-gluster-60fps + pkgdesc = QEMU GlusterFS block module + depends = glib2 + depends = glusterfs + provides = qemu-block-gluster + +pkgname = qemu-guest-agent-60fps + pkgdesc = QEMU Guest Agent + depends = gcc-libs + depends = glib2 + depends = libudev.so + provides = qemu-guest-agent + diff --git a/65-kvm.rules b/65-kvm.rules new file mode 100644 index 000000000000..fbb0ebb69c9e --- /dev/null +++ b/65-kvm.rules @@ -0,0 +1 @@ +KERNEL=="vhost-net", GROUP="kvm", MODE="0660", TAG+="uaccess", OPTIONS+="static_node=vhost-net" diff --git a/GUI_REFRESH_INTERVAL_DEFAULT.patch b/GUI_REFRESH_INTERVAL_DEFAULT.patch new file mode 100644 index 000000000000..ff65df55cf0b --- /dev/null +++ b/GUI_REFRESH_INTERVAL_DEFAULT.patch @@ -0,0 +1,12 @@ +diff --unified --recursive --text qemu-4.2.0/include/ui/console.h qemu-4.2.0.new/include/ui/console.h +--- qemu-4.2.0/include/ui/console.h 2019-12-12 13:20:48.000000000 -0500 ++++ qemu-4.2.0.new/include/ui/console.h 2020-04-07 14:50:19.995242274 -0400 +@@ -26,7 +26,7 @@ + #define QEMU_CAPS_LOCK_LED (1 << 2) + + /* in ms */ +-#define GUI_REFRESH_INTERVAL_DEFAULT 30 ++#define GUI_REFRESH_INTERVAL_DEFAULT 16 + #define GUI_REFRESH_INTERVAL_IDLE 3000 + + /* Color number is match to standard vga palette */ diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..6a8b1d44417e --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,230 @@ +# Maintainer: Adam Gradzki <hi@adamgradzki.com> +# Contributor: Tobias Powalowski <tpowa@archlinux.org> +# Contributor: Sébastien "Seblu" Luttringer <seblu@seblu.net> + +pkgbase=qemu-60fps +pkgname=(qemu-60fps qemu-headless-60fps qemu-arch-extra-60fps qemu-headless-arch-extra-60fps + qemu-block-{iscsi,rbd,gluster}-60fps qemu-guest-agent-60fps) +provides=(qemu qemu-headless qemu-arch-extra qemu-headless-arch-extra + qemu-block-{iscsi,rbd,gluster} qemu-guest-agent) +pkgdesc="A generic and open source machine emulator and virtualizer" +pkgver=4.2.0 +pkgrel=2 +arch=(x86_64) +license=(GPL2 LGPL2.1) +url="https://wiki.qemu.org/" +_headlessdeps=(seabios gnutls libpng libaio numactl jemalloc xfsprogs libnfs + lzo snappy curl vde2 libcap-ng spice libcacard usbredir libslirp + libssh) +depends=(virglrenderer sdl2 vte3 libpulse brltty "${_headlessdeps[@]}") +makedepends=(spice-protocol python ceph libiscsi glusterfs python-sphinx) +source=(https://download.qemu.org/qemu-$pkgver.tar.xz{,.sig} + qemu-ga.service + 65-kvm.rules + GUI_REFRESH_INTERVAL_DEFAULT.patch) +sha512sums=('2a79973c2b07c53e8c57a808ea8add7b6b2cbca96488ed5d4b669ead8c9318907dec2b6109f180fc8ca8f04c0f73a56e82b3a527b5626b799d7e849f2474ec56' + 'SKIP' + '269c0f0bacbd06a3d817fde02dce26c99d9f55c9e3b74bb710bd7e5cdde7a66b904d2eb794c8a605bf9305e4e3dee261a6e7d4ec9d9134144754914039f176e4' + 'bdf05f99407491e27a03aaf845b7cc8acfa2e0e59968236f10ffc905e5e3d5e8569df496fd71c887da2b5b8d1902494520c7da2d3a8258f7fd93a881dd610c99' + 'ac88a7307c081c88a4c20a563fc566e8c3474f33bac428a8c2d4415573d11a1da7f6ca08c1ae60b5298085635ef460a05efd8a3fb42f59f81703cb346992b48f') +validpgpkeys=('CEACC9E15534EBABB82D3FA03353C9CEF108B584') + +case $CARCH in + i?86) _corearch=i386 ;; + x86_64) _corearch=x86_64 ;; +esac + +prepare() { + mkdir build-{full,headless} + mkdir -p extra-arch-{full,headless}/usr/{bin,share/qemu} + + cd qemu-${pkgver} + patch --forward --strip=1 --input="${srcdir}/GUI_REFRESH_INTERVAL_DEFAULT.patch" +} + +build() { + _build full \ + --audio-drv-list="pa alsa sdl" + + _build headless \ + --audio-drv-list= \ + --disable-bluez \ + --disable-sdl \ + --disable-gtk \ + --disable-vte \ + --disable-brlapi \ + --disable-opengl \ + --disable-virglrenderer +} + +_build() ( + cd build-$1 + + # qemu vs. make 4 == bad + export ARFLAGS=rv + + # http://permalink.gmane.org/gmane.comp.emulators.qemu/238740 + export CFLAGS+=" -fPIC" + + ../qemu-${pkgver}/configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib/qemu \ + --smbd=/usr/bin/smbd \ + --enable-modules \ + --enable-sdl \ + --enable-jemalloc \ + --enable-slirp=system \ + "${@:2}" + + make +) + +package_qemu-60fps() { + optdepends=('qemu-arch-extra-60fps: extra architectures support') + provides=(qemu qemu-headless) + conflicts=(qemu qemu-headless) + replaces=(qemu-kvm) + + _package full +} + +package_qemu-headless-60fps() { + pkgdesc="QEMU without GUI" + depends=("${_headlessdeps[@]}") + optdepends=('qemu-headless-arch-extra: extra architectures support') + provides=(qemu-headless) + + _package headless +} + +_package() { + optdepends+=('samba: SMB/CIFS server support' + 'qemu-block-iscsi: iSCSI block support' + 'qemu-block-rbd: RBD block support' + 'qemu-block-gluster: glusterfs block support') + install=qemu.install + options=(!strip) + + make -C build-$1 DESTDIR="$pkgdir" install "${@:2}" + + # systemd stuff + install -Dm644 65-kvm.rules "$pkgdir/usr/lib/udev/rules.d/65-kvm.rules" + + # remove conflicting /var/run directory + cd "$pkgdir" + rm -r var + + cd usr/lib + tidy_strip + + # bridge_helper needs suid + # https://bugs.archlinux.org/task/32565 + chmod u+s qemu/qemu-bridge-helper + + # remove split block modules + rm qemu/block-{iscsi,rbd,gluster}.so + + cd ../bin + tidy_strip + + # remove extra arch + for _bin in qemu-*; do + [[ -f $_bin ]] || continue + + case ${_bin#qemu-} in + # guest agent + ga) rm "$_bin"; continue ;; + + # tools + img|io|nbd) continue ;; + + # core emu + system-${_corearch}) continue ;; + esac + + mv "$_bin" "$srcdir/extra-arch-$1/usr/bin" + done + + cd ../share/qemu + for _blob in *; do + [[ -f $_blob ]] || continue + + case $_blob in + # provided by seabios package + bios.bin|acpi-dsdt.aml|bios-256k.bin|vgabios-cirrus.bin|vgabios-qxl.bin|\ + vgabios-stdvga.bin|vgabios-vmware.bin|vgabios-virtio.bin|vgabios-bochs-display.bin|\ + vgabios-ramfb.bin) rm "$_blob"; continue ;; + + # iPXE ROMs + efi-*|pxe-*) continue ;; + + # core blobs + kvmvapic.bin|linuxboot*|multiboot.bin|sgabios.bin|vgabios*) continue ;; + + # Trace events definitions + trace-events*) continue ;; + + # Logos + *.bmp|*.svg) continue ;; + esac + + mv "$_blob" "$srcdir/extra-arch-$1/usr/share/qemu" + done +} + +package_qemu-arch-extra-60fps() { + pkgdesc="QEMU for foreign architectures" + depends=(qemu) + provides=(qemu-headless-arch-extra) + conflicts=(qemu-headless-arch-extra) + options=(!strip) + + mv extra-arch-full/usr "$pkgdir" +} + +package_qemu-headless-arch-extra-60fps() { + pkgdesc="QEMU without GUI, for foreign architectures" + depends=(qemu-headless) + provides=(qemu-headless-arch-extra) + options=(!strip) + + mv extra-arch-headless/usr "$pkgdir" +} + +package_qemu-block-iscsi-60fps() { + pkgdesc="QEMU iSCSI block module" + depends=(glib2 libiscsi jemalloc) + provides=(qemu-block-iscsi) + + install -D build-full/block-iscsi.so "$pkgdir/usr/lib/qemu/block-iscsi.so" +} + +package_qemu-block-rbd-60fps() { + pkgdesc="QEMU RBD block module" + depends=(glib2 ceph) + provides=(qemu-block-rbd) + + install -D build-full/block-rbd.so "$pkgdir/usr/lib/qemu/block-rbd.so" +} + +package_qemu-block-gluster-60fps() { + pkgdesc="QEMU GlusterFS block module" + depends=(glib2 glusterfs) + provides=(qemu-block-gluster) + + install -D build-full/block-gluster.so "$pkgdir/usr/lib/qemu/block-gluster.so" +} + +package_qemu-guest-agent-60fps() { + pkgdesc="QEMU Guest Agent" + depends=(gcc-libs glib2 libudev.so) + provides=(qemu-guest-agent) + + install -D build-full/qemu-ga "$pkgdir/usr/bin/qemu-ga" + install -Dm644 qemu-ga.service "$pkgdir/usr/lib/systemd/system/qemu-ga.service" + install -Dm755 "$srcdir/qemu-$pkgver/scripts/qemu-guest-agent/fsfreeze-hook" "$pkgdir/etc/qemu/fsfreeze-hook" +} + +# vim:set ts=2 sw=2 et: diff --git a/qemu-ga.service b/qemu-ga.service new file mode 100644 index 000000000000..abbb6ab9dfe2 --- /dev/null +++ b/qemu-ga.service @@ -0,0 +1,9 @@ +[Unit] +Description=QEMU Guest Agent +ConditionPathExists=/dev/virtio-ports/org.qemu.guest_agent.0 + +[Service] +ExecStart=/usr/bin/qemu-ga + +[Install] +WantedBy=multi-user.target diff --git a/qemu.install b/qemu.install new file mode 100644 index 000000000000..d90269ecfecd --- /dev/null +++ b/qemu.install @@ -0,0 +1,8 @@ +# Arg 1: the new package version +post_install() { + # trigger events on modules files when already loaded + for _f in /sys/devices/virtual/misc/vhost-net; do + [[ -e "$_f" ]] && udevadm trigger "$_f" + done + : +} |