nixpkgs/pkgs/applications/virtualization/xen/default.nix

145 lines
4.7 KiB
Nix
Raw Normal View History

{ 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.1.2";
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";
}
];
ipxeSrc =
{ url = http://xenbits.xensource.com/xen-extfiles/ipxe-git-v1.0.0.tar.gz;
sha256 = "d3128bfda9a1542049c278755f85bbcbb8441da7bfd702d511ce237fcf86a723";
};
in
stdenv.mkDerivation {
name = "xen-${version}";
src = fetchurl {
url = "http://bits.xensource.com/oss-xen/release/${version}/xen-${version}.tar.gz";
sha256 = "7d9c93057cf480d3f1efa792b19285a84fa3c06060ea5c5c453be00887389b0d";
};
patches =
[ # Xen looks for headers in /usr/include and for libraries using
# ldconfig. Don't do that.
./has-header.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
# 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
grep -rl /etc/xen * | xargs sed -i 's|/etc/xen|$out/etc/xen|g'
# 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}
'')}
${let src = fetchurl ipxeSrc; in ''
cp ${src} tools/firmware/etherboot/ipxe.tar.gz
''}
# 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 ];
};
}