[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt-users] Trouble configuring with macvtap passthrough on Debian Wheezy / Jessie



( 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: +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: +883(5100)0800-9804
sip:rgomes ippi fr



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]