
( Answering my own question ) *Support for macvtap* In a nutshell, Debian Wheezy does not support macvtap due to two reasons: 1. kernel 3.6+ is required, but Wheezy is based on kernel 3.2 2. recent versions of libvirt and qemu are required. In order to solve the trouble, you basically need to pull recent versions of packages linux-image, qemu and libvirt from wheezy-backports. Something like this on an /amd64/ host: $ apt-get install -t wheezy-backports linux-image-/amd64/ qemu-kvm virt-manager I haven't tested this, actually. I've installed Debian Jessie from scratch instead. *Other aspects to consider* You have to double check whether your host supports virtualization. Despite this sounds silly... even if your hardware supports virtualization, eventually you may not have virtualization enabled in your host. In an amd64 host, change IOMMU in grub defaults at //etc/default/grub/, like shown below in *blue*: GRUB_CMDLINE_LINUX_DEFAULT="quiet transparent_hugepage=always elevator=noop *iommu=on,calgary,noaperture*" Then update grub and reboot: $ sudo update-grub $ sudo grub-install /dev/sda (or whatever your harddisk is) $ sudo reboot I hope it helps Richard Gomes http://rgomes.info http://www.linkedin.com/in/rgomes mobile: +44(77)9955-6813 inum <http://www.inum.net/>: +883(5100)0800-9804 sip:rgomes@ippi.fr On 31/01/14 19:06, Richard Gomes wrote:
( Posting again. Correct subject line now! )
Hello,
I'm trying to use macvtap on Debian Wheezy. Actually, I've installed a recent version of libvirt and qemu from Jessie, using wheezy-backports.
$ virsh version Compiled against library: libvirt 1.2.1 Using library: libvirt 1.2.1 Using API: QEMU 1.2.1 Running hypervisor: QEMU 1.7.0
I'm trying to configure a macvtap interface like this:
<interface type='direct'> <mac address='52:54:00:7b:05:cd'/> <source dev='eth1' mode='passthrough'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </interface>
The interface eth1 is used exclusively by this VM, so as far as I understand, mode 'passthrough' is enough since I'd like to "plug" the VM straight onto a public static IP.
On my /etc/networks/interfaces, I have this:
# start :: define eth1 iface eth1 inet manual # end :: define eth1
It does not matter whether eth1 is up or down, when I try to start the VM, I get the following error:
Error starting domain: Cannot create macvlan devices on this platform: Function not implemented
Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 45, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/asyncjob.py", line 66, in tmpcb callback(*args, **kwargs) File "/usr/share/virt-manager/virtManager/domain.py", line 1114, in startup self._backend.create() File "/usr/lib/python2.7/dist-packages/libvirt.py", line 866, in create if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self) libvirtError: Cannot create macvlan devices on this platform: Function not implemented
Trying to solve the issue, I found this: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=737097
I've tried to rebuild the package from Debian sources, but apparently, macvtap is already defined, as I've reported to another mailing list. For your information:
I'm new to building packages from Debian sources, so I followed instructions from
https://wiki.debian.org/HowToPackageForDebian#Building_Debian_packages
$ apt-get -t wheezy-backports source libvirt $ cd libvirt-0.9.12.3/ $ sudo apt-get build-dep libvirt $ debuild -i -us -uc -b
So... yes, it works and builds without any errors.
Next step now is applying the changes mentioned. But I'm confused because /apparently/ debian/rules is already the way it should be.
ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux)) WITH_STORAGE_LVM = --with-storage-lvm WITH_STORAGE_ISCSI = --with-storage-iscsi WITH_STORAGE_DISK = --with-storage-disk WITH_UDEV = --with-udev --without-hal WITH_CAPNG = --with-capng WITH_POLKIT = --with-polkit * WITH_MACVTAP = --with-macvtap** ** WITH_NETWORK = --with-network** * WITH_QEMU = --with-qemu WITH_OPENVZ = --with-openvz WITH_NETCF = --with-netcf ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 i386 ia64 mips mipsel powerpc)) WITH_NUMA = --with-numactl else WITH_NUMA = --without-numactl endif ifneq (,$(findstring $(DEB_HOST_ARCH), ia64)) WITH_LXC = --without-lxc else WITH_LXC = --with-lxc endif else WITH_STORAGE_LVM = --without-storage-lvm WITH_STORAGE_ISCSI = --without-storage-iscsi WITH_STORAGE_DISK = --without-storage-disk WITH_UDEV = --without-udev --with-hal WITH_CAPNG = --without-capng WITH_POLKIT = --without-polkit * WITH_MACVTAP = --without-macvtap** ** WITH_NETWORK = --without-network** * WITH_QEMU = --without-qemu WITH_LXC = --without-lxc WITH_NUMA = --without-numactl WITH_NETCF = --without-netcf endif
I suppose that nothing has to be changed, correct? ... since the _/then/_ branch already has the change mentioned and the _/else/_ branch probably means that nothing related to networking would be enabled anyway.
Am I missing something ?
Thoughts?
Thanks a lot :) -- Richard Gomes http://rgomes.info http://www.linkedin.com/in/rgomes mobile: +44(77)9955-6813 inum <http://www.inum.net/>: +883(5100)0800-9804 sip:rgomes@ippi.fr