qemu: emit warnings when KVM acceleration is not usable
This fixes the qemu-kvm wrapper we add for convenience silently not using KVM, when the system would support it by at least leaving an indication in the log that the build ran slower because it ran without KVM.
This commit is contained in:
parent
5d06f6933d
commit
08bbd123d5
1 changed files with 24 additions and 1 deletions
|
@ -1,7 +1,7 @@
|
||||||
{ lib, stdenv, fetchurl, fetchpatch, python, zlib, pkg-config, glib
|
{ lib, stdenv, fetchurl, fetchpatch, python, zlib, pkg-config, glib
|
||||||
, perl, pixman, vde2, alsa-lib, texinfo, flex
|
, perl, pixman, vde2, alsa-lib, texinfo, flex
|
||||||
, bison, lzo, snappy, libaio, libtasn1, gnutls, nettle, curl, ninja, meson, sigtool
|
, bison, lzo, snappy, libaio, libtasn1, gnutls, nettle, curl, ninja, meson, sigtool
|
||||||
, makeWrapper, autoPatchelfHook
|
, makeWrapper, autoPatchelfHook, runtimeShell
|
||||||
, attr, libcap, libcap_ng
|
, attr, libcap, libcap_ng
|
||||||
, CoreServices, Cocoa, Hypervisor, rez, setfile
|
, CoreServices, Cocoa, Hypervisor, rez, setfile
|
||||||
, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl
|
, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl
|
||||||
|
@ -228,9 +228,12 @@ stdenv.mkDerivation rec {
|
||||||
|
|
||||||
# Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
|
# Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
|
cp -- $emitKvmWarningsPath $out/libexec/emit-kvm-warnings
|
||||||
|
chmod a+x -- $out/libexec/emit-kvm-warnings
|
||||||
if [ -x $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} ]; then
|
if [ -x $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} ]; then
|
||||||
makeWrapper $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} \
|
makeWrapper $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} \
|
||||||
$out/bin/qemu-kvm \
|
$out/bin/qemu-kvm \
|
||||||
|
--run $out/libexec/emit-kvm-warnings \
|
||||||
--add-flags "\$([ -r /dev/kvm -a -w /dev/kvm ] && echo -enable-kvm)"
|
--add-flags "\$([ -r /dev/kvm -a -w /dev/kvm ] && echo -enable-kvm)"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
@ -242,6 +245,26 @@ stdenv.mkDerivation rec {
|
||||||
# Builds in ~3h with 2 cores, and ~20m with a big-parallel builder.
|
# Builds in ~3h with 2 cores, and ~20m with a big-parallel builder.
|
||||||
requiredSystemFeatures = [ "big-parallel" ];
|
requiredSystemFeatures = [ "big-parallel" ];
|
||||||
|
|
||||||
|
emitKvmWarnings = ''
|
||||||
|
#!${runtimeShell}
|
||||||
|
WARNCOL='\033[1;35m'
|
||||||
|
NEUTRALCOL='\033[0m'
|
||||||
|
WARNING="''${WARNCOL}warning:''${NEUTRALCOL}"
|
||||||
|
if [ ! -e /dev/kvm ]; then
|
||||||
|
echo -e "''${WARNING} KVM is not available - execution will be slow" >&2
|
||||||
|
echo "Consider installing KVM for hardware-accelerated execution." >&2
|
||||||
|
echo "If KVM is already installed make sure the kernel module is loaded." >&2
|
||||||
|
elif [ ! -r /dev/kvm -o ! -w /dev/kvm ]; then
|
||||||
|
echo -e "''${WARNING} /dev/kvm is not read-/writable - execution will be slow" >&2
|
||||||
|
echo "/dev/kvm needs to be read-/writable by the user executing QEMU." >&2
|
||||||
|
echo "" >&2
|
||||||
|
echo "For hardware-acceleration inside the nix build sandbox /dev/kvm" >&2
|
||||||
|
echo "must be world-read-/writable (rw-rw-rw-)." >&2
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
passAsFile = [ "emitKvmWarnings" ];
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "http://www.qemu.org/";
|
homepage = "http://www.qemu.org/";
|
||||||
description = "A generic and open source machine emulator and virtualizer";
|
description = "A generic and open source machine emulator and virtualizer";
|
||||||
|
|
Loading…
Reference in a new issue