# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit eutils linux-mod SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz" DESCRIPTION="KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V)" HOMEPAGE="http://kvm.qumranet.com/kvmwiki" LICENSE="GPL-2" SLOT="0" KEYWORDS="-* ~amd64 ~x86" IUSE="alsa gcc4 kvm qemu" DEPEND=">=media-libs/libsdl-1.2.11 alsa? ( >=media-libs/alsa-lib-1.0.13 ) app-text/texi2html >=sys-fs/e2fsprogs-1.39 sys-libs/zlib" RDEPEND=">=media-libs/libsdl-1.2.11 alsa? ( >=media-libs/alsa-lib-1.0.13 ) sys-libs/zlib >=sys-fs/e2fsprogs-1.39 qemu? ( app-emulation/qemu-softmmu ) !qemu? ( !app-emulation/qemu-softmmu ) dev-lang/python" RESTRICT="nostrip" BUILD_TARGETS="all" QA_TEXTRELS="usr/bin/kvm" QA_EXECSTACK="usr/share/kvm/openbios-sparc32" QA_WX_LOAD="usr/share/kvm/openbios-sparc32" pkg_setup() { if kernel_is lt 2 6 22 && ! use kvm; then eerror "the module in your kernel requires an older version of" eerror "kvm as shown in :" eerror " http://kvm.qumranet.com/kvmwiki/Downloads" die "kvm module not compatible, downgrade kvm or USE='kvm'" fi #Don't continue if the KVM modules can't be found if ! linux_chkconfig_present KVM && ! use kvm; then eerror "kvm modules not found on your kernel" eerror "USE='kvm' or enable the kvm modules" die "kvm modules missing" fi MODULE_NAMES="kvm(misc:${S}/kernel) kvm-intel(misc:${S}/kernel) kvm-amd(misc:${S}/kernel)" if use kvm; then linux-mod_pkg_setup else ewarn "using the kernel provided module" ewarn "some features may only be available in newer releases" fi } src_unpack() { unpack ${A} cd "${S}" epatch ${FILESDIR}/kvm-36-use-alsa.patch epatch ${FILESDIR}/kvm-45-qemu-configure.patch epatch ${FILESDIR}/kvm-45-qemu-kvm.patch epatch ${FILESDIR}/kvm-45-qemu-kvm-doc.patch epatch ${FILESDIR}/kvm-43-qemu-kvm-cmdline.patch epatch ${FILESDIR}/kvm-44-kvm.patch epatch ${FILESDIR}/kvm-43-qemu-ifup.patch epatch ${FILESDIR}/kvm-45-user-no-kernel.patch if use qemu; then epatch ${FILESDIR}/kvm-45-qemu-no-img.patch fi if use gcc4; then epatch ${FILESDIR}/kvm-45-configure-gcc4.patch epatch ${FILESDIR}/kvm-45-qemu-gcc4.patch fi } src_compile() { #fix make install to not install modules sed -i '/$(kcmd)/d' ${WORKDIR}/${P}/Makefile conf_opts="--prefix=/usr" if use alsa; then conf_opts="$conf_opts --enable-alsa" fi if use gcc4; then conf_opts="$conf_opts --disable-gcc-check" fi ./configure ${conf_opts} || die "./configure failed" emake user qemu || die "emake failed" if use kvm; then linux-mod_src_compile fi } src_install() { #fix make install to not install modules sed -i '/$(kcmd)/d' ${WORKDIR}/${P}/Makefile if use kvm; then linux-mod_src_install fi make DESTDIR="${D}" install || die "make install failed" exeinto /etc/kvm/utils/ doexe ${S}/kvm ${S}/kvm_stat mv ${D}/usr/share/man/man1/qemu.1 ${D}/usr/share/man/man1/kvm.1 insinto /etc/udev/rules.d/ doins ${WORKDIR}/${P}/scripts/65-kvm.rules insinto /etc/kvm/ insopts -m0755 doins ${WORKDIR}/${P}/scripts/qemu-ifup doins ${WORKDIR}/${P}/config.mak } pkg_postinst() { if use kvm; then linux-mod_pkg_postinst fi enewgroup kvm elog "If you don't have kvm compiled into the kernel, make sure you have the kernel" elog "module loaded before running kvm. The easiest way to ensure that the kernel " elog "module is loaded is to load it on boot:" elog "For AMD CPUs:" elog "echo kvm-amd >> /etc/modules.autoload.d/kernel-2.6" elog "For Intel CPUs:" elog "echo kvm-intel >> /etc/modules.autoload.d/kernel-2.6" echo elog "Make sure your user is in the 'kvm' group" elog "Just run 'gpasswd -a kvm', then have re-login." echo elog "If qemu complains about not having a 1024hz timer, then run this:" elog "echo dev.rtc.max-user-freq=1024 >> /etc/sysctl.conf" echo elog "If you want network support in the guest OS, you'll need to make" elog "sure you compile in support for 802.1d Ethernet Bridging in the " elog "kernel, set up a bridge network interface and make sure you" elog "compile Universal TUN/TAP device driver support as a kernel module" elog "and make it load on boot:" elog "echo tun >> /etc/modules.autoload.d/kernel-2.6" }