[Pkg-libvirt-maintainers] Bug#592817: Bug#592817: libvirt-bin: libvirt fails to create openvz domain with "cannot set uuid"

Guido Günther agx at sigxcpu.org
Fri Aug 13 07:25:30 UTC 2010


Hi Eric,
On Thu, Aug 12, 2010 at 05:57:19PM -0700, Eric Litak wrote:
> Package: libvirt-bin
> Version: 0.8.2-1
> Severity: normal
> 
> *** Please type your report below this line ***
> This is probably an upstream bug, but I was told by the libvirt devs to file
> this here first.  OpenVZ operations were completely broken for me. Creating a
I checkd the upstream libvirt list but couldn't find any postings about
that. Could you check if the problem persists in 0.8.3 and if so carry
it upstream? Your patch looks as if the parsing of the vzlist output
fails in a way.
I can setup myself a OpenVZ system to look into this but this would take
some time. It'd be great to have this fixed for Squeeze.
Cheers,
 -- Guido

> domain with virsh or any other method failed in the same way. It would complain
> about not being able to set the UUID, but that was just hiding the real problem.
> 
> You can reproduce this if you install libvirtbin=0.8.2-1 and run "virsh
> create sample.xml" where sample.xml contains:
> <domain type="openvz" id="101">
>  <name>101</name>
>  <memory>0</memory>
>  <currentMemory>0</currentMemory>
>  <vcpu>1</vcpu>
>  <os>
>   <type>exe</type>
>   <init>/sbin/init</init>
>  </os>
>  <clock offset="utc"/>
>  <on_poweroff>destroy</on_poweroff>
>  <on_reboot>destroy</on_reboot>
>  <on_crash>destroy</on_crash>
>  <devices>
>   <filesystem type="template"><source name="abc"/><target
> dir="/"/></filesystem>
>   <interface type="bridge"><source bridge="vmbr0"/></interface>
>  </devices>
> </domain>
> 
> This worked in 0.6.5 and then regressed beyond that release. I hadn't time to
> debug it back when I found it. I'm not sure how this went unnoticed for so long.
> I had a lot of difficulty debugging this because the errors printed are somewhat
> misleading. The real problem is that neither the id nor name is used to pick the
> conf file name as it was in 0.6.5. Instead, new code was added to find the
> lowest unused ID. With this input, libvirt creates /etc/vz/conf/100.conf for
> this container with ID 101. Later on during the "create" command, it tries to
> set the UUID of this container and fails to load it's configuration because it's
> looking for the wrong file. Here's my patch that excises the changes that caused
> the regressions:
> 
> 
> diff -ur src/openvz/openvz_driver.c.old src/openvz/openvz_driver.c
> --- libvirt-0.8.2/src//openvz/openvz_driver.c   2010-06-29
> 01:54:08.000000000 -0700
> +++ ../src/openvz/openvz_driver.c       2010-08-12 15:43:14.000000000 -0700
> @@ -103,10 +103,6 @@
>                        int maxarg, virDomainDefPtr vmdef)
>  {
>      int narg;
> -    int veid;
> -    int max_veid;
> -    char str_id[10];
> -    FILE *fp;
> 
>      for (narg = 0; narg < maxarg; narg++)
>          args[narg] = NULL;
> @@ -135,36 +131,7 @@
>      ADD_ARG_LIT(VZCTL);
>      ADD_ARG_LIT("--quiet");
>      ADD_ARG_LIT("create");
> -
> -    if ((fp = popen(VZLIST " -a -ovpsid -H 2>/dev/null", "r")) == NULL) {
> -        openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                    _("popen  failed"));
> -        return -1;
> -    }
> -    max_veid = 0;
> -    while (!feof(fp)) {
> -        if (fscanf(fp, "%d\n", &veid) != 1) {
> -            if (feof(fp))
> -                break;
> -
> -            openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                        _("Failed to parse vzlist output"));
> -            goto cleanup;
> -        }
> -        if (veid > max_veid) {
> -            max_veid = veid;
> -        }
> -    }
> -    fclose(fp);
> -
> -    if (max_veid == 0) {
> -        max_veid = 100;
> -    } else {
> -        max_veid++;
> -    }
> -
> -    sprintf(str_id, "%d", max_veid);
> -    ADD_ARG_LIT(str_id);
> +    ADD_ARG_LIT(vmdef->name);
> 
>      ADD_ARG_LIT("--name");
>      ADD_ARG_LIT(vmdef->name);
> @@ -188,11 +155,6 @@
>      openvzError(VIR_ERR_INTERNAL_ERROR,
>                  _("Could not put argument to %s"), VZCTL);
>      return -1;
> -
> -cleanup:
> -    fclose(fp);
> -    return -1;
> -
>  #undef ADD_ARG
>  #undef ADD_ARG_LIT
>  }
> 
> This is not the best solution. the "id" attribute is what should be used rather
> than the "name" element. Well, the bigger problem is that buried in the code
> elsewhere is the logic that's supposed to be able to find domain id 101 even if
> it's in file 100.conf that's broken. I didn't even try to find that because it
> didn't make sense to me to ever store ctid 101 in 100.conf, especially when I
> name the container 101 and give id=101. I think OpenVZ support needs a lot of
> work anyway, but that's for the devs to decide.
> 
> Again, this is probably for the upstream authors. I will file this again with
> them if you agree or I don't get any response after some time.
> 
> -- System Information:
> Debian Release: squeeze/sid
>   APT prefers testing
>   APT policy: (990, 'testing')
> Architecture: amd64 (x86_64)
> 
> Kernel: Linux 2.6.32-5-openvz-amd64 (SMP w/2 CPU cores)
> Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
> Shell: /bin/sh linked to /bin/dash
> 
> Versions of packages libvirt-bin depends on:
> ii  adduser                   3.112          add and remove users and groups
> ii  libavahi-client3          0.6.26-1       Avahi client library
> ii  libavahi-common3          0.6.26-1       Avahi common library
> ii  libblkid1                 2.17.2-3.1     block device id library
> ii  libc6                     2.11.2-2       Embedded GNU C Library: Shared
> lib
> ii  libcap-ng0                0.6.4-1        An alternate posix capabilities
> li
> ii  libdevmapper1.02.1        2:1.02.48-2    The Linux Kernel Device Mapper
> use
> ii  libgcrypt11               1.4.5-2        LGPL Crypto library - runtime
> libr
> ii  libgnutls26               2.8.6-1        the GNU TLS library - runtime
> libr
> ii  libnl1                    1.1-5          library for dealing with
> netlink s
> ii  libparted0debian1         2.3-1          The GNU Parted disk
> partitioning s
> ii  libpciaccess0             0.12.0-1       Generic PCI access library for
> X
> ii  libreadline6              6.1-3          GNU readline and history
> libraries
> ii  libsasl2-2                2.1.23.dfsg1-5 Cyrus SASL - authentication
> abstra
> ii  libudev0                  160-1          libudev shared library
> ii  libuuid1                  2.17.2-3.1     Universally Unique ID library
> ii  libvirt0                  0.8.2-1        library for interfacing with
> diffe
> ii  libxenstore3.0            3.4.0-2        Xenstore communications library
> fo
> ii  libxml2                   2.7.7.dfsg-4   GNOME XML library
> ii  logrotate                 3.7.8-4        Log rotation utility
> 
> Versions of packages libvirt-bin recommends:
> ii  bridge-utils               1.4-5         Utilities for configuring the
> Linu
> ii  dnsmasq-base               2.51-1        A small caching DNS proxy and
> DHCP
> ii  iptables                   1.4.4-2       administration tools for packet
> fi
> pn  libxml2-utils              <none>        (no description available)
> ii  netcat-openbsd             1.89-3        TCP/IP swiss army knife
> ii  qemu                       0.12.5+dfsg-1 fast processor emulator
> 
> Versions of packages libvirt-bin suggests:
> ii  policykit-1                   0.96-2     framework for managing
> administrat
> 
> -- no debconf information

> _______________________________________________
> Pkg-libvirt-maintainers mailing list
> Pkg-libvirt-maintainers at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/pkg-libvirt-maintainers






More information about the Pkg-libvirt-maintainers mailing list