142 lines
4.5 KiB
Nix
142 lines
4.5 KiB
Nix
{ stdenv, fetchurl, which, zlib, pkgconfig, SDL, openssl
|
|
, libuuid, gettext, ncurses, dev86, iasl, pciutils, bzip2, xz
|
|
, lvm2, utillinux, procps, texinfo, perl, pythonPackages }:
|
|
|
|
with stdenv.lib;
|
|
|
|
let
|
|
|
|
version = "4.0.3";
|
|
|
|
libDir = if stdenv.is64bit then "lib64" else "lib";
|
|
|
|
# Sources needed to build the stubdoms.
|
|
|
|
stubdomSrcs =
|
|
[ { url = http://xenbits.xensource.com/xen-extfiles/lwip-1.3.0.tar.gz;
|
|
sha256 = "13wlr85s1hnvia6a698qpryyy12lvmqw0a05xmjnd0h71ralsbkp";
|
|
}
|
|
{ url = http://xenbits.xensource.com/xen-extfiles/zlib-1.2.3.tar.gz;
|
|
sha256 = "0pmh8kifb6sfkqfxc23wqp3f2wzk69sl80yz7w8p8cd4cz8cg58p";
|
|
}
|
|
{ url = http://xenbits.xensource.com/xen-extfiles/newlib-1.16.0.tar.gz;
|
|
sha256 = "01rxk9js833mwadq92jx0flvk9jyjrnwrq93j39c2j2wjsa66hnv";
|
|
}
|
|
{ url = http://xenbits.xensource.com/xen-extfiles/grub-0.97.tar.gz;
|
|
sha256 = "02r6b52r0nsp6ryqfiqchnl7r1d9smm80sqx24494gmx5p8ia7af";
|
|
}
|
|
{ url = http://xenbits.xensource.com/xen-extfiles/pciutils-2.2.9.tar.bz2;
|
|
sha256 = "092v4q478i1gc7f3s2wz6p4xlf1wb4gs5shbkn21vnnmzcffc2pn";
|
|
}
|
|
];
|
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
name = "xen-${version}";
|
|
|
|
src = fetchurl {
|
|
url = "http://bits.xensource.com/oss-xen/release/${version}/xen-${version}.tar.gz";
|
|
sha256 = "0p4i7mm8cdsr8i9z3dij6nriyvz6la2rhm7jkyk2n8h62nnxi1b5";
|
|
};
|
|
|
|
patches =
|
|
[ # Xen looks for headers in /usr/include and for libraries using
|
|
# ldconfig. Don't do that.
|
|
./has-header.patch
|
|
|
|
# GCC 4.5 compatibility.
|
|
./gcc-4.5.patch
|
|
];
|
|
|
|
buildInputs =
|
|
[ which zlib pkgconfig SDL openssl libuuid gettext ncurses
|
|
dev86 iasl pciutils bzip2 xz texinfo perl
|
|
pythonPackages.python pythonPackages.wrapPython
|
|
];
|
|
|
|
pythonPath = [ pythonPackages.curses ];
|
|
|
|
makeFlags = "PREFIX=$(out) CONFIG_DIR=/etc";
|
|
|
|
buildFlags = "xen tools stubdom";
|
|
|
|
preBuild =
|
|
''
|
|
substituteInPlace tools/libfsimage/common/fsimage_plugin.c \
|
|
--replace /usr $out
|
|
|
|
substituteInPlace tools/blktap2/lvm/lvm-util.c \
|
|
--replace /usr/sbin/vgs ${lvm2}/sbin/vgs \
|
|
--replace /usr/sbin/lvs ${lvm2}/sbin/lvs
|
|
|
|
substituteInPlace tools/hotplug/Linux/network-bridge \
|
|
--replace /usr/bin/logger ${utillinux}/bin/logger
|
|
|
|
substituteInPlace tools/xenmon/xenmon.py \
|
|
--replace /usr/bin/pkill ${procps}/bin/pkill
|
|
|
|
substituteInPlace tools/xenstat/Makefile \
|
|
--replace /usr/include/curses.h ${ncurses}/include/curses.h
|
|
|
|
substituteInPlace tools/ioemu-qemu-xen/xen-hooks.mak \
|
|
--replace /usr/include/pci ${pciutils}/include/pci
|
|
|
|
# Work around a bug in our GCC wrapper: `gcc -MF foo -v' doesn't
|
|
# print the GCC version number properly.
|
|
substituteInPlace xen/Makefile \
|
|
--replace '$(CC) $(CFLAGS) -v' '$(CC) -v'
|
|
|
|
substituteInPlace tools/python/xen/xend/server/BlktapController.py \
|
|
--replace /usr/sbin/tapdisk2 $out/sbin/tapdisk2
|
|
|
|
substituteInPlace tools/python/xen/xend/XendQCoWStorageRepo.py \
|
|
--replace /usr/sbin/qcow-create $out/sbin/qcow-create
|
|
|
|
substituteInPlace tools/python/xen/remus/save.py \
|
|
--replace /usr/lib/xen/bin/xc_save $out/${libDir}/xen/bin/xc_save
|
|
|
|
substituteInPlace tools/python/xen/remus/device.py \
|
|
--replace /usr/lib/xen/bin/imqebt $out/${libDir}/xen/bin/imqebt
|
|
|
|
# Allow the location of the xendomains config file to be
|
|
# overriden at runtime.
|
|
substituteInPlace tools/hotplug/Linux/init.d/xendomains \
|
|
--replace 'XENDOM_CONFIG=/etc/sysconfig/xendomains' "" \
|
|
--replace /bin/ls ls
|
|
|
|
# Xen's stubdoms need various sources that it usually fetches at
|
|
# build time using wget. We can't have that.
|
|
${flip concatMapStrings stubdomSrcs (x: let src = fetchurl x; in ''
|
|
cp ${src} stubdom/${src.name}
|
|
'')}
|
|
|
|
# Hack to get `gcc -m32' to work without having 32-bit Glibc headers.
|
|
mkdir -p tools/include/gnu
|
|
touch tools/include/gnu/stubs-32.h
|
|
'';
|
|
|
|
postBuild =
|
|
''
|
|
make -C docs man-pages
|
|
'';
|
|
|
|
installPhase =
|
|
''
|
|
mkdir -p $out
|
|
cp -prvd dist/install/nix/store/*/* $out/
|
|
cp -prvd dist/install/boot $out/boot
|
|
cp -prvd dist/install/etc $out/etc
|
|
cp -dR docs/man1 docs/man5 $out/share/man/
|
|
wrapPythonPrograms
|
|
''; # */
|
|
|
|
meta = {
|
|
homepage = http://www.xen.org/;
|
|
description = "Xen hypervisor and management tools for Dom0";
|
|
platforms = [ "i686-linux" "x86_64-linux" ];
|
|
maintainers = [ stdenv.lib.maintainers.eelco ];
|
|
broken = true; # bump to at least 4.1.6.1 to fix security issues
|
|
};
|
|
}
|