[libvirt] libvirt-0.3.3-14.el5 (redhat rpm) vs libvirt-0.6.5 (source)
by Jim Bergensen
Hello everyone,
I am looking to write a simple php interface to create, stop, start,
restart, configure, backup, transfer VM's across a network of servers.
Storage is done locally on the particular node (lvm), but I am considering
to do this through iscsi in the future. Xen, KVM, IP management, firewalling
is an important requirement.
The redhat backport version looks outdated, but I know the version number
isn't the best way to compare features.
My questions are:
- Featurewise, is the difference between the redhat version and the
libvirt.org source version small or as big as it looks (branch versions?)
- Considering the above functions I am going to need, will the redhat
version suffice?
Any help would be truely appreciated,
Thank you,
Jim
15 years, 2 months
[Fwd: Re: [libvirt] Release of libvirt-0.7.0]
by Robert L Cochran
Ooops! I sent this to Dan when I meant to send it to the list.
To be a bit repetitive...how do I get this for Fedora 11 -- and all of
its dependencies?
Thanks
Bob
-------- Original Message --------
Subject: Re: [libvirt] Release of libvirt-0.7.0
Date: Wed, 05 Aug 2009 16:37:09 -0400
From: Robert L Cochran <cochranb(a)speakeasy.net>
To: veillard(a)redhat.com
How do I get this for Fedora 11 -- and all of its dependencies?
Thanks a lot!
Bob
On 08/05/2009 11:15 AM, Daniel Veillard wrote:
> A couple days later than expected, but considering the current
> flow of fixes, that's not a bad thing. This is a huge release,
> this includes more than 250 commits in a month and many new
> functionalities or drivers, and a lot of improvements and bug fixes:
>
> New features:
> - Interface implementation based on netcf (Laine Stump Daniel Veillard)
> - Add new net filesystem glusterfs (Harshavardhana)
> - Initial VMWare ESX driver (Matthias Bolte)
> - Add support for VBox 3 and event callbacks on vbox (Pritesh Kothari)
> - First version of the Power Hypervisor driver (Eduardo Otubo)
> - Run QEMU guests as an unprivileged user (Daniel P. Berrange)
> - Support cgroups in QEMU driver (Daniel P. Berrange)
> - QEmu hotplug NIC support (Mark McLoughlin)
> - Storage cloning for LVM and Disk backends(Cole Robinson)
> - Switching to GIT (Jim Meyering)
>
> Documentation:
> - Typo and comment fixes (Aron Griffis)
> - Fix virCapabilitiesDefaultGuestMachine documentation. (Chris Lalancette)
> - ESX Scheduler documentation and cleanup (Matthias Bolte)
> - Update the java bindings page (Bryan Kearney)
> - Added Matthias Bolte to AUTHORS list (Daniel Veillard)
> - doc: clone+build instructions (Jim Meyering)
> - docs: say that the old repository is deprecated... (Jim Meyering)
> - document tcp listen and raw wire option (Guido Günther)
> - Fix docs and code disagreements for character devices. (Cole Robinson)
> - Fix documentation of virStoragePoolUndefine return (Thomas Treutner)
> - Fix gitweb link on download page. (Cole Robinson)
> - update download informations after switch to git (Daniel Veillard)
> - Update links to bugzilla (Garry Dolley)
> - Update the links for RHEL libvirt bugzillas (Garry Dolley)
>
> Portability:
> - Xen Inotify support needs sys/inotify.h (Maximilian Wilhelm)
> - Workaround for broken GCC in Debian Etch (Maximilian Wilhelm)
> - LXC driver requires sched.h and unshare() (Maximilian Wilhelm)
> - Configure UML support only if sys/inotify.h present (Maximilian Wilhelm)
> - Fix libcurl automatic check and ESX status (Maximilian Wilhelm)
> - Enable ESX driver build on Mingw32 (Daniel P. Berrange)
> - Fix build on mingw32 by disabling netcf (Daniel P. Berrange)
> - Reduce glusterfs dependency to 2.0.1 (Mark McLoughlin)
> - Desactivate phyp build and indicate libssh builreq (Daniel Veillard)
> - Fix misc Win32 compile warnings (Daniel P. Berrange)
> - Rename variable for compilation in Mingw32 (end) (Laine Stump)
> - Rename variable for compilation in Mingw32 (Laine Stump)
> - rpm spec cleanup and split off client only package (Daniel Veillard)
>
> Bug fixes:
> - Add uniqueness checking for LXC define/create methods (Daniel P. Berrange)
> - Fix removal of transient VMs when LXC aborts (Daniel P. Berrange)
> - Don't try to activate cgroups if not present for LXC (Daniel P. Berrange)
> - Refresh /etc/xen if inotify wasn't (Cole Robinson)
> - Don't loose id on xen domain redefine (Cole Robinson)
> - Fix memory leak in openvz driver (Daniel P. Berrange)
> - Protected against potential crash scenarios (Daniel P. Berrange)
> - Fix crash when attempting to shutdown inactive QEMU vm (Daniel P. Berrange)
> - Fix PCIe FLR detection (Mark McLoughlin)
> - Set perms on /var/lib/libvirt/images to 0711 (Mark McLoughlin)
> - Fix problem writing QEMU pidfile (Daniel P. Berrange)
> - Fix vcpupin on Xen problem (Henrik Persson)
> - Fix RPM upgrades from F11 to F12 (Daniel P. Berrange)
> - Fix deadlock in remote driver domain events (Daniel P. Berrange)
> - qemu: fix monitor socket reconnection (Ryota Ozaki)
> - Fix polkit/netcf disabling on older fedoras (Mark McLoughlin)
> - Fix crashes in Xen capabilities code (Daniel P. Berrange)
> - Always add -no-kvm and -no-kqemu, for qemu domains (Jim Paris)
> - Avoid raising an internal error (Paolo Bonzini)
> - Don't allow NULL paths for BlockStats and InterfaceStats (Cole Robinson)
> - Don't leak vm->monitorpath on re-connect (Mark McLoughlin)
> - Don't restore labels on shared/readonly disks (Daniel P. Berrange)
> - Ensure spawned children have a stderr/out set to /dev/null if requested (Daniel P. Berrange)
> - Ensure test:/// URIs get routed to the non-privileged libvirtd (Daniel P. Berrange)
> - fix another failing "make distcheck" (qemuhelptest) (Jim Meyering)
> - Fix an uninitialized variable in Unix socket open (Jun Koi)
> - Fix configure flags in spec file (Daniel Veillard)
> - Fix error reporting for security driver over remote protocol (Daniel P. Berrange)
> - fix failing "make distcheck" (Jim Meyering)
> - Fix free of unitialized data upon PCI open fail (Daniel P. Berrange)
> - Fix informations about previous git server (Daniel Veillard)
> - Fix memory leaks in esxDomainDumpXML (Matthias Bolte)
> - Fix multiple memory leaks in virsh (Laine Stump)
> - Fix PCI device hotplug/unplug with newer QEMU (Daniel P. Berrange)
> - Fix problem with QEMU monitor welcome prompt confusing libvirt after a libvirtd daemon restart with active guests (Daniel P. Berrange)
> - Fix python examples to use read-write conn (Dan Kenigsberg)
> - Fix reconnect bug for VBox (Pritesh Kothari)
> - Fix SELinux denial during hotplug (Daniel P. Berrange)
> - Fix typo in check for glusterfs format pools (Daniel P. Berrange)
> - Fix typo in storage cloning (Daniel P. Berrange)
> - qemu: Check driver is initialized up front, to avoid segfault. (Cole Robinson)
> - qemu: Try multiple times to open unix monitor socket (Cole Robinson)
> - Release conn lock before reporting errors (end) (Laine Stump)
> - Release conn lock before reporting interface errors (Laine Stump)
> - Remove the network backend if NIC hotplug fails (Mark McLoughlin)
> - Set specific flags for glusterfs fs mounts (Harshavardhana)
> - storage: disk: Default to 'ext2' for new volumes. (Cole Robinson)
> - storage: disk: Fix parthelper '-g' option handling. (Cole Robinson)
> - storage: disk: Fix segfault creating volume without target path (Cole Robinson)
> - storage: Fix deadlock when cloning across pools. (Cole Robinson)
> - Update modified mac address in place in virGetInterface (Laine Stump)
>
> Improvements:
> - Add an allocation unit when calling qemu-img (Ryota Ozaki)
> - Improve diagnostics when pidfile writing fails (Daniel P. Berrange)
> - Disable IPv6 on virtual networks (Daniel P. Berrange)
> - Allow dnsmasq to provide DNS without DHCP (Daniel P. Berrange)
> - Fix an initialization problem in previous patch (Aron Griffis)
> - Remove MAX_TAP_ID and let kernel do numbering (Aron Griffis)
> - Kernel command line support for UML (Ron Yorston)
> - Activate the interface drivers, and cleanups (Daniel Veillard)
> - Add an error code for conflicting mac addresses (Laine Stump)
> - Add a test interface driver (Laine Stump)
> - Add canonical machine name to capabilities output (Mark McLoughlin)
> - add cd and pwd commands to virsh (Paolo Bonzini)
> - Add checks for some NIC hotplug related features added in qemu-0.10.0 (Mark McLoughlin)
> - Add domain autostart for LXC driver (Daniel P. Berrange)
> - Add domain events support to LXC driver (Daniel P. Berrange)
> - Add interface object list manipulation functions (Laine Stump)
> - Add internal XML parsing/formatting flag (Mark McLoughlin)
> - Add netcf XML schemas and test data (Daniel Veillard)
> - Add new net filesystem glusterfs (Harshavardhana)
> - Add NIC and hostnet names to domain state XML (Mark McLoughlin)
> - Add no_verify query parameter to ESX URIs (Matthias Bolte)
> - Add SCM_RIGHTS support to QEMU monitor code (Mark McLoughlin)
> - Add support for attaching network/bridge NICs in QEMU driver (Mark McLoughlin)
> - add support for netcf XML import and export (Daniel Veillard)
> - Add support for network device detach (Mark McLoughlin)
> - Add support for physical memory access for QEmu (Nguyen Anh Quynh)
> - Add support for VBox 3 and event callbacks on vbox (Pritesh Kothari)
> - Add the monitor type to the domain state XML (Mark McLoughlin)
> - Add virCapsGuestMachine structure (Mark McLoughlin)
> - Add virsh commands for network interface management (Laine Stump)
> - Allow autostart of libvirtd to be disabled with LIBVIRT_AUTOSTART=0 (Daniel P. Berrange)
> - Allow leading dots in VMX config entry names (Matthias Bolte)
> - Assign names to qemu NICs and network backends (Mark McLoughlin)
> - Basic qemu NIC hotplug support (Mark McLoughlin)
> - build: adjust aclocal's search patch to prefer gnulib's m4 files. (Jim Meyering)
> - build: automatically rerun ./bootstrap when needed (Jim Meyering)
> - build: make autogen.sh use autoreconf -if (Jim Meyering)
> - build: submodule machinery now works also when no tag is reachable (Jim Meyering)
> - Canonicalize qemu machine types (Mark McLoughlin)
> - Change code generator to give async event messages their own postfix (Daniel P. Berrange)
> - Change the way client event loop watches are managed (Daniel P. Berrange)
> - Decode incoming request header before invoking dispatch code (Daniel P. Berrange)
> - Define an API for registering incoming message dispatch filters (Daniel P. Berrange)
> - ESX driver accept VI API version 4.0 (Matthias Bolte)
> - Fill in vCPU<-> pCPU current mapping, and vCPU cpuTime for QEMU (Daniel P. Berrange)
> - generate ChangeLog from git logs into distribution tarball (Jim Meyering)
> - Implement qemu dump capabilities (Paolo Bonzini)
> - Implement schedular tunables API using cgroups (Daniel P. Berrange)
> - Implement the new virinterface functions (Laine Stump)
> - Make cgroups a little more efficient (Daniel P. Berrange)
> - Make it easier to debug tests running programs (Daniel P. Berrange)
> - Make qemuBuildHostNetStr() take tapfd as a string (Mark McLoughlin)
> - Make QEMU cgroups use configurable (Daniel P. Berrange)
> - Make qemuCmdFlags available in qemudDomainAttachDevice() (Mark McLoughlin)
> - Move queuing of RPC replies into dispatch code (Daniel P. Berrange)
> - Move vnet_hdr logic into qemudNetworkIfaceConnect() and export it (Mark McLoughlin)
> - Netcf based interface driver implementation (Laine Stump)
> - netcf XML validation and input and output tests (Daniel Veillard)
> - Only probe qemu for machine types when binary changes (Mark McLoughlin)
> - Place every QEMU guest in a private cgroup (Daniel P. Berrange)
> - Probe for QEMU machine types (Mark McLoughlin)
> - Probe QEMU directly for machine aliases if not found in capabilties (Mark McLoughlin)
> - Public API for new virInterface functions (Laine Stump)
> - python: Raise exceptions if virDomain*Stats fail. (Cole Robinson)
> - Refactor cgroups to allow a group per driver to be managed directly (Daniel P. Berrange)
> - Re-factor pci_add reply parsing and parse domain/bus numbers (Mark McLoughlin)
> - Retain disk PCI address across libvirtd restarts (Mark McLoughlin)
> - Retain PCI address from NIC attach (Mark McLoughlin)
> - Run QEMU guests as an unprivileged user (Daniel P. Berrange)
> - Separate code for encoding outgoing remote message headers (Daniel P. Berrange)
> - Split generic RPC message dispatch code out from remote protocol API handlers (Daniel P. Berrange)
> - Split out code for handling incoming method call messages (Daniel P. Berrange)
> - storage: Break out actual raw cloning to separate function. (Cole Robinson)
> - storage: cleanup: do away with 'createFile' (Cole Robinson)
> - storage: disk: Use capacity, not allocation, when creating volume. (Cole Robinson)
> - storage: Don't try sparse detection if writing to block device. (Cole Robinson)
> - storage: Implement 'CreateBlockFrom' helper. (Cole Robinson)
> - storage: Implement CreateVolFrom for logical and disk backend. (Cole Robinson)
> - storage: Move most of the FS creation functions to common backend. (Cole Robinson)
> - storage: Refactor FS backend 'create' function choosing. (Cole Robinson)
> - Store the interface vlan number in the domain state (Mark McLoughlin)
> - Support<video> element for QEMU guests (Daniel P. Berrange)
> - Support<video> tag for defining VGA card properties (Daniel P. Berrange)
> - Switch to using a unix socket for the qemu monitor (Mark McLoughlin)
> - test: Generate net interface names when assigning XML. (Cole Robinson)
> - test: Implement BlockStats and InterfaceStats (Cole Robinson)
> - Use cgroups for block device whitelisting in QEMU guests (Daniel P. Berrange)
> - Use enums for cgroup controller types / labels (Daniel P. Berrange)
> - Use sendmsg() on QEMU monitor socket (Mark McLoughlin)
> - Use virDomainChrTypeFromString() instead of open coding (Mark McLoughlin)
> - Use virFileReadAll/virFileWriteStr for key cgroup read/write helpers (Daniel P. Berrange)
> - virGetinterface matching of MAC and interface name (Laine Stump)
>
> Cleanups:
> - Fix configure checks from previous commits (Daniel P. Berrange)
> - Avoid a warning if compiling without inotify (Daniel P. Berrange)
> - Remove a stray semicolon (Daniel Veillard)
> - Extend the ESX URL to habdle ports and GSX (Matthias Bolte)
> - Fix escaping of 8-bit high characters (Daniel P. Berrange)
> - Remove ATTRIBUTE_UNUSED from flags to qemudDomainMigratePerform. (Chris Lalancette)
> - Add a comment about setting errors after qemudStartVMDaemon(). (Chris Lalancette)
> - Fix an erroneous debug error to KVM; it should read QEMU/KVM. (Chris Lalancette)
> - Remove a stray semicolon in qemudDomainMigratePrepare2. (Chris Lalancette)
> - Convert a few stray users of free() in libvirt.c to VIR_FREE(). (Chris Lalancette)
> - Use virGetHostname instead of gethostname. (Chris Lalancette)
> - Fix up a minor indentation issue with virDomainMigratePrepare. (Chris Lalancette)
> - Fix up a silly typo in apibuild.py. (Chris Lalancette)
> - Avoid warning when compiling without IFF_VNET_HDR (Maximilian Wilhelm)
> - Capilize libvirt-client summary (Mark McLoughlin)
> - Move ldconfig calls to libvirt-client %post/%postun (Mark McLoughlin)
> - Convert NEWS to UTF-8 (Mark McLoughlin)
> - Fix trailing whitespace in NEWS (Mark McLoughlin)
> - No need to build require both python-devel and python (Mark McLoughlin)
> - Remove executable perms from /etc/sysconfig/libvirtd (Mark McLoughlin)
> - Use a %postun -p for one line scriptlet (Mark McLoughlin)
> - Don't explicitly require libxml2 (Mark McLoughlin)
> - Fix some unowned directories (Mark McLoughlin)
> - Kill qemu BuildRequires (Mark McLoughlin)
> - Enable netcf by default (Mark McLoughlin)
> - Default to with_polkit (Mark McLoughlin)
> - Make vbox support configurable (Mark McLoughlin)
> - Build with --without-capng if capng is disabled (Mark McLoughlin)
> - BuildRequires libcap-ng-devel not capng-devel (Mark McLoughlin)
> - Drop curl host check when using ESX without check (Shahar Klein)
> - Fix typo in xen capabilities code (Daniel P. Berrange)
> - Add bare format string to printf-derivatives troubles (Laine Stump)
> - Add phyp files to POTFILES, to make syntax-check happy. (Cole Robinson)
> - avoid a make distcheck failure: distribute docs/schemas/interface.rng (Jim Meyering)
> - avoid a make distcheck failure: distribute tests/interfaceschemadata/ (Jim Meyering)
> - avoid a "make syntax-check" failure (Jim Meyering)
> - build: do not emit a trailing blank line into VC'd file, NEWS (Jim Meyering)
> - build: update from gnulib, for latest maint.mk (Jim Meyering)
> - Clean up error handling in qemudDomainAttachNetDevice() (Mark McLoughlin)
> - Cleanup qemu binary detection logic in qemudCapsInitGuest() (Mark McLoughlin)
> - Commit newly generated docs, after changes from commit 2348cf. (Cole Robinson)
> - Factor qemuBuildHostNetStr() out from qemuBuildCommandLine() (Mark McLoughlin)
> - Factor qemuBuildNicStr() out from qemuBuildCommandLine() (Mark McLoughlin)
> - Factor qemudMonitorSend() out of qemudMonitorCommandExtra() (Mark McLoughlin)
> - Fix cgroup compile warnings (Daniel P. Berrange)
> - Fix misc build problems due to new drivers (Daniel P. Berrange)
> - Fix wierd build problems due to autopoint overwriting gnulib m4 (Daniel P. Berrange)
> - Makefile.cfg: Rename to... (Jim Meyering)
> - make .gnulib a submodule (Jim Meyering)
> - make "make syntax-check" consistent with "git diff --check" (Jim Meyering)
> - Minor qemu monitor coding style fixes (Mark McLoughlin)
> - Prepare to use maint.mk from gnulib (Jim Meyering)
> - Refactor incoming message handling to prepare for data stream support (Daniel P. Berrange)
> - Refactor message sending to allow code reuse for data streams (Daniel P. Berrange)
> - remove all .cvsignore files (Jim Meyering)
> - remove all trailing blank lines (Jim Meyering)
> - Remove some unused variables and cut long lines (Daniel Veillard)
> - Remove trailing blank lines (Daniel Veillard)
> - Rename a bunch of internal methods to clarify their meaning (Daniel P. Berrange)
> - Rename 'direction' to 'type' in remote_message_header (Daniel P. Berrange)
> - Report the object name on lookup error (Daniel Veillard)
> - Simplify remote driver error reporting (Daniel P. Berrange)
> - skip some of gnulib's new rules (Jim Meyering)
> - use automake-1.11's silent-rules option, when possible (Jim Meyering)
> - use gnumakefile and maintainer-makefile modules from gnulib (Jim Meyering)
>
>
> It's also good to see a lot of new contributors in this release,
> so thanks to everybody !
>
> Daniel
>
>
15 years, 2 months
[libvirt] running with UID != 0: internal error about bridged network
by Harald Dunkel
Hi folks,
I would like to avoid running the virtual hosts with UID=0.
But if I try to create a new virtual machine without being
root, then it fails with
% name=Lenny_amd64
% kvmdir=/local/kvm
% mkdir -p $kvmdir/$name
% qemu-img create -f qcow2 $kvmdir/$name/hda.qcow2 32G
Formatting '/local/kvm/Lenny_amd64/hda.qcow2', fmt=qcow2, size=33554432 kB
% virt-install --connect=qemu:///session -n $name -r 1024 -vcpus=1 -f $kvmdir/$name/hda.qcow2 --network=bridge:br0 --vnc --accelerate -v -c /usr/local/source/hdunkel/debian-502-i386-netinst.iso --os-type=linux --os-variant=debianLenny
14:18:35.586: warning : Cannot set group when not running as root
14:18:35.757: error : Domain not found: no domain with matching name 'Lenny_amd64'
libvir: QEMU error : Domain not found: no domain with matching name 'Lenny_amd64'
The log file shows
[Wed, 05 Aug 2009 14:18:35 virt-install 14229] ERROR (virt-install:786) internal error Failed to add tap interface 'vnet%d' to bridge 'br0' : Operation not permitted
Traceback (most recent call last):
File "/usr/bin/virt-install", line 780, in <module>
main()
File "/usr/bin/virt-install", line 678, in main
start_time, guest.start_install)
File "/usr/bin/virt-install", line 733, in do_install
dom = install_func(conscb, progresscb, wait=(not wait))
File "/var/lib/python-support/python2.5/virtinst/Guest.py", line 541, in start_install
return self._do_install(consolecb, meter, removeOld, wait)
File "/var/lib/python-support/python2.5/virtinst/Guest.py", line 633, in _do_install
self.domain = self.conn.createLinux(install_xml, 0)
File "/usr/lib/python2.5/site-packages/libvirt.py", line 892, in createLinux
if ret is None:raise libvirtError('virDomainCreateLinux() failed', conn=self)
libvirtError: internal error Failed to add tap interface 'vnet%d' to bridge 'br0' : Operation not permitted
Of course an unprivileged user is not allowed to mess around
with the network interfaces, but since it says "internal error"
I wonder how this is supposed to work? Is there something
misconfigured?
Any helpful comments would be highly appreciated
Harri
15 years, 2 months
[libvirt] Release of libvirt-0.7.0
by Daniel Veillard
A couple days later than expected, but considering the current
flow of fixes, that's not a bad thing. This is a huge release,
this includes more than 250 commits in a month and many new
functionalities or drivers, and a lot of improvements and bug fixes:
New features:
- Interface implementation based on netcf (Laine Stump Daniel Veillard)
- Add new net filesystem glusterfs (Harshavardhana)
- Initial VMWare ESX driver (Matthias Bolte)
- Add support for VBox 3 and event callbacks on vbox (Pritesh Kothari)
- First version of the Power Hypervisor driver (Eduardo Otubo)
- Run QEMU guests as an unprivileged user (Daniel P. Berrange)
- Support cgroups in QEMU driver (Daniel P. Berrange)
- QEmu hotplug NIC support (Mark McLoughlin)
- Storage cloning for LVM and Disk backends(Cole Robinson)
- Switching to GIT (Jim Meyering)
Documentation:
- Typo and comment fixes (Aron Griffis)
- Fix virCapabilitiesDefaultGuestMachine documentation. (Chris Lalancette)
- ESX Scheduler documentation and cleanup (Matthias Bolte)
- Update the java bindings page (Bryan Kearney)
- Added Matthias Bolte to AUTHORS list (Daniel Veillard)
- doc: clone+build instructions (Jim Meyering)
- docs: say that the old repository is deprecated... (Jim Meyering)
- document tcp listen and raw wire option (Guido Günther)
- Fix docs and code disagreements for character devices. (Cole Robinson)
- Fix documentation of virStoragePoolUndefine return (Thomas Treutner)
- Fix gitweb link on download page. (Cole Robinson)
- update download informations after switch to git (Daniel Veillard)
- Update links to bugzilla (Garry Dolley)
- Update the links for RHEL libvirt bugzillas (Garry Dolley)
Portability:
- Xen Inotify support needs sys/inotify.h (Maximilian Wilhelm)
- Workaround for broken GCC in Debian Etch (Maximilian Wilhelm)
- LXC driver requires sched.h and unshare() (Maximilian Wilhelm)
- Configure UML support only if sys/inotify.h present (Maximilian Wilhelm)
- Fix libcurl automatic check and ESX status (Maximilian Wilhelm)
- Enable ESX driver build on Mingw32 (Daniel P. Berrange)
- Fix build on mingw32 by disabling netcf (Daniel P. Berrange)
- Reduce glusterfs dependency to 2.0.1 (Mark McLoughlin)
- Desactivate phyp build and indicate libssh builreq (Daniel Veillard)
- Fix misc Win32 compile warnings (Daniel P. Berrange)
- Rename variable for compilation in Mingw32 (end) (Laine Stump)
- Rename variable for compilation in Mingw32 (Laine Stump)
- rpm spec cleanup and split off client only package (Daniel Veillard)
Bug fixes:
- Add uniqueness checking for LXC define/create methods (Daniel P. Berrange)
- Fix removal of transient VMs when LXC aborts (Daniel P. Berrange)
- Don't try to activate cgroups if not present for LXC (Daniel P. Berrange)
- Refresh /etc/xen if inotify wasn't (Cole Robinson)
- Don't loose id on xen domain redefine (Cole Robinson)
- Fix memory leak in openvz driver (Daniel P. Berrange)
- Protected against potential crash scenarios (Daniel P. Berrange)
- Fix crash when attempting to shutdown inactive QEMU vm (Daniel P. Berrange)
- Fix PCIe FLR detection (Mark McLoughlin)
- Set perms on /var/lib/libvirt/images to 0711 (Mark McLoughlin)
- Fix problem writing QEMU pidfile (Daniel P. Berrange)
- Fix vcpupin on Xen problem (Henrik Persson)
- Fix RPM upgrades from F11 to F12 (Daniel P. Berrange)
- Fix deadlock in remote driver domain events (Daniel P. Berrange)
- qemu: fix monitor socket reconnection (Ryota Ozaki)
- Fix polkit/netcf disabling on older fedoras (Mark McLoughlin)
- Fix crashes in Xen capabilities code (Daniel P. Berrange)
- Always add -no-kvm and -no-kqemu, for qemu domains (Jim Paris)
- Avoid raising an internal error (Paolo Bonzini)
- Don't allow NULL paths for BlockStats and InterfaceStats (Cole Robinson)
- Don't leak vm->monitorpath on re-connect (Mark McLoughlin)
- Don't restore labels on shared/readonly disks (Daniel P. Berrange)
- Ensure spawned children have a stderr/out set to /dev/null if requested (Daniel P. Berrange)
- Ensure test:/// URIs get routed to the non-privileged libvirtd (Daniel P. Berrange)
- fix another failing "make distcheck" (qemuhelptest) (Jim Meyering)
- Fix an uninitialized variable in Unix socket open (Jun Koi)
- Fix configure flags in spec file (Daniel Veillard)
- Fix error reporting for security driver over remote protocol (Daniel P. Berrange)
- fix failing "make distcheck" (Jim Meyering)
- Fix free of unitialized data upon PCI open fail (Daniel P. Berrange)
- Fix informations about previous git server (Daniel Veillard)
- Fix memory leaks in esxDomainDumpXML (Matthias Bolte)
- Fix multiple memory leaks in virsh (Laine Stump)
- Fix PCI device hotplug/unplug with newer QEMU (Daniel P. Berrange)
- Fix problem with QEMU monitor welcome prompt confusing libvirt after a libvirtd daemon restart with active guests (Daniel P. Berrange)
- Fix python examples to use read-write conn (Dan Kenigsberg)
- Fix reconnect bug for VBox (Pritesh Kothari)
- Fix SELinux denial during hotplug (Daniel P. Berrange)
- Fix typo in check for glusterfs format pools (Daniel P. Berrange)
- Fix typo in storage cloning (Daniel P. Berrange)
- qemu: Check driver is initialized up front, to avoid segfault. (Cole Robinson)
- qemu: Try multiple times to open unix monitor socket (Cole Robinson)
- Release conn lock before reporting errors (end) (Laine Stump)
- Release conn lock before reporting interface errors (Laine Stump)
- Remove the network backend if NIC hotplug fails (Mark McLoughlin)
- Set specific flags for glusterfs fs mounts (Harshavardhana)
- storage: disk: Default to 'ext2' for new volumes. (Cole Robinson)
- storage: disk: Fix parthelper '-g' option handling. (Cole Robinson)
- storage: disk: Fix segfault creating volume without target path (Cole Robinson)
- storage: Fix deadlock when cloning across pools. (Cole Robinson)
- Update modified mac address in place in virGetInterface (Laine Stump)
Improvements:
- Add an allocation unit when calling qemu-img (Ryota Ozaki)
- Improve diagnostics when pidfile writing fails (Daniel P. Berrange)
- Disable IPv6 on virtual networks (Daniel P. Berrange)
- Allow dnsmasq to provide DNS without DHCP (Daniel P. Berrange)
- Fix an initialization problem in previous patch (Aron Griffis)
- Remove MAX_TAP_ID and let kernel do numbering (Aron Griffis)
- Kernel command line support for UML (Ron Yorston)
- Activate the interface drivers, and cleanups (Daniel Veillard)
- Add an error code for conflicting mac addresses (Laine Stump)
- Add a test interface driver (Laine Stump)
- Add canonical machine name to capabilities output (Mark McLoughlin)
- add cd and pwd commands to virsh (Paolo Bonzini)
- Add checks for some NIC hotplug related features added in qemu-0.10.0 (Mark McLoughlin)
- Add domain autostart for LXC driver (Daniel P. Berrange)
- Add domain events support to LXC driver (Daniel P. Berrange)
- Add interface object list manipulation functions (Laine Stump)
- Add internal XML parsing/formatting flag (Mark McLoughlin)
- Add netcf XML schemas and test data (Daniel Veillard)
- Add new net filesystem glusterfs (Harshavardhana)
- Add NIC and hostnet names to domain state XML (Mark McLoughlin)
- Add no_verify query parameter to ESX URIs (Matthias Bolte)
- Add SCM_RIGHTS support to QEMU monitor code (Mark McLoughlin)
- Add support for attaching network/bridge NICs in QEMU driver (Mark McLoughlin)
- add support for netcf XML import and export (Daniel Veillard)
- Add support for network device detach (Mark McLoughlin)
- Add support for physical memory access for QEmu (Nguyen Anh Quynh)
- Add support for VBox 3 and event callbacks on vbox (Pritesh Kothari)
- Add the monitor type to the domain state XML (Mark McLoughlin)
- Add virCapsGuestMachine structure (Mark McLoughlin)
- Add virsh commands for network interface management (Laine Stump)
- Allow autostart of libvirtd to be disabled with LIBVIRT_AUTOSTART=0 (Daniel P. Berrange)
- Allow leading dots in VMX config entry names (Matthias Bolte)
- Assign names to qemu NICs and network backends (Mark McLoughlin)
- Basic qemu NIC hotplug support (Mark McLoughlin)
- build: adjust aclocal's search patch to prefer gnulib's m4 files. (Jim Meyering)
- build: automatically rerun ./bootstrap when needed (Jim Meyering)
- build: make autogen.sh use autoreconf -if (Jim Meyering)
- build: submodule machinery now works also when no tag is reachable (Jim Meyering)
- Canonicalize qemu machine types (Mark McLoughlin)
- Change code generator to give async event messages their own postfix (Daniel P. Berrange)
- Change the way client event loop watches are managed (Daniel P. Berrange)
- Decode incoming request header before invoking dispatch code (Daniel P. Berrange)
- Define an API for registering incoming message dispatch filters (Daniel P. Berrange)
- ESX driver accept VI API version 4.0 (Matthias Bolte)
- Fill in vCPU <-> pCPU current mapping, and vCPU cpuTime for QEMU (Daniel P. Berrange)
- generate ChangeLog from git logs into distribution tarball (Jim Meyering)
- Implement qemu dump capabilities (Paolo Bonzini)
- Implement schedular tunables API using cgroups (Daniel P. Berrange)
- Implement the new virinterface functions (Laine Stump)
- Make cgroups a little more efficient (Daniel P. Berrange)
- Make it easier to debug tests running programs (Daniel P. Berrange)
- Make qemuBuildHostNetStr() take tapfd as a string (Mark McLoughlin)
- Make QEMU cgroups use configurable (Daniel P. Berrange)
- Make qemuCmdFlags available in qemudDomainAttachDevice() (Mark McLoughlin)
- Move queuing of RPC replies into dispatch code (Daniel P. Berrange)
- Move vnet_hdr logic into qemudNetworkIfaceConnect() and export it (Mark McLoughlin)
- Netcf based interface driver implementation (Laine Stump)
- netcf XML validation and input and output tests (Daniel Veillard)
- Only probe qemu for machine types when binary changes (Mark McLoughlin)
- Place every QEMU guest in a private cgroup (Daniel P. Berrange)
- Probe for QEMU machine types (Mark McLoughlin)
- Probe QEMU directly for machine aliases if not found in capabilties (Mark McLoughlin)
- Public API for new virInterface functions (Laine Stump)
- python: Raise exceptions if virDomain*Stats fail. (Cole Robinson)
- Refactor cgroups to allow a group per driver to be managed directly (Daniel P. Berrange)
- Re-factor pci_add reply parsing and parse domain/bus numbers (Mark McLoughlin)
- Retain disk PCI address across libvirtd restarts (Mark McLoughlin)
- Retain PCI address from NIC attach (Mark McLoughlin)
- Run QEMU guests as an unprivileged user (Daniel P. Berrange)
- Separate code for encoding outgoing remote message headers (Daniel P. Berrange)
- Split generic RPC message dispatch code out from remote protocol API handlers (Daniel P. Berrange)
- Split out code for handling incoming method call messages (Daniel P. Berrange)
- storage: Break out actual raw cloning to separate function. (Cole Robinson)
- storage: cleanup: do away with 'createFile' (Cole Robinson)
- storage: disk: Use capacity, not allocation, when creating volume. (Cole Robinson)
- storage: Don't try sparse detection if writing to block device. (Cole Robinson)
- storage: Implement 'CreateBlockFrom' helper. (Cole Robinson)
- storage: Implement CreateVolFrom for logical and disk backend. (Cole Robinson)
- storage: Move most of the FS creation functions to common backend. (Cole Robinson)
- storage: Refactor FS backend 'create' function choosing. (Cole Robinson)
- Store the interface vlan number in the domain state (Mark McLoughlin)
- Support <video> element for QEMU guests (Daniel P. Berrange)
- Support <video> tag for defining VGA card properties (Daniel P. Berrange)
- Switch to using a unix socket for the qemu monitor (Mark McLoughlin)
- test: Generate net interface names when assigning XML. (Cole Robinson)
- test: Implement BlockStats and InterfaceStats (Cole Robinson)
- Use cgroups for block device whitelisting in QEMU guests (Daniel P. Berrange)
- Use enums for cgroup controller types / labels (Daniel P. Berrange)
- Use sendmsg() on QEMU monitor socket (Mark McLoughlin)
- Use virDomainChrTypeFromString() instead of open coding (Mark McLoughlin)
- Use virFileReadAll/virFileWriteStr for key cgroup read/write helpers (Daniel P. Berrange)
- virGetinterface matching of MAC and interface name (Laine Stump)
Cleanups:
- Fix configure checks from previous commits (Daniel P. Berrange)
- Avoid a warning if compiling without inotify (Daniel P. Berrange)
- Remove a stray semicolon (Daniel Veillard)
- Extend the ESX URL to habdle ports and GSX (Matthias Bolte)
- Fix escaping of 8-bit high characters (Daniel P. Berrange)
- Remove ATTRIBUTE_UNUSED from flags to qemudDomainMigratePerform. (Chris Lalancette)
- Add a comment about setting errors after qemudStartVMDaemon(). (Chris Lalancette)
- Fix an erroneous debug error to KVM; it should read QEMU/KVM. (Chris Lalancette)
- Remove a stray semicolon in qemudDomainMigratePrepare2. (Chris Lalancette)
- Convert a few stray users of free() in libvirt.c to VIR_FREE(). (Chris Lalancette)
- Use virGetHostname instead of gethostname. (Chris Lalancette)
- Fix up a minor indentation issue with virDomainMigratePrepare. (Chris Lalancette)
- Fix up a silly typo in apibuild.py. (Chris Lalancette)
- Avoid warning when compiling without IFF_VNET_HDR (Maximilian Wilhelm)
- Capilize libvirt-client summary (Mark McLoughlin)
- Move ldconfig calls to libvirt-client %post/%postun (Mark McLoughlin)
- Convert NEWS to UTF-8 (Mark McLoughlin)
- Fix trailing whitespace in NEWS (Mark McLoughlin)
- No need to build require both python-devel and python (Mark McLoughlin)
- Remove executable perms from /etc/sysconfig/libvirtd (Mark McLoughlin)
- Use a %postun -p for one line scriptlet (Mark McLoughlin)
- Don't explicitly require libxml2 (Mark McLoughlin)
- Fix some unowned directories (Mark McLoughlin)
- Kill qemu BuildRequires (Mark McLoughlin)
- Enable netcf by default (Mark McLoughlin)
- Default to with_polkit (Mark McLoughlin)
- Make vbox support configurable (Mark McLoughlin)
- Build with --without-capng if capng is disabled (Mark McLoughlin)
- BuildRequires libcap-ng-devel not capng-devel (Mark McLoughlin)
- Drop curl host check when using ESX without check (Shahar Klein)
- Fix typo in xen capabilities code (Daniel P. Berrange)
- Add bare format string to printf-derivatives troubles (Laine Stump)
- Add phyp files to POTFILES, to make syntax-check happy. (Cole Robinson)
- avoid a make distcheck failure: distribute docs/schemas/interface.rng (Jim Meyering)
- avoid a make distcheck failure: distribute tests/interfaceschemadata/ (Jim Meyering)
- avoid a "make syntax-check" failure (Jim Meyering)
- build: do not emit a trailing blank line into VC'd file, NEWS (Jim Meyering)
- build: update from gnulib, for latest maint.mk (Jim Meyering)
- Clean up error handling in qemudDomainAttachNetDevice() (Mark McLoughlin)
- Cleanup qemu binary detection logic in qemudCapsInitGuest() (Mark McLoughlin)
- Commit newly generated docs, after changes from commit 2348cf. (Cole Robinson)
- Factor qemuBuildHostNetStr() out from qemuBuildCommandLine() (Mark McLoughlin)
- Factor qemuBuildNicStr() out from qemuBuildCommandLine() (Mark McLoughlin)
- Factor qemudMonitorSend() out of qemudMonitorCommandExtra() (Mark McLoughlin)
- Fix cgroup compile warnings (Daniel P. Berrange)
- Fix misc build problems due to new drivers (Daniel P. Berrange)
- Fix wierd build problems due to autopoint overwriting gnulib m4 (Daniel P. Berrange)
- Makefile.cfg: Rename to... (Jim Meyering)
- make .gnulib a submodule (Jim Meyering)
- make "make syntax-check" consistent with "git diff --check" (Jim Meyering)
- Minor qemu monitor coding style fixes (Mark McLoughlin)
- Prepare to use maint.mk from gnulib (Jim Meyering)
- Refactor incoming message handling to prepare for data stream support (Daniel P. Berrange)
- Refactor message sending to allow code reuse for data streams (Daniel P. Berrange)
- remove all .cvsignore files (Jim Meyering)
- remove all trailing blank lines (Jim Meyering)
- Remove some unused variables and cut long lines (Daniel Veillard)
- Remove trailing blank lines (Daniel Veillard)
- Rename a bunch of internal methods to clarify their meaning (Daniel P. Berrange)
- Rename 'direction' to 'type' in remote_message_header (Daniel P. Berrange)
- Report the object name on lookup error (Daniel Veillard)
- Simplify remote driver error reporting (Daniel P. Berrange)
- skip some of gnulib's new rules (Jim Meyering)
- use automake-1.11's silent-rules option, when possible (Jim Meyering)
- use gnumakefile and maintainer-makefile modules from gnulib (Jim Meyering)
It's also good to see a lot of new contributors in this release,
so thanks to everybody !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
15 years, 2 months
[libvirt] [PATCH] address incompatible change of qemu-img
by Ryota Ozaki
Hi,
Latest qemu-img (maybe from 0.11.0-rc0 or later?) changes
default unit of size as bytes, it was kilo-bytes so far.
(see http://www.mail-archive.com/kvm@vger.kernel.org/msg19183.html)
This patch addresses this incompatibility by adding postfix
'K'. This fix is able to keep backward compatibility for
old qemu as well, and also even if qemu-img falls back old
style or any, this explicit specifying should work well.
Thanks,
ozaki-r
>From 7d3dd9e592deab5a1d793532cf230d8367372280 Mon Sep 17 00:00:00 2001
From: Ryota Ozaki <ozaki.ryota(a)gmail.com>
Date: Tue, 4 Aug 2009 11:11:31 +0900
Subject: [PATCH] address incompatible change of qemu-img
---
src/storage_backend.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/storage_backend.c b/src/storage_backend.c
index 07a2e48..8824218 100644
--- a/src/storage_backend.c
+++ b/src/storage_backend.c
@@ -446,7 +446,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
/* Size in KB */
- snprintf(size, sizeof(size), "%llu", vol->capacity/1024);
+ snprintf(size, sizeof(size), "%lluK", vol->capacity/1024);
if (virRun(conn, imgargv, NULL) < 0) {
VIR_FREE(imgargv[0]);
--
1.6.0.6
15 years, 2 months
[libvirt] [PATCH] Support the usage of socat instead of netcat
by Jonas Eriksson
Some netcat implementations does not support unix domain sockets (-U).
Distros that ship these implementations often also ships socat, that
do support this.
This is a reworked patch based on the openSUSE libvirt package. The
original patch may be found in this source rpm:
http://download.opensuse.org/source/distribution/11.1/repo/oss/suse/src/l...
* configure.in: Check for --with-socat and set USE_SOCAT in config.h
* src/remote_internal.c: Honour USE_SOCAT by selecting between
netcat/nc and socat at compile time.
---
configure.in | 7 +++++++
src/remote_internal.c | 13 +++++++++++++
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/configure.in b/configure.in
index b905b23..732ef68 100644
--- a/configure.in
+++ b/configure.in
@@ -153,6 +153,13 @@ if test -n "$MODPROBE"; then
[Location or name of the modprobe program])
fi
+dnl Check if socat should be used instead of netcat
+AC_ARG_WITH([socat],
+[ --with-socat use socat instead of netcat (off)])
+if test "$with_socat" = "yes" ; then
+ AC_DEFINE_UNQUOTED([USE_SOCAT], 1, [whether socat should be used instead of netcat])
+fi
+
dnl Specific dir for HTML output ?
AC_ARG_WITH([html-dir], [AC_HELP_STRING([--with-html-dir=path],
[path to base html directory, default $datadir/doc/html])],
diff --git a/src/remote_internal.c b/src/remote_internal.c
index a58b768..7678317 100644
--- a/src/remote_internal.c
+++ b/src/remote_internal.c
@@ -725,6 +725,18 @@ doRemoteOpen (virConnectPtr conn,
cmd_argv[j++] = strdup ("-e");
cmd_argv[j++] = strdup ("none");
}
+#ifdef USE_SOCAT
+ cmd_argv[j++] = strdup ("socat");
+ cmd_argv[j++] = strdup ("-");
+
+ char *socat_addr = 0;
+ if ((asprintf (&socat_addr, "GOPEN:%s",
+ sockname ? sockname : LIBVIRTD_PRIV_UNIX_SOCKET)) < 0) {
+ error (conn, VIR_ERR_SYSTEM_ERROR, strerror (ENOMEM));
+ goto failed;
+ }
+ cmd_argv[j++] = socat_addr;
+#else
cmd_argv[j++] = strdup (priv->hostname);
cmd_argv[j++] = strdup (netcat ? netcat : "nc");
cmd_argv[j++] = strdup ("-U");
@@ -732,6 +744,7 @@ doRemoteOpen (virConnectPtr conn,
(flags & VIR_CONNECT_RO
? LIBVIRTD_PRIV_UNIX_SOCKET_RO
: LIBVIRTD_PRIV_UNIX_SOCKET));
+#endif
cmd_argv[j++] = 0;
assert (j == nr_args);
for (j = 0; j < (nr_args-1); j++)
--
1.6.2
15 years, 2 months
[libvirt] PATCH: Add name uniqueness checking to LXC driver
by Daniel P. Berrange
The LXC driver define/create methods didn't yet have name uniqueness
checking enabled
Daniel
commit 4b23a44f34392b5c6d1c5aa483cbe81b010e47c4
Author: Daniel P. Berrange <berrange(a)redhat.com>
Date: Fri Jul 31 15:25:03 2009 +0100
Add uniqness checking for LXC define/create methods
* src/lxc_driver.c: Check for name & UUID uniqueness when
defining or creating domains
diff --git a/src/lxc_driver.c b/src/lxc_driver.c
index d62c2d7..a9c4f79 100644
--- a/src/lxc_driver.c
+++ b/src/lxc_driver.c
@@ -311,6 +311,35 @@ static virDomainPtr lxcDomainDefine(virConnectPtr conn, const char *xml)
VIR_DOMAIN_XML_INACTIVE)))
goto cleanup;
+ /* See if a VM with matching UUID already exists */
+ vm = virDomainFindByUUID(&driver->domains, def->uuid);
+ if (vm) {
+ /* UUID matches, but if names don't match, refuse it */
+ if (STRNEQ(vm->def->name, def->name)) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ lxcError(conn, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ vm->def->name, uuidstr);
+ goto cleanup;
+ }
+
+ /* UUID & name match */
+ virDomainObjUnlock(vm);
+ newVM = 0;
+ } else {
+ /* UUID does not match, but if a name matches, refuse it */
+ vm = virDomainFindByName(&driver->domains, def->name);
+ if (vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ lxcError(conn, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ def->name, uuidstr);
+ goto cleanup;
+ }
+ }
+
if ((def->nets != NULL) && !(driver->have_netns)) {
lxcError(conn, NULL, VIR_ERR_NO_SUPPORT,
"%s", _("System lacks NETNS support"));
@@ -1082,6 +1111,39 @@ lxcDomainCreateAndStart(virConnectPtr conn,
VIR_DOMAIN_XML_INACTIVE)))
goto cleanup;
+ /* See if a VM with matching UUID already exists */
+ vm = virDomainFindByUUID(&driver->domains, def->uuid);
+ if (vm) {
+ /* UUID matches, but if names don't match, refuse it */
+ if (STRNEQ(vm->def->name, def->name)) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ lxcError(conn, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ vm->def->name, uuidstr);
+ goto cleanup;
+ }
+
+ /* UUID & name match, but if VM is already active, refuse it */
+ if (virDomainIsActive(vm)) {
+ lxcError(conn, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain is already active as '%s'"), vm->def->name);
+ goto cleanup;
+ }
+ virDomainObjUnlock(vm);
+ } else {
+ /* UUID does not match, but if a name matches, refuse it */
+ vm = virDomainFindByName(&driver->domains, def->name);
+ if (vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+ virUUIDFormat(vm->def->uuid, uuidstr);
+ lxcError(conn, NULL, VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already defined with uuid %s"),
+ def->name, uuidstr);
+ goto cleanup;
+ }
+ }
+
if ((def->nets != NULL) && !(driver->have_netns)) {
lxcError(conn, NULL, VIR_ERR_NO_SUPPORT,
"%s", _("System lacks NETNS support"));
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
15 years, 2 months