# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit eutils flag-o-matic toolchain-funcs 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 bios gcc4 gnutls kvm qemu sdl" DEPEND="sys-libs/zlib sdl? ( >=media-libs/libsdl-1.2.11 ) alsa? ( >=media-libs/alsa-lib-1.0.13 ) bios? ( sys-devel/dev86 dev-lang/perl sys-power/iasl ) !gcc4? ( amd64? ( =sys-devel/gcc-3.4.6-r2 ) x86? ( = 2.6.17 or use a version" eerror "of kvm older than 37" die "incompatible kernel, downgrade kvm or upgrade kernel" fi if kernel_is lt 2 6 18 && ! linux_chkconfig_present SMP; then eerror "your kernel can only be used if CONFIG_SMP=y" eerror "reconfigure/rebuild or upgrade your kernel" die "incompatible kernel configuration, reconfig or upgrade kernel" fi 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 module not found on your kernel" eerror "USE='kvm' or enable KVM and the kvm module for your CPU" die "kvm module missing in kernel" fi 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}" # fix make install to not install modules sed -i '/$(kcmd)/d' Makefile # prevent docs to get automatically installed sed -i '/$(DESTDIR)$(docdir)/d' qemu/Makefile # avoid strip sed -i 's/$(INSTALL) -m 755 -s/$(INSTALL) -m 755/' qemu/Makefile epatch ${FILESDIR}/kvm-47-configure-qemu.patch epatch ${FILESDIR}/kvm-45-qemu-configure.patch epatch ${FILESDIR}/kvm-45-qemu-kvm.patch epatch ${FILESDIR}/kvm-57-qemu-kvm-doc.patch epatch ${FILESDIR}/kvm-57-qemu-kvm-cmdline.patch epatch ${FILESDIR}/kvm-48-kvm.patch epatch ${FILESDIR}/kvm-43-qemu-ifup.patch epatch ${FILESDIR}/kvm-50-libkvm-no-kernel.patch epatch ${FILESDIR}/kvm-57-qemu-ramaddr.patch epatch ${FILESDIR}/kvm-57-qemu-no-blobs.patch epatch ${FILESDIR}/kvm-56-libkvm-slot.patch epatch ${FILESDIR}/kvm-56-test-strcat.patch epatch ${FILESDIR}/kvm-56-compat-string.patch epatch ${FILESDIR}/kvm-56-compat-noioapic.patch epatch ${FILESDIR}/kvm-57-kernel-longmode.patch epatch ${FILESDIR}/kvm-57-qemu-ide-dvdrom.patch epatch ${FILESDIR}/kvm-57-qemu-merge.patch if use qemu; then epatch ${FILESDIR}/kvm-57-qemu-no-img.patch fi if use gcc4; then epatch ${FILESDIR}/kvm-45-qemu-gcc4.patch fi } src_compile() { local mycc conf_opts="--prefix=/usr" if use kvm; then conf_opts="$conf_opts --kerneldir=\"${KV_DIR}\"" fi if use alsa; then conf_opts="$conf_opts --enable-alsa" fi if ! use gnutls; then conf_opts="$conf_opts --disable-vnc-tls" fi if ! use sdl; then conf_opts="$conf_opts --disable-gfx-check --disable-sdl" fi if use gcc4; then conf_opts="$conf_opts --disable-gcc-check" fi ./configure ${conf_opts} || die "./configure failed" if use bios; then emake bios fi emake libkvm user || die "emake failed" if use kvm; then linux-mod_src_compile fi mycc=$(cat qemu/config-host.mak | egrep "^CC=" | cut -d "=" -f 2) filter-flags -fpie -fstack-protector # If using gentoo's compiler set the SPEC to non-hardened if [ ! -z ${GCC_SPECS} -a -f ${GCC_SPECS} ]; then local myccver=$(${mycc} -dumpversion) local gccver=$($(tc-getBUILD_CC) -dumpversion) #Is this a SPEC for the right compiler version? myspec="${GCC_SPECS/${gccver}/${myccver}}" if [ "${myspec}" == "${GCC_SPECS}" ]; then shopt -s extglob GCC_SPECS="${GCC_SPECS/%hardened*specs/vanilla.specs}" shopt -u extglob else unset GCC_SPECS fi fi emake qemu || die "emake failed" } src_install() { 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 ${S}/scripts/65-kvm.rules insinto /etc/kvm/ insopts -m0755 doins ${S}/scripts/qemu-ifup doins ${S}/config.mak dodoc ${S}/qemu/pc-bios/README dodoc ${S}/qemu/qemu-doc.html ${S}/qemu/qemu-tech.html } 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 "You will need the Universal TUN/TAP driver compiled into your" elog "kernel or loaded as a module to use the virtual network device" elog "if using -net tap. You will also need support for 802.1d" elog "Ethernet Bridging and a configured bridge if using the provided" elog "qemu-ifup script from /etc/kvm." echo elog "To load the module at boot:" elog "echo tun >> /etc/modules.autoload.d/kernel-2.6" }