( 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
;: +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