diff --git a/nixos/modules/virtualisation/xen-dom0.nix b/nixos/modules/virtualisation/xen-dom0.nix index 7b5d714622c..c750286a397 100644 --- a/nixos/modules/virtualisation/xen-dom0.nix +++ b/nixos/modules/virtualisation/xen-dom0.nix @@ -47,13 +47,32 @@ in ''; }; - virtualisation.xen.bridge = - mkOption { - default = "xenbr0"; - description = - '' - Create a bridge for the Xen domUs to connect to. + virtualisation.xen.bridge = { + name = mkOption { + default = "xenbr0"; + description = '' + Name of bridge the Xen domUs connect to. + ''; + }; + + address = mkOption { + type = types.str; + default = "172.16.0.1"; + description = '' + IPv4 address of the bridge. ''; + }; + + prefixLength = mkOption { + type = types.addCheck types.int (n: n >= 0 && n <= 32); + default = 16; + description = '' + Subnet mask of the bridge interface, specified as the number of + bits in the prefix (24). + A DHCP server will provide IP addresses for the whole, remaining + subnet. + ''; + }; }; virtualisation.xen.stored = @@ -261,11 +280,71 @@ in description = "Xen bridge"; wantedBy = [ "multi-user.target" ]; before = [ "xen-domains.service" ]; - serviceConfig.RemainAfterExit = "yes"; - serviceConfig.ExecStart = "${pkgs.bridge-utils}/bin/brctl addbr ${cfg.bridge}"; - postStart = "${pkgs.inetutils}/bin/ifconfig ${cfg.bridge} up"; - serviceConfig.ExecStop = "${pkgs.inetutils}/bin/ifconfig ${cfg.bridge} down"; - postStop = "${pkgs.bridge-utils}/bin/brctl delbr ${cfg.bridge}"; + preStart = '' + mkdir -p /var/run/xen + touch /var/run/xen/dnsmasq.pid + touch /var/run/xen/dnsmasq.etherfile + touch /var/run/xen/dnsmasq.leasefile + + IFS='-' read -a data <<< `${pkgs.sipcalc}/bin/sipcalc ${cfg.bridge.address}/${toString cfg.bridge.prefixLength} | grep Usable\ range` + export XEN_BRIDGE_IP_RANGE_START="${"\${data[1]//[[:blank:]]/}"}" + export XEN_BRIDGE_IP_RANGE_END="${"\${data[2]//[[:blank:]]/}"}" + + IFS='-' read -a data <<< `${pkgs.sipcalc}/bin/sipcalc ${cfg.bridge.address}/${toString cfg.bridge.prefixLength} | grep Network\ address` + export XEN_BRIDGE_NETWORK_ADDRESS="${"\${data[1]//[[:blank:]]/}"}" + + echo "${cfg.bridge.address} host gw dns" > /var/run/xen/dnsmasq.hostsfile + + cat < /var/run/xen/dnsmasq.conf + no-daemon + pid-file=/var/run/xen/dnsmasq.pid + interface=${cfg.bridge.name} + except-interface=lo + bind-interfaces + auth-server=dns.xen.local,${cfg.bridge.name} + auth-zone=xen.local,$XEN_BRIDGE_NETWORK_ADDRESS/${toString cfg.bridge.prefixLength} + domain=xen.local + addn-hosts=/var/run/xen/dnsmasq.hostsfile + expand-hosts + strict-order + no-hosts + bogus-priv + no-resolv + no-poll + filterwin2k + clear-on-reload + domain-needed + dhcp-hostsfile=/var/run/xen/dnsmasq.etherfile + dhcp-authoritative + dhcp-range=$XEN_BRIDGE_IP_RANGE_START,$XEN_BRIDGE_IP_RANGE_END,$XEN_BRIDGE_NETWORK_ADDRESS + dhcp-no-override + no-ping + dhcp-leasefile=/var/run/xen/dnsmasq.leasefile + EOF + + # DHCP + ${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p tcp -s $XEN_BRIDGE_NETWORK_ADDRESS/${toString cfg.bridge.prefixLength} --sport 68 --dport 67 -j ACCEPT + ${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p udp -s $XEN_BRIDGE_NETWORK_ADDRESS/${toString cfg.bridge.prefixLength} --sport 68 --dport 67 -j ACCEPT + # DNS + ${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p tcp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT + ${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p udp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT + + ${pkgs.bridge-utils}/bin/brctl addbr ${cfg.bridge.name} + ${pkgs.inetutils}/bin/ifconfig ${cfg.bridge.name} ${cfg.bridge.address} + ${pkgs.inetutils}/bin/ifconfig ${cfg.bridge.name} up + ''; + serviceConfig.ExecStart = "${pkgs.dnsmasq}/bin/dnsmasq --conf-file=/var/run/xen/dnsmasq.conf"; + postStop = '' + ${pkgs.inetutils}/bin/ifconfig ${cfg.bridge.name} down + ${pkgs.bridge-utils}/bin/brctl delbr ${cfg.bridge.name} + + # DNS + ${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p udp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT + ${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p tcp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT + # DHCP + ${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p udp --sport 68 --dport 67 -j ACCEPT + ${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p tcp --sport 68 --dport 67 -j ACCEPT + ''; }; diff --git a/pkgs/applications/virtualization/driver/win-pvdrivers/default.nix b/pkgs/applications/virtualization/driver/win-pvdrivers/default.nix new file mode 100644 index 00000000000..faa1076e299 --- /dev/null +++ b/pkgs/applications/virtualization/driver/win-pvdrivers/default.nix @@ -0,0 +1,30 @@ +{ stdenv, fetchgit }: + +stdenv.mkDerivation { + name = "win-pvdrivers-git-20150701"; + version = "20150701"; + + src = fetchgit { + url = "https://github.com/ts468/win-pvdrivers"; + rev = "3054d645fc3ee182bea3e97ff01869f01cc3637a"; + sha256 = "6232ca2b7c9af874abbcb9262faf2c74c819727ed2eb64599c790879df535106"; + }; + + buildPhase = + let unpack = x: "tar xf $src/${x}.tar; mkdir -p x86/${x} amd64/${x}; cp ${x}/x86/* x86/${x}/.; cp ${x}/x64/* amd64/${x}/."; + in stdenv.lib.concatStringsSep "\n" (map unpack ["xenbus" "xeniface" "xenvif" "xennet" "xenvbd"]); + + installPhase = '' + mkdir -p $out + cp -r x86 $out/. + cp -r amd64 $out/. + ''; + + meta = with stdenv.lib; { + description = "Xen Subproject: Windows PV Driver"; + homepage = "http://xenproject.org/downloads/windows-pv-drivers.html"; + maintainers = [ maintainers.tstrobel ]; + platforms = platforms.linux; + license = licenses.bsd3; + }; +} diff --git a/pkgs/applications/virtualization/driver/win-qemu/default.nix b/pkgs/applications/virtualization/driver/win-qemu/default.nix new file mode 100644 index 00000000000..97a1f0b3039 --- /dev/null +++ b/pkgs/applications/virtualization/driver/win-qemu/default.nix @@ -0,0 +1,38 @@ +{ stdenv, fetchurl, p7zip }: + +stdenv.mkDerivation { + name = "win-qemu-0.1.105-1"; + version = "0.1.105-1"; + + phases = [ "buildPhase" "installPhase" ]; + + src = fetchurl { + url = "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.105-1/virtio-win.iso"; + sha256 = "065gz7s77y0q9kfqbr27451sr28rm9azpi88sqjkfph8c6r8q3wc"; + }; + + buildPhase = '' + ${p7zip}/bin/7z x $src + ''; + + installPhase = + let + copy_pvpanic = arch: version: "mkdir -p $out/${arch}/qemupanic; cp pvpanic/${version}/${arch}/* $out/${arch}/qemupanic/. \n"; + copy_pciserial = arch: "mkdir -p $out/${arch}/qemupciserial; cp qemupciserial/* $out/${arch}/qemupciserial/. \n"; + copy_agent = arch: '' + mkdir -p $out/${arch}/qemuagent + cp guest-agent/${if arch=="x86" then "qemu-ga-x86.msi" else "qemu-ga-x64.msi"} $out/${arch}/qemuagent/qemu-guest-agent.msi + (cd $out/${arch}/qemuagent; ${p7zip}/bin/7z x qemu-guest-agent.msi; rm qemu-guest-agent.msi) + ''; + copy = arch: version: (copy_pvpanic arch version) + (copy_pciserial arch) + (copy_agent arch); + in + (copy "amd64" "w8.1") + (copy "x86" "w8.1"); + + meta = with stdenv.lib; { + description = "Windows QEMU Drivers"; + homepage = "https://fedoraproject.org/wiki/Windows_Virtio_Drivers"; + maintainers = [ maintainers.tstrobel ]; + platforms = platforms.linux; + license = licenses.gpl2; + }; +} diff --git a/pkgs/applications/virtualization/driver/win-signed-gplpv-drivers/default.nix b/pkgs/applications/virtualization/driver/win-signed-gplpv-drivers/default.nix new file mode 100644 index 00000000000..c4684a20914 --- /dev/null +++ b/pkgs/applications/virtualization/driver/win-signed-gplpv-drivers/default.nix @@ -0,0 +1,46 @@ +{ stdenv, fetchurl, p7zip }: + +let + src_x86 = fetchurl { + url = "http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x32_signed_0.11.0.373.msi"; + sha256 = "04r11xw8ikjmcdhrsk878c86g0d0pvras5arsas3zs6dhgjykqap"; + }; + + src_amd64 = fetchurl { + url = "http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x64_signed_0.11.0.373.msi"; + sha256 = "00k628mg9b039p8lmg2l9n81dr15svy70p3m6xmq6f0frmci38ph"; + }; +in + +stdenv.mkDerivation { + name = "gplpv-0.11.0.373"; + version = "0.11.0.373"; + + phases = [ "buildPhase" "installPhase" ]; + + buildPhase = '' + mkdir -p x86 + (cd x86; ${p7zip}/bin/7z e ${src_x86}) + mkdir -p amd64 + (cd amd64; ${p7zip}/bin/7z e ${src_amd64}) + ''; + + installPhase = '' + mkdir -p $out/x86 $out/amd64 + cp x86/* $out/x86/. + cp amd64/* $out/amd64/. + ''; + + meta = with stdenv.lib; { + description = '' + A collection of open source Window PV drivers that allow + Windows to be para-virtualized. + The drivers are signed by Univention with a Software Publishers + Certificate obtained from the VeriSign CA. + ''; + homepage = "http://wiki.univention.de/index.php?title=Installing-signed-GPLPV-drivers"; + maintainers = [ maintainers.tstrobel ]; + platforms = platforms.linux; + license = licenses.gpl2; + }; +} diff --git a/pkgs/applications/virtualization/driver/win-spice/default.nix b/pkgs/applications/virtualization/driver/win-spice/default.nix new file mode 100644 index 00000000000..689d36e7110 --- /dev/null +++ b/pkgs/applications/virtualization/driver/win-spice/default.nix @@ -0,0 +1,69 @@ +{ stdenv, fetchurl, p7zip, win-virtio }: + +let + src_usbdk_x86 = fetchurl { + url = "http://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.4_x86.msi"; + sha256 = "17hv8034wk1xqnanm5jxs4741nl7asps1fdz6lhnrpp6gvj6yg9y"; + }; + + src_usbdk_amd64 = fetchurl { + url = "http://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.4_x64.msi"; + sha256 = "0alcqsivp33pm8sy0lmkvq7m5yh6mmcmxdl39zjxjra67kw8r2sd"; + }; + + src_qxlwddm = fetchurl { + url = "http://people.redhat.com/~vrozenfe/qxlwddm/qxlwddm-0.11.zip"; + sha256 = "082zdpbh9i3bq2ds8g33rcbcw390jsm7cqf46rrlx02x8r03dm98"; + }; + + src_vdagent_x86 = fetchurl { + url = "http://www.spice-space.org/download/windows/vdagent/vdagent-win-0.7.3/vdagent_0_7_3_x86.zip"; + sha256 = "0d928g49rf4dl79jmvnqh6g864hp1flw1f0384sfp82himm3bxjs"; + }; + + src_vdagent_amd64 = fetchurl { + url = "http://www.spice-space.org/download/windows/vdagent/vdagent-win-0.7.3/vdagent_0_7_3_x64.zip"; + sha256 = "0djmvm66jcmcyhhbjppccbai45nqpva7vyvry6w8nyc0fwi1vm9l"; + }; +in + +stdenv.mkDerivation { + # use version number of qxlwddm as qxlwddm is the most important component + name = "win-spice-0.11"; + version = "0.11"; + + phases = [ "buildPhase" "installPhase" ]; + + buildPhase = '' + mkdir -p usbdk/x86 usbdk/amd64 + (cd usbdk/x86; ${p7zip}/bin/7z x ${src_usbdk_x86}) + (cd usbdk/amd64; ${p7zip}/bin/7z x ${src_usbdk_amd64}) + + mkdir -p vdagent/x86 vdagent/amd64 + (cd vdagent/x86; ${p7zip}/bin/7z x ${src_vdagent_x86}; mv vdagent_0_7_3_x86/* .; rm -r vdagent_0_7_3_x86) + (cd vdagent/amd64; ${p7zip}/bin/7z x ${src_vdagent_amd64}; mv vdagent_0_7_3_x64/* .; rm -r vdagent_0_7_3_x64) + + mkdir -p qxlwddm + (cd qxlwddm; ${p7zip}/bin/7z x ${src_qxlwddm}; mv Win8 w8.1; cd w8.1; mv x64 amd64) + ''; + + installPhase = + let + copy_qxl = arch: version: "mkdir -p $out/${arch}/qxl; cp qxlwddm/${version}/${arch}/* $out/${arch}/qxl/. \n"; + copy_usbdk = arch: "mkdir -p $out/${arch}/usbdk; cp usbdk/${arch}/* $out/${arch}/usbdk/. \n"; + copy_vdagent = arch: "mkdir -p $out/${arch}/vdagent; cp vdagent/${arch}/* $out/${arch}/vdagent/. \n"; + # SPICE needs vioserial + # TODO: Link windows version in win-spice (here) to version used in win-virtio. + # That way it would never matter whether vioserial is installed from win-virtio or win-spice. + copy_vioserial = arch: "mkdir -p $out/${arch}/vioserial; cp ${win-virtio}/${arch}/vioserial/* $out/${arch}/vioserial/. \n"; + copy = arch: version: (copy_qxl arch version) + (copy_usbdk arch) + (copy_vdagent arch) + (copy_vioserial arch); + in + (copy "amd64" "w8.1") + (copy "x86" "w8.1"); + + meta = with stdenv.lib; { + description = ''Windows SPICE Drivers''; + homepage = "http://www.spice-space.org"; + maintainers = [ maintainers.tstrobel ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/applications/virtualization/driver/win-virtio/default.nix b/pkgs/applications/virtualization/driver/win-virtio/default.nix new file mode 100644 index 00000000000..5cf2e0a3062 --- /dev/null +++ b/pkgs/applications/virtualization/driver/win-virtio/default.nix @@ -0,0 +1,37 @@ +{ stdenv, fetchurl, p7zip }: + +stdenv.mkDerivation { + name = "win-virtio-0.1.105-1"; + version = "0.1.105-1"; + + phases = [ "buildPhase" "installPhase" ]; + + src = fetchurl { + url = "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.105-1/virtio-win.iso"; + sha256 = "065gz7s77y0q9kfqbr27451sr28rm9azpi88sqjkfph8c6r8q3wc"; + }; + + buildPhase = '' + ${p7zip}/bin/7z x $src + ''; + + installPhase = + let + copy = arch: version: {input, output}: "mkdir -p $out/${arch}/${output}; cp ${input}/${version}/${arch}/* $out/${arch}/${output}/."; + virtio = [{input="Balloon"; output="vioballoon";} + {input="NetKVM"; output="vionet";} + {input="vioscsi"; output="vioscsi";} + {input="vioserial"; output="vioserial";} + {input="viostor"; output="viostor";} + {input="viorng"; output="viorng";} + ]; + in + stdenv.lib.concatStringsSep "\n" ((map (copy "amd64" "w8.1") virtio) ++ (map (copy "x86" "w8.1") virtio)); + + meta = with stdenv.lib; { + description = "Windows VirtIO Drivers"; + homepage = "https://fedoraproject.org/wiki/Windows_Virtio_Drivers"; + maintainers = [ maintainers.tstrobel ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch b/pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch new file mode 100644 index 00000000000..1eb3d5949de --- /dev/null +++ b/pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch @@ -0,0 +1,23 @@ +diff --git a/src/Kconfig b/src/Kconfig +index 45ca59c..faf8951 100644 +--- a/src/Kconfig ++++ b/src/Kconfig +@@ -144,13 +144,13 @@ menu "Hardware support" + config ATA_DMA + depends on ATA + bool "ATA DMA" +- default n ++ default y + help + Detect and try to use ATA bus mastering DMA controllers. + config ATA_PIO32 + depends on ATA + bool "ATA 32bit PIO" +- default n ++ default y + help + Use 32bit PIO accesses on ATA (minor optimization on PCI +transfers). + config AHCI +-- +1.7.10.4 diff --git a/pkgs/applications/virtualization/xen/0001-libxl-Spice-image-compression-setting-support-for-up.patch b/pkgs/applications/virtualization/xen/0001-libxl-Spice-image-compression-setting-support-for-up.patch new file mode 100644 index 00000000000..67b7ac777b5 --- /dev/null +++ b/pkgs/applications/virtualization/xen/0001-libxl-Spice-image-compression-setting-support-for-up.patch @@ -0,0 +1,104 @@ +From bd71555985efc423b1a119b6a3177de855763453 Mon Sep 17 00:00:00 2001 +From: Fabio Fantoni +Date: Tue, 20 Jan 2015 11:26:30 +0100 +Subject: [PATCH] libxl: Spice image compression setting support for upstream + qemu + +Usage: +spice_image_compression=[auto_glz|auto_lz|quic|glz|lz|off] + +Specifies what image compression is to be used by spice (if given), +otherwise the qemu default will be used. + +Signed-off-by: Fabio Fantoni +Acked-by: Wei Liu +--- + docs/man/xl.cfg.pod.5 | 6 ++++++ + tools/libxl/libxl.h | 11 +++++++++++ + tools/libxl/libxl_dm.c | 4 ++++ + tools/libxl/libxl_types.idl | 1 + + tools/libxl/xl_cmdimpl.c | 2 ++ + 5 files changed, 24 insertions(+) + +diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 +index e2f91fc..0c2cbac 100644 +--- a/docs/man/xl.cfg.pod.5 ++++ b/docs/man/xl.cfg.pod.5 +@@ -1427,6 +1427,12 @@ for redirection of up to 4 usb devices from spice client to domU's qemu. + It requires an usb controller and if not defined it will automatically adds + an usb2 controller. The default is disabled (0). + ++=item B ++ ++Specifies what image compression is to be used by spice (if given), otherwise ++the qemu default will be used. Please see documentations of your current qemu ++version for details. ++ + =back + + =head3 Miscellaneous Emulated Hardware +diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h +index 0a123f1..b8e0b67 100644 +--- a/tools/libxl/libxl.h ++++ b/tools/libxl/libxl.h +@@ -528,6 +528,17 @@ typedef struct libxl__ctx libxl_ctx; + #define LIBXL_HAVE_SPICE_USBREDIREDIRECTION 1 + + /* ++ * LIBXL_HAVE_SPICE_IMAGECOMPRESSION ++ * ++ * If defined, then the libxl_spice_info structure will contain a string type ++ * field: image_compression. This value defines what Spice image compression ++ * is used. ++ * ++ * If this is not defined, the Spice image compression setting support is ignored. ++ */ ++#define LIBXL_HAVE_SPICE_IMAGECOMPRESSION 1 ++ ++/* + * LIBXL_HAVE_DOMAIN_CREATE_RESTORE_PARAMS 1 + * + * If this is defined, libxl_domain_create_restore()'s API has changed to +diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c +index c2b0487..40c8649 100644 +--- a/tools/libxl/libxl_dm.c ++++ b/tools/libxl/libxl_dm.c +@@ -398,6 +398,10 @@ static char *dm_spice_options(libxl__gc *gc, + if (!libxl_defbool_val(spice->clipboard_sharing)) + opt = libxl__sprintf(gc, "%s,disable-copy-paste", opt); + ++ if (spice->image_compression) ++ opt = libxl__sprintf(gc, "%s,image-compression=%s", opt, ++ spice->image_compression); ++ + return opt; + } + +diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl +index 1214d2e..052ded9 100644 +--- a/tools/libxl/libxl_types.idl ++++ b/tools/libxl/libxl_types.idl +@@ -241,6 +241,7 @@ libxl_spice_info = Struct("spice_info", [ + ("vdagent", libxl_defbool), + ("clipboard_sharing", libxl_defbool), + ("usbredirection", integer), ++ ("image_compression", string), + ]) + + libxl_sdl_info = Struct("sdl_info", [ +diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c +index 0b02a6c..00aa69d 100644 +--- a/tools/libxl/xl_cmdimpl.c ++++ b/tools/libxl/xl_cmdimpl.c +@@ -1948,6 +1948,8 @@ skip_vfb: + &b_info->u.hvm.spice.clipboard_sharing, 0); + if (!xlu_cfg_get_long (config, "spiceusbredirection", &l, 0)) + b_info->u.hvm.spice.usbredirection = l; ++ xlu_cfg_replace_string (config, "spice_image_compression", ++ &b_info->u.hvm.spice.image_compression, 0); + xlu_cfg_get_defbool(config, "nographic", &b_info->u.hvm.nographic, 0); + xlu_cfg_get_defbool(config, "gfx_passthru", + &b_info->u.hvm.gfx_passthru, 0); +-- +1.9.2 + diff --git a/pkgs/applications/virtualization/xen/0002-libxl-Spice-streaming-video-setting-support-for-upst.patch b/pkgs/applications/virtualization/xen/0002-libxl-Spice-streaming-video-setting-support-for-upst.patch new file mode 100644 index 00000000000..acf9cff9925 --- /dev/null +++ b/pkgs/applications/virtualization/xen/0002-libxl-Spice-streaming-video-setting-support-for-upst.patch @@ -0,0 +1,104 @@ +From 296c7f3284efe655d95a8ae045a5dc1a20d6fff0 Mon Sep 17 00:00:00 2001 +From: Fabio Fantoni +Date: Tue, 20 Jan 2015 11:33:17 +0100 +Subject: [PATCH] libxl: Spice streaming video setting support for upstream + qemu + +Usage: +spice_streaming_video=[filter|all|off] + +Specifies what streaming video setting is to be used by spice (if +given), +otherwise the qemu default will be used. + +Signed-off-by: Fabio Fantoni +Acked-by: Wei Liu +--- + docs/man/xl.cfg.pod.5 | 5 +++++ + tools/libxl/libxl.h | 11 +++++++++++ + tools/libxl/libxl_dm.c | 4 ++++ + tools/libxl/libxl_types.idl | 1 + + tools/libxl/xl_cmdimpl.c | 2 ++ + 5 files changed, 23 insertions(+) + +diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 +index 0c2cbac..408653f 100644 +--- a/docs/man/xl.cfg.pod.5 ++++ b/docs/man/xl.cfg.pod.5 +@@ -1433,6 +1433,11 @@ Specifies what image compression is to be used by spice (if given), otherwise + the qemu default will be used. Please see documentations of your current qemu + version for details. + ++=item B ++ ++Specifies what streaming video setting is to be used by spice (if given), ++otherwise the qemu default will be used. ++ + =back + + =head3 Miscellaneous Emulated Hardware +diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h +index b8e0b67..c219f59 100644 +--- a/tools/libxl/libxl.h ++++ b/tools/libxl/libxl.h +@@ -539,6 +539,17 @@ typedef struct libxl__ctx libxl_ctx; + #define LIBXL_HAVE_SPICE_IMAGECOMPRESSION 1 + + /* ++ * LIBXL_HAVE_SPICE_STREAMINGVIDEO ++ * ++ * If defined, then the libxl_spice_info structure will contain a string type ++ * field: streaming_video. This value defines what Spice streaming video setting ++ * is used. ++ * ++ * If this is not defined, the Spice streaming video setting support is ignored. ++ */ ++#define LIBXL_HAVE_SPICE_STREAMINGVIDEO 1 ++ ++/* + * LIBXL_HAVE_DOMAIN_CREATE_RESTORE_PARAMS 1 + * + * If this is defined, libxl_domain_create_restore()'s API has changed to +diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c +index 40c8649..d8d6f0c 100644 +--- a/tools/libxl/libxl_dm.c ++++ b/tools/libxl/libxl_dm.c +@@ -402,6 +402,10 @@ static char *dm_spice_options(libxl__gc *gc, + opt = libxl__sprintf(gc, "%s,image-compression=%s", opt, + spice->image_compression); + ++ if (spice->streaming_video) ++ opt = libxl__sprintf(gc, "%s,streaming-video=%s", opt, ++ spice->streaming_video); ++ + return opt; + } + +diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl +index 052ded9..02be466 100644 +--- a/tools/libxl/libxl_types.idl ++++ b/tools/libxl/libxl_types.idl +@@ -242,6 +242,7 @@ libxl_spice_info = Struct("spice_info", [ + ("clipboard_sharing", libxl_defbool), + ("usbredirection", integer), + ("image_compression", string), ++ ("streaming_video", string), + ]) + + libxl_sdl_info = Struct("sdl_info", [ +diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c +index 00aa69d..b7eac29 100644 +--- a/tools/libxl/xl_cmdimpl.c ++++ b/tools/libxl/xl_cmdimpl.c +@@ -1950,6 +1950,8 @@ skip_vfb: + b_info->u.hvm.spice.usbredirection = l; + xlu_cfg_replace_string (config, "spice_image_compression", + &b_info->u.hvm.spice.image_compression, 0); ++ xlu_cfg_replace_string (config, "spice_streaming_video", ++ &b_info->u.hvm.spice.streaming_video, 0); + xlu_cfg_get_defbool(config, "nographic", &b_info->u.hvm.nographic, 0); + xlu_cfg_get_defbool(config, "gfx_passthru", + &b_info->u.hvm.gfx_passthru, 0); +-- +1.9.2 + diff --git a/pkgs/applications/virtualization/xen/0003-Add-qxl-vga-interface-support-for-upstream-qem.patch b/pkgs/applications/virtualization/xen/0003-Add-qxl-vga-interface-support-for-upstream-qem.patch new file mode 100644 index 00000000000..1771b662bc3 --- /dev/null +++ b/pkgs/applications/virtualization/xen/0003-Add-qxl-vga-interface-support-for-upstream-qem.patch @@ -0,0 +1,165 @@ +From 161212ef02312c0681d2d809c8ff1e1f0ea6f6f9 Mon Sep 17 00:00:00 2001 +From: Fabio Fantoni +Date: Wed, 29 Apr 2015 11:20:28 +0200 +Subject: [PATCH] libxl: Add qxl vga interface support for upstream qemu + +Usage: +vga="qxl" + +Qxl vga support many resolutions that not supported by stdvga, +mainly the 16:9 ones and other high up to 2560x1600. +With QXL you can get improved performance and smooth video also +with high resolutions and high quality. +Require their drivers installed in the domU and spice used +otherwise act as a simple stdvga. + +Signed-off-by: Fabio Fantoni +Signed-off-by: Zhou Peng +Acked-by: Stefano Stabellini +Acked-by: Ian Jackson +Acked-by: George Dunlap +--- + docs/man/xl.cfg.pod.5 | 10 +++++++++- + tools/libxl/libxl.h | 10 ++++++++++ + tools/libxl/libxl_create.c | 13 +++++++++++++ + tools/libxl/libxl_dm.c | 8 ++++++++ + tools/libxl/libxl_types.idl | 1 + + tools/libxl/xl_cmdimpl.c | 2 ++ + 6 files changed, 43 insertions(+), 1 deletion(-) + +diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 +index f936dfc..8e4154f 100644 +--- a/docs/man/xl.cfg.pod.5 ++++ b/docs/man/xl.cfg.pod.5 +@@ -1360,6 +1360,9 @@ qemu-xen-traditional device-model, the amount of video RAM is fixed at 4 MB, + which is sufficient for 1024x768 at 32 bpp. For the upstream qemu-xen + device-model, the default and minimum is 8 MB. + ++For B vga, the default is both default and minimal 128MB. ++If B is set less than 128MB, an error will be triggered. ++ + =item B + + Select a standard VGA card with VBE (VESA BIOS Extensions) as the +@@ -1371,9 +1374,14 @@ This option is deprecated, use vga="stdvga" instead. + + =item B + +-Selects the emulated video card (none|stdvga|cirrus). ++Selects the emulated video card (none|stdvga|cirrus|qxl). + The default is cirrus. + ++In general, QXL should work with the Spice remote display protocol ++for acceleration, and QXL driver is necessary in guest in this case. ++QXL can also work with the VNC protocol, but it will be like a standard ++VGA without acceleration. ++ + =item B + + Allow access to the display via the VNC protocol. This enables the +diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h +index 44bd8e2..efc0617 100644 +--- a/tools/libxl/libxl.h ++++ b/tools/libxl/libxl.h +@@ -535,6 +535,16 @@ typedef struct libxl__ctx libxl_ctx; + #define LIBXL_HAVE_DOMINFO_OUTSTANDING_MEMKB 1 + + /* ++ * LIBXL_HAVE_QXL ++ * ++ * If defined, then the libxl_vga_interface_type will contain another value: ++ * "QXL". This value define if qxl vga is supported. ++ * ++ * If this is not defined, the qxl vga support is missed. ++ */ ++#define LIBXL_HAVE_QXL 1 ++ ++/* + * LIBXL_HAVE_SPICE_VDAGENT + * + * If defined, then the libxl_spice_info structure will contain a boolean type: +diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c +index e5a343f..188f7df 100644 +--- a/tools/libxl/libxl_create.c ++++ b/tools/libxl/libxl_create.c +@@ -248,6 +248,10 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, + if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) + b_info->video_memkb = 0; + break; ++ case LIBXL_VGA_INTERFACE_TYPE_QXL: ++ LOG(ERROR,"qemu upstream required for qxl vga"); ++ return ERROR_INVAL; ++ break; + case LIBXL_VGA_INTERFACE_TYPE_STD: + if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) + b_info->video_memkb = 8 * 1024; +@@ -272,6 +276,15 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, + if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) + b_info->video_memkb = 0; + break; ++ case LIBXL_VGA_INTERFACE_TYPE_QXL: ++ if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) { ++ b_info->video_memkb = (128 * 1024); ++ } else if (b_info->video_memkb < (128 * 1024)) { ++ LOG(ERROR, ++ "128 Mib videoram is the minimum for qxl default"); ++ return ERROR_INVAL; ++ } ++ break; + case LIBXL_VGA_INTERFACE_TYPE_STD: + if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) + b_info->video_memkb = 16 * 1024; +diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c +index 30c1578..58c9b99 100644 +--- a/tools/libxl/libxl_dm.c ++++ b/tools/libxl/libxl_dm.c +@@ -251,6 +251,8 @@ static char ** libxl__build_device_model_args_old(libxl__gc *gc, + case LIBXL_VGA_INTERFACE_TYPE_NONE: + flexarray_append_pair(dm_args, "-vga", "none"); + break; ++ case LIBXL_VGA_INTERFACE_TYPE_QXL: ++ break; + } + + if (b_info->u.hvm.boot) { +@@ -625,6 +627,12 @@ static char ** libxl__build_device_model_args_new(libxl__gc *gc, + break; + case LIBXL_VGA_INTERFACE_TYPE_NONE: + break; ++ case LIBXL_VGA_INTERFACE_TYPE_QXL: ++ /* QXL have 2 ram regions, ram and vram */ ++ flexarray_append_pair(dm_args, "-device", ++ GCSPRINTF("qxl-vga,vram_size_mb=%"PRIu64",ram_size_mb=%"PRIu64, ++ (b_info->video_memkb/2/1024), (b_info->video_memkb/2/1024) ) ); ++ break; + } + + if (b_info->u.hvm.boot) { +diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl +index 117b61d..023b21e 100644 +--- a/tools/libxl/libxl_types.idl ++++ b/tools/libxl/libxl_types.idl +@@ -183,6 +183,7 @@ libxl_vga_interface_type = Enumeration("vga_interface_type", [ + (1, "CIRRUS"), + (2, "STD"), + (3, "NONE"), ++ (4, "QXL"), + ], init_val = "LIBXL_VGA_INTERFACE_TYPE_CIRRUS") + + libxl_vendor_device = Enumeration("vendor_device", [ +diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c +index 648ca08..526a1f6 100644 +--- a/tools/libxl/xl_cmdimpl.c ++++ b/tools/libxl/xl_cmdimpl.c +@@ -2115,6 +2115,8 @@ skip_vfb: + b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS; + } else if (!strcmp(buf, "none")) { + b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_NONE; ++ } else if (!strcmp(buf, "qxl")) { ++ b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_QXL; + } else { + fprintf(stderr, "Unknown vga \"%s\" specified\n", buf); + exit(1); +-- +1.9.2 + diff --git a/pkgs/applications/virtualization/xen/4.4.1.nix b/pkgs/applications/virtualization/xen/4.4.1.nix index a13a51a1d4e..ec2056cc547 100644 --- a/pkgs/applications/virtualization/xen/4.4.1.nix +++ b/pkgs/applications/virtualization/xen/4.4.1.nix @@ -14,30 +14,34 @@ let # Sources needed to build the xen tools and tools/firmware. toolsGits = [ # tag qemu-xen-4.4.1 - { name = "qemu-xen"; - url = git://xenbits.xen.org/qemu-upstream-4.4-testing.git; - rev = "65fc9b78ba3d868a26952db0d8e51cecf01d47b4"; - sha256 = "e24fb58f773fd9134c5aae6d3ca7e9f754dc9822de92b1eb2cedc76faf911f18"; + { git = { name = "qemu-xen"; + url = git://xenbits.xen.org/qemu-upstream-4.4-testing.git; + rev = "65fc9b78ba3d868a26952db0d8e51cecf01d47b4"; + sha256 = "e24fb58f773fd9134c5aae6d3ca7e9f754dc9822de92b1eb2cedc76faf911f18"; + }; } # tag xen-4.4.1 - { name = "qemu-xen-traditional"; - url = git://xenbits.xen.org/qemu-xen-4.4-testing.git; - rev = "6ae4e588081620b141071eb010ec40aca7e12876"; - sha256 = "b1ed1feb92fbe658273a8d6d38d6ea60b79c1658413dd93979d6d128d8554ded"; + { git = { name = "qemu-xen-traditional"; + url = git://xenbits.xen.org/qemu-xen-4.4-testing.git; + rev = "6ae4e588081620b141071eb010ec40aca7e12876"; + sha256 = "b1ed1feb92fbe658273a8d6d38d6ea60b79c1658413dd93979d6d128d8554ded"; + }; } ]; firmwareGits = [ # tag 1.7.3.1 - { name = "seabios"; - url = git://xenbits.xen.org/seabios.git; - rev = "7d9cbe613694924921ed1a6f8947d711c5832eee"; - sha256 = "c071282bbcb1dd0d98536ef90cd1410f5d8da19648138e0e3863bc540d954a87"; + { git = { name = "seabios"; + url = git://xenbits.xen.org/seabios.git; + rev = "7d9cbe613694924921ed1a6f8947d711c5832eee"; + sha256 = "c071282bbcb1dd0d98536ef90cd1410f5d8da19648138e0e3863bc540d954a87"; + }; } - { name = "ovmf"; - url = git://xenbits.xen.org/ovmf.git; - rev = "447d264115c476142f884af0be287622cd244423"; - sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b"; + { git = { name = "ovmf"; + url = git://xenbits.xen.org/ovmf.git; + rev = "447d264115c476142f884af0be287622cd244423"; + sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b"; + }; } ]; diff --git a/pkgs/applications/virtualization/xen/4.5.0.nix b/pkgs/applications/virtualization/xen/4.5.0.nix index 176e15ea2c7..156255be0d7 100644 --- a/pkgs/applications/virtualization/xen/4.5.0.nix +++ b/pkgs/applications/virtualization/xen/4.5.0.nix @@ -14,30 +14,47 @@ let # Sources needed to build the xen tools and tools/firmware. firmwareGits = [ # tag 1.7.5 - { name = "seabios"; - url = git://xenbits.xen.org/seabios.git; - rev = "e51488c5f8800a52ac5c8da7a31b85cca5cc95d2"; - sha256 = "b96a0b9f31cab0f3993d007dcbe5f1bd69ad02b0a23eb2dc8a3ed1aafe7985cb"; + { git = { name = "seabios"; + url = git://xenbits.xen.org/seabios.git; + rev = "e51488c5f8800a52ac5c8da7a31b85cca5cc95d2"; + sha256 = "b96a0b9f31cab0f3993d007dcbe5f1bd69ad02b0a23eb2dc8a3ed1aafe7985cb"; + }; + patches = [ ./0000-qemu-seabios-enable-ATA_DMA.patch ]; } - { name = "ovmf"; - url = git://xenbits.xen.org/ovmf.git; - rev = "447d264115c476142f884af0be287622cd244423"; - sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b"; + { git = { name = "ovmf"; + url = git://xenbits.xen.org/ovmf.git; + rev = "447d264115c476142f884af0be287622cd244423"; + sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b"; + }; } ]; toolsGits = [ # tag qemu-xen-4.5.0 - { name = "qemu-xen"; - url = git://xenbits.xen.org/qemu-upstream-4.5-testing.git; - rev = "1ebb75b1fee779621b63e84fefa7b07354c43a99"; - sha256 = "1j312q2mqvkvby9adkkxf7f1pn3nz85g5mr9nbg4qpf2y9cg122z"; + { git = { name = "qemu-xen"; + url = git://xenbits.xen.org/qemu-upstream-4.5-testing.git; + rev = "1ebb75b1fee779621b63e84fefa7b07354c43a99"; + sha256 = "1j312q2mqvkvby9adkkxf7f1pn3nz85g5mr9nbg4qpf2y9cg122z"; + }; } # tag xen-4.5.0 - { name = "qemu-xen-traditional"; - url = git://xenbits.xen.org/qemu-xen-4.5-testing.git; - rev = "b0d42741f8e9a00854c3b3faca1da84bfc69bf22"; - sha256 = "ce52b5108936c30ab85ec0c9554f88d5e7b34896f3acb666d56765b49c86f2af"; + { git = { name = "qemu-xen-traditional"; + url = git://xenbits.xen.org/qemu-xen-4.5-testing.git; + rev = "b0d42741f8e9a00854c3b3faca1da84bfc69bf22"; + sha256 = "ce52b5108936c30ab85ec0c9554f88d5e7b34896f3acb666d56765b49c86f2af"; + }; + } + { git = { name = "xen-libhvm"; + url = "https://github.com/ts468/xen-libhvm"; + rev = "442dcc4f6f4e374a51e4613532468bd6b48bdf63"; + sha256 = "9ba97c39a00a54c154785716aa06691d312c99be498ebbc00dc3769968178ba8"; + }; + description = '' + Helper library for reading ACPI and SMBIOS firmware values + from the host system for use with the HVM guest firmware + pass-through feature in Xen. + ''; + #license = licenses.bsd2; } ]; @@ -52,6 +69,10 @@ let quilt push -a substituteInPlace tools/xenguest/Makefile --replace "_BSD_SOURCE" "_DEFAULT_SOURCE" ''; + + xenPatches = [ ./0001-libxl-Spice-image-compression-setting-support-for-up.patch + ./0002-libxl-Spice-streaming-video-setting-support-for-upst.patch + ./0003-Add-qxl-vga-interface-support-for-upstream-qem.patch ]; }; in callPackage ./generic.nix (args // { xenConfig=xenConfig; }) diff --git a/pkgs/applications/virtualization/xen/4.5.1.nix b/pkgs/applications/virtualization/xen/4.5.1.nix new file mode 100644 index 00000000000..3412a0bd6ec --- /dev/null +++ b/pkgs/applications/virtualization/xen/4.5.1.nix @@ -0,0 +1,67 @@ +{ callPackage, fetchurl, fetchgit, ... } @ args: + +let + # Xen 4.5.1 + xenConfig = { + name = "xen-4.5.1"; + version = "4.5.1"; + + src = fetchurl { + url = "http://bits.xensource.com/oss-xen/release/4.5.1/xen-4.5.1.tar.gz"; + sha256 = "0w8kbqy7zixacrpbk3yj51xx7b3f6l8ghsg3551w8ym6zka13336"; + }; + + # Sources needed to build the xen tools and tools/firmware. + firmwareGits = + [ # tag 1.7.5 + { git = { name = "seabios"; + url = git://xenbits.xen.org/seabios.git; + rev = "e51488c5f8800a52ac5c8da7a31b85cca5cc95d2"; + sha256 = "b96a0b9f31cab0f3993d007dcbe5f1bd69ad02b0a23eb2dc8a3ed1aafe7985cb"; + }; + patches = [ ./0000-qemu-seabios-enable-ATA_DMA.patch ]; + } + { git = { name = "ovmf"; + url = git://xenbits.xen.org/ovmf.git; + rev = "447d264115c476142f884af0be287622cd244423"; + sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b"; + }; + } + ]; + + toolsGits = + [ # tag qemu-xen-4.5.1 + { git = { name = "qemu-xen"; + url = git://xenbits.xen.org/qemu-upstream-4.5-testing.git; + rev = "d9552b0af21c27535cd3c8549bb31d26bbecd506"; + sha256 = "15dbz8j26wl4vs5jijhccwgd8c6wkmpj4mz899fa7i1bbh8yysfy"; + }; + } + # tag xen-4.5.1 + { git = { name = "qemu-xen-traditional"; + url = git://xenbits.xen.org/qemu-xen-4.5-testing.git; + rev = "afaa35b4bc975b2b89ad44c481d0d7623e3d1c49"; + sha256 = "906b31cf32b52d29e521abaa76d641123bdf24f33fa53c6f109b6d7834e514be"; + }; + } + { git = { name = "xen-libhvm"; + url = "https://github.com/ts468/xen-libhvm"; + rev = "442dcc4f6f4e374a51e4613532468bd6b48bdf63"; + sha256 = "9ba97c39a00a54c154785716aa06691d312c99be498ebbc00dc3769968178ba8"; + }; + description = '' + Helper library for reading ACPI and SMBIOS firmware values + from the host system for use with the HVM guest firmware + pass-through feature in Xen. + ''; + #license = licenses.bsd2; + } + ]; + + xenPatches = [ ./0001-libxl-Spice-image-compression-setting-support-for-up.patch + ./0002-libxl-Spice-streaming-video-setting-support-for-upst.patch + ./0003-Add-qxl-vga-interface-support-for-upstream-qem.patch ]; + }; + +in callPackage ./generic.nix (args // { xenConfig=xenConfig; }) + diff --git a/pkgs/applications/virtualization/xen/generic.nix b/pkgs/applications/virtualization/xen/generic.nix index 711fd505efa..2c92a983474 100644 --- a/pkgs/applications/virtualization/xen/generic.nix +++ b/pkgs/applications/virtualization/xen/generic.nix @@ -3,7 +3,7 @@ , lvm2, utillinux, procps, texinfo, perl, pythonPackages , glib, bridge-utils, xlibs, pixman, iproute, udev, bison , flex, cmake, ocaml, ocamlPackages, figlet, libaio, yajl -, checkpolicy, transfig, glusterfs, fetchgit, xz, spice +, checkpolicy, transfig, glusterfs, acl, fetchgit, xz, spice , spice_protocol, usbredir, alsaLib, quilt , coreutils, gawk, gnused, gnugrep, diffutils, multipath_tools , inetutils, iptables, openvswitch, nbd, drbd, xenConfig @@ -69,15 +69,14 @@ stdenv.mkDerivation { glib bridge-utils pixman iproute udev bison xlibs.libX11 flex ocaml ocamlPackages.findlib figlet libaio checkpolicy pythonPackages.markdown transfig - glusterfs cmake spice spice_protocol usbredir + glusterfs acl cmake spice spice_protocol usbredir alsaLib quilt ]; pythonPath = [ pythonPackages.curses ]; - patchPhase = if ((xenserverPatched == true) && (builtins.hasAttr "xenserverPatches" xenConfig)) - then xenConfig.xenserverPatches - else ""; + patches = stdenv.lib.optionals ((xenserverPatched == false) && (builtins.hasAttr "xenPatches" xenConfig)) xenConfig.xenPatches; + patchPhase = stdenv.lib.optional ((xenserverPatched == true) && (builtins.hasAttr "xenserverPatches" xenConfig)) xenConfig.xenserverPatches; preConfigure = '' # Fake wget: copy prefetched downloads instead @@ -87,13 +86,9 @@ stdenv.mkDerivation { echo "cp \$4 \$3" >> wget/wget chmod +x wget/wget export PATH=$PATH:$PWD/wget + export EXTRA_QEMUU_CONFIGURE_ARGS="--enable-spice --enable-usb-redir --enable-linux-aio" ''; - # TODO: If multiple arguments are given with with-extra-qemuu, - # then the configuration aborts; the reason is unclear. - # If you know how to fix it, please let me know! :) - #configureFlags = "--with-extra-qemuu-configure-args='--enable-spice --enable-usb-redir --enable-linux-aio'"; - # TODO: Flask needs more testing before enabling it by default. #makeFlags = "XSM_ENABLE=y FLASK_ENABLE=y PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files "; makeFlags = "PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files "; @@ -154,13 +149,17 @@ stdenv.mkDerivation { # Xen's tools and firmares need various git repositories that it # usually checks out at time using git. We can't have that. - ${flip concatMapStrings xenConfig.toolsGits (x: let src = fetchgit x; in '' + ${flip concatMapStrings xenConfig.toolsGits (x: let src = fetchgit x.git; in '' cp -r ${src} tools/${src.name}-dir-remote - chmod +w tools/${src.name}-dir-remote + chmod -R +w tools/${src.name}-dir-remote + '' + stdenv.lib.optionalString (builtins.hasAttr "patches" x) '' + ( cd tools/${src.name}-dir-remote; ${concatStringsSep "; " (map (p: "patch -p1 < ${p}") x.patches)} ) '')} - ${flip concatMapStrings xenConfig.firmwareGits (x: let src = fetchgit x; in '' + ${flip concatMapStrings xenConfig.firmwareGits (x: let src = fetchgit x.git; in '' cp -r ${src} tools/firmware/${src.name}-dir-remote - chmod +w tools/firmware/${src.name}-dir-remote + chmod -R +w tools/firmware/${src.name}-dir-remote + '' + stdenv.lib.optionalString (builtins.hasAttr "patches" x) '' + ( cd tools/firmware/${src.name}-dir-remote; ${concatStringsSep "; " (map (p: "patch -p1 < ${p}") x.patches)} ) '')} # Xen's stubdoms and firmwares need various sources that are usually fetched @@ -178,6 +177,9 @@ stdenv.mkDerivation { postBuild = '' make -C docs man-pages + + (cd tools/xen-libhvm-dir-remote; make) + (cd tools/xen-libhvm-dir-remote/biospt; cc -Wall -g -D_LINUX -Wstrict-prototypes biospt.c -o biospt -I../libhvm -L../libhvm -lxenhvm) ''; installPhase = @@ -192,8 +194,11 @@ stdenv.mkDerivation { shopt -s extglob for i in $out/etc/xen/scripts/!(*.sh); do - sed -i '2s@^@export PATH=$out/bin:${scriptEnvPath}@' $i + sed -i "2s@^@export PATH=$out/bin:${scriptEnvPath}\n@" $i done + + (cd tools/xen-libhvm-dir-remote; make install) + cp tools/xen-libhvm-dir-remote/biospt/biospt $out/bin/. ''; meta = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f19ad2caedc..e90ff4984b8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -13203,8 +13203,15 @@ let xen_4_4_1 = callPackage ../applications/virtualization/xen/4.4.1.nix { }; xen_4_5_0 = callPackage ../applications/virtualization/xen/4.5.0.nix { }; + xen_4_5_1 = callPackage ../applications/virtualization/xen/4.5.1.nix { }; xen_xenServer = callPackage ../applications/virtualization/xen/4.5.0.nix { xenserverPatched = true; }; - xen = xen_4_5_0; + xen = xen_4_5_1; + + win-spice = callPackage ../applications/virtualization/driver/win-spice { }; + win-virtio = callPackage ../applications/virtualization/driver/win-virtio { }; + win-qemu = callPackage ../applications/virtualization/driver/win-qemu { }; + win-pvdrivers = callPackage ../applications/virtualization/driver/win-pvdrivers { }; + win-signed-gplpv-drivers = callPackage ../applications/virtualization/driver/win-signed-gplpv-drivers { }; xfe = callPackage ../applications/misc/xfe { fox = fox_1_6;