[libvirt] [PATCH] qemu: Fail if per-device boot is used but deviceboot is not supported
by Jiri Denemark
---
src/qemu/qemu_command.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 24acc10..537e537 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2949,6 +2949,13 @@ qemuBuildCommandLine(virConnectPtr conn,
}
virCommandAddArgBuffer(cmd, &boot_buf);
+ } else if (!(qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX)) {
+ /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot
+ * configuration is used
+ */
+ qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("hypervisor lacks deviceboot feature"));
+ goto error;
}
if (def->os.kernel)
--
1.7.4.rc2
13 years, 11 months
[libvirt] [PATCH] spec: Start libvirt-guests only if it's on in current runlevel
by Jiri Denemark
---
libvirt.spec.in | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index d673cf6..0a2d10e 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -775,7 +775,8 @@ fi
/sbin/ldconfig
/sbin/chkconfig --add libvirt-guests
if [ $1 -ge 1 ]; then
- if /sbin/chkconfig --list libvirt-guests | /bin/grep -q :on ; then
+ level=$(/sbin/runlevel | /bin/cut -d ' ' -f 2)
+ if /sbin/chkconfig --list libvirt-guests | /bin/grep -q $level:on ; then
# this doesn't do anything but allowing for libvirt-guests to be
# stopped on the first shutdown
/sbin/service libvirt-guests start > /dev/null 2>&1 || true
--
1.7.4.rc2
13 years, 11 months
[libvirt] [PATCH 0/3] qemu: improve device capability detection
by Eric Blake
As promised in https://www.redhat.com/archives/libvir-list/2011-January/msg00562.html
Patch 1 is complete, patch 2 can be pushed as-is, but if anyone
has qemu-0.12.1 or qemu-kvm-0.12.3 handy (Fedora12 has 0.11.x, and
Fedora13 has 0.12.5), then we can enhance it by filling in the
contents of a couple more files.
Patch 3 does not need to be pushed until the rest of my smartcard
series is complete, but I'm including it now to show how to
rewrite things in order to parse more device characteristics
from a single qemu run, so it can be reused by the boot order
patch series (add "-device","virtio-blk-pci,?" to extract; add
strstr(str,"virtio-blk-pci.bootindex") to parse; and possibly
update the qemuhelpdata/*-device files to include appropriate
new lines to trigger the new flag detection).
Eric Blake (3):
qemu: convert capabilities to use virCommand
qemu: improve device flag parsing
smartcard: check for qemu capability
src/qemu/qemu_capabilities.c | 229 +++++++-------------
src/qemu/qemu_capabilities.h | 5 +-
tests/qemuhelpdata/qemu-kvm-0.12.1.2-rhel60-device | 57 +++++
tests/qemuhelpdata/qemu-kvm-0.13.0-device | 70 ++++++
tests/qemuhelptest.c | 48 +++-
5 files changed, 244 insertions(+), 165 deletions(-)
create mode 100644 tests/qemuhelpdata/qemu-0.12.1-device
create mode 100644 tests/qemuhelpdata/qemu-kvm-0.12.1.2-rhel60-device
create mode 100644 tests/qemuhelpdata/qemu-kvm-0.12.3-device
create mode 100644 tests/qemuhelpdata/qemu-kvm-0.13.0-device
--
1.7.3.4
13 years, 11 months
[libvirt] [PATCH] Basic support for VDE networking
by Renzo Davoli
I have seen several messages asking for VDE networking support.
There is an item also in your todo web page.
http://libvirt.org/todo.html
I have developed a patch to provide a basic support for VDE.
It defines and manages the syntax:
<domain ....>
<device>
<interface type='vde'>
...
<switch path='/tmp/vde.ctl'/>
</interface>
</device>
</domain>
the switch tag can be omitted: vde uses the default switch.
I have tested the qemu/kvm support.
user-mode linux support is included but not tested yet.
libvirt vde support for virtualbox has not been coded yet (virtualbox
itself supports vde).
The patch is against libvirt-0.8.7.
renzo
(designer/developer of VDE, university of bologna, wiki.virtualsquare.org)
Signed-off-by: Renzo Davoli <renzo(a)cs.unibo.it>
---
--- a/src/lxc/lxc_driver.c 2011-01-10 11:49:49.000000000 +0100
+++ b/src/lxc/lxc_driver.c 2011-01-10 11:50:03.000000000 +0100
@@ -1083,6 +1083,7 @@
case VIR_DOMAIN_NET_TYPE_INTERNAL:
case VIR_DOMAIN_NET_TYPE_DIRECT:
case VIR_DOMAIN_NET_TYPE_LAST:
+ case VIR_DOMAIN_NET_TYPE_VDE:
break;
}
--- a/src/uml/uml_conf.c 2011-01-10 12:03:54.000000000 +0100
+++ b/src/uml/uml_conf.c 2011-01-10 13:26:08.000000000 +0100
@@ -269,6 +269,14 @@
virBufferVSprintf(&buf, "tuntap,%s", def->ifname);
break;
+ case VIR_DOMAIN_NET_TYPE_VDE:
+ /* ethNNN=vde,vde_switch,macaddr,port,group,mode,description */
+ if (def->data.vde.vdeswitch) {
+ virBufferVSprintf(&buf, "vde,%s", def->data.vde.vdeswitch);
+ } else
+ virBufferAddLit(&buf, "vde");
+ break;
+
case VIR_DOMAIN_NET_TYPE_INTERNAL:
umlReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("internal networking type not supported"));
--- a/src/conf/domain_conf.h 2011-01-10 11:41:07.000000000 +0100
+++ b/src/conf/domain_conf.h 2011-01-10 13:21:08.000000000 +0100
@@ -288,6 +288,7 @@
VIR_DOMAIN_NET_TYPE_BRIDGE,
VIR_DOMAIN_NET_TYPE_INTERNAL,
VIR_DOMAIN_NET_TYPE_DIRECT,
+ VIR_DOMAIN_NET_TYPE_VDE,
VIR_DOMAIN_NET_TYPE_LAST,
};
@@ -336,6 +337,9 @@
int mode;
virVirtualPortProfileParams virtPortProfile;
} direct;
+ struct {
+ char *vdeswitch;
+ } vde;
} data;
char *ifname;
virDomainDeviceInfo info;
--- a/src/conf/domain_conf.c 2011-01-10 11:42:04.000000000 +0100
+++ b/src/conf/domain_conf.c 2011-01-10 14:49:46.000000000 +0100
@@ -182,7 +182,8 @@
"network",
"bridge",
"internal",
- "direct")
+ "direct",
+ "vde")
VIR_ENUM_IMPL(virDomainChrChannelTarget,
VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST,
@@ -598,6 +599,10 @@
VIR_FREE(def->data.direct.linkdev);
break;
+ case VIR_DOMAIN_NET_TYPE_VDE:
+ VIR_FREE(def->data.vde.vdeswitch);
+ break;
+
case VIR_DOMAIN_NET_TYPE_USER:
case VIR_DOMAIN_NET_TYPE_LAST:
break;
@@ -2293,6 +2298,7 @@
char *internal = NULL;
char *devaddr = NULL;
char *mode = NULL;
+ char *vdeswitch = NULL;
virNWFilterHashTablePtr filterparams = NULL;
virVirtualPortProfileParams virtPort;
bool virtPortParsed = false;
@@ -2379,7 +2385,11 @@
xmlStrEqual(cur->name, BAD_CAST "state")) {
/* Legacy back-compat. Don't add any more attributes here */
devaddr = virXMLPropString(cur, "devaddr");
- }
+ } else if ((vdeswitch == NULL) &&
+ def->type == VIR_DOMAIN_NET_TYPE_VDE &&
+ xmlStrEqual(cur->name, BAD_CAST "switch")) {
+ vdeswitch = virXMLPropString(cur, "path");
+ }
}
cur = cur->next;
}
@@ -2529,6 +2539,11 @@
break;
+ case VIR_DOMAIN_NET_TYPE_VDE:
+ def->data.vde.vdeswitch = vdeswitch;
+ vdeswitch = NULL;
+ break;
+
case VIR_DOMAIN_NET_TYPE_USER:
case VIR_DOMAIN_NET_TYPE_LAST:
break;
@@ -6263,6 +6278,12 @@
" ");
break;
+ case VIR_DOMAIN_NET_TYPE_VDE:
+ if (def->data.vde.vdeswitch)
+ virBufferEscapeString(buf, " <switch path='%s'/>\n",
+ def->data.vde.vdeswitch);
+ break;
+
case VIR_DOMAIN_NET_TYPE_USER:
case VIR_DOMAIN_NET_TYPE_LAST:
break;
--- a/src/qemu/qemu_command.c 2011-01-10 13:11:17.000000000 +0100
+++ b/src/qemu/qemu_command.c 2011-01-10 13:26:28.000000000 +0100
@@ -1602,12 +1602,21 @@
case VIR_DOMAIN_NET_TYPE_BRIDGE:
case VIR_DOMAIN_NET_TYPE_INTERNAL:
case VIR_DOMAIN_NET_TYPE_DIRECT:
+ case VIR_DOMAIN_NET_TYPE_VDE:
case VIR_DOMAIN_NET_TYPE_LAST:
break;
}
type_sep = ',';
break;
+ case VIR_DOMAIN_NET_TYPE_VDE:
+ virBufferAddLit(&buf, "vde");
+ if (net->data.vde.vdeswitch)
+ virBufferVSprintf(&buf, "%csock=%s",
+ type_sep,
+ net->data.vde.vdeswitch);
+ break;
+
case VIR_DOMAIN_NET_TYPE_USER:
default:
virBufferAddLit(&buf, "user");
13 years, 11 months
[libvirt] Installing libvirt 0.8.7 Ubuntu 9.10
by Marcela Castro León
Hello:
I'm installing libvirt 0.8.7 on Ubuntu 9.10 to work at a project at
Autonomous University.
But when make ./configure, I've got:
checking pkg-config is at least version 0.9.0... yes
checking for XMLRPC... no
checking for LIBXML... no
checking libxml2 xml2-config >= 2.6.0 ... configure: error: Could not find
libxml2 anywhere (see config.log for details).
But I've libxml2 installed on mu system
marcela@santacruz:~/libvirt/libvirt-0.8.7$ dpkg -l | grep libxml2
ii libxml2
2.7.5.dfsg-1ubuntu1.2 GNOME XML library
ii libxml2-utils
2.7.5.dfsg-1ubuntu1.2 XML utilities
ii python-libxml2
2.7.5.dfsg-1ubuntu1.2 Python bindings for the GNOME XML
library
The config.log mention No package 'libxml-2.0', but this libary doesn't
exit.
I've attach this log to further information.
Can you tell me how to follow?
Thank you.
13 years, 11 months
[libvirt] Spice in libvirt 0.8.x?
by Justin Clift
Hi us,
Does anyone know if Spice in libvirt 0.8.7 works ok?
Noticed two BZ's (still open) by Amador Pahim (CC'd), where he tested with 0.8.6 and noticed problems with our XML vs reality (for him):
https://bugzilla.redhat.com/show_bug.cgi?id=664190
https://bugzilla.redhat.com/show_bug.cgi?id=664192
He was able to get it working by commenting out two pieces of qemu_command.c, so I'm just wondering if
this is useful info to us or if it's already dated?
/* if ((def->videos[0]->type == VIR_DOMAIN_VIDEO_TYPE_QXL) &&
* !(qemuCmdFlags & QEMUD_CMD_FLAG_VGA_QXL)) {
* qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
* _("This QEMU does not support QXL graphics adapters"));
* goto error;
* }
*/
/*
* if (def->graphics[0]->data.spice.listenAddr)
* virBufferVSprintf(&opt, ",addr=%s", def->graphics[0]>data.spice.listenAddr);
* else if (driver->spiceListen)
* virBufferVSprintf(&opt, ",addr=%s", driver->spiceListen);
*/
+ Justin
13 years, 11 months
[libvirt] [PATCH] build: use more gnulib modules for simpler code
by Eric Blake
* .gnulib: Update to latest, for sigpipe and sigaction modules.
* bootstrap.conf (gnulib_modules): Add siaction, sigpipe, strerror_r.
* tools/virsh.c (vshSetupSignals) [!SIGPIPE]: Delete, now that
gnulib guarantees it.
(SA_SIGINFO): Define for mingw fallback.
* src/util/virterror.c (virStrerror): Simplify, now that gnulib
guarantees the POSIX interface.
* configure.ac (AC_CHECK_FUNCS_ONCE): Drop redundant check.
(AM_PROG_CC_STDC): Move earlier, to keep autoconf happy.
---
Gnulib makes it possible to prefer the POSIX strerror_r
signature everywhere, even on Linux. And even though
mingw lacks SA_SIGINFO (even with gnulib), the virsh signal
handler still works for mingw with gnulib's implementation
of SIGPIPE with minimal effort.
* .gnulib 9779055...e7853fe (3):
> sigaction: relax license from LGPLv3+ to LGPLv2+
> update from texinfo
> autoupdate
.gnulib | 2 +-
bootstrap.conf | 3 +++
configure.ac | 13 ++++++-------
src/util/virterror.c | 18 +-----------------
tools/virsh.c | 17 +++++++++--------
5 files changed, 20 insertions(+), 33 deletions(-)
diff --git a/.gnulib b/.gnulib
index 9779055..e7853fe 160000
--- a/.gnulib
+++ b/.gnulib
@@ -1 +1 @@
-Subproject commit 9779055889c2715b593930e39ead552759b5ddc2
+Subproject commit e7853fee14b339b6d5327c3b5d5de59b13c4e39e
diff --git a/bootstrap.conf b/bootstrap.conf
index a55fca2..88832d1 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -58,12 +58,15 @@ random_r
sched
send
setsockopt
+sigaction
+sigpipe
snprintf
socket
stpcpy
strchrnul
strndup
strerror
+strerror_r-posix
strptime
strsep
strtok_r
diff --git a/configure.ac b/configure.ac
index 337ce17..574e952 100644
--- a/configure.ac
+++ b/configure.ac
@@ -49,11 +49,11 @@ dnl Checks for C compiler.
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_CPP
+AM_PROG_CC_STDC
gl_EARLY
gl_INIT
-AM_PROG_CC_STDC
AC_TYPE_UID_T
dnl Make sure we have an ANSI compiler
@@ -93,12 +93,11 @@ fi
AC_MSG_RESULT([$have_cpuid])
-dnl Availability of various common functions (non-fatal if missing).
-AC_CHECK_FUNCS_ONCE([cfmakeraw regexec sched_getaffinity getuid getgid initgroups \
- posix_fallocate mmap])
-
-dnl Availability of various not common threadsafe functions
-AC_CHECK_FUNCS_ONCE([strerror_r getmntent_r getgrnam_r getpwuid_r])
+dnl Availability of various common functions (non-fatal if missing),
+dnl and various less common threadsafe functions
+AC_CHECK_FUNCS_ONCE([cfmakeraw regexec sched_getaffinity getuid getgid \
+ initgroups posix_fallocate mmap \
+ getmntent_r getgrnam_r getpwuid_r])
dnl Availability of pthread functions (if missing, win32 threading is
dnl assumed). Because of $LIB_PTHREAD, we cannot use AC_CHECK_FUNCS_ONCE.
diff --git a/src/util/virterror.c b/src/util/virterror.c
index 7543603..3dd6256 100644
--- a/src/util/virterror.c
+++ b/src/util/virterror.c
@@ -1250,7 +1250,7 @@ void virReportErrorHelper(virConnectPtr conn,
* @errBuf: the buffer to save the error to
* @errBufLen: the buffer length
*
- * Generate an erro string for the given errno
+ * Generate an error string for the given errno
*
* Returns a pointer to the error string, possibly indicating that the
* error is unknown
@@ -1260,24 +1260,8 @@ const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen)
int save_errno = errno;
const char *ret;
-#ifdef HAVE_STRERROR_R
-# ifdef __USE_GNU
- /* Annoying linux specific API contract */
- ret = strerror_r(theerrno, errBuf, errBufLen);
-# else
strerror_r(theerrno, errBuf, errBufLen);
ret = errBuf;
-# endif
-#else
- /* Mingw lacks strerror_r and its strerror is definitely not
- * threadsafe, so safest option is to just print the raw errno
- * value - we can at least reliably & safely look it up in the
- * header files for debug purposes
- */
- int n = snprintf(errBuf, errBufLen, "errno=%d", theerrno);
- ret = (0 < n && n < errBufLen
- ? errBuf : _("internal error: buffer too small"));
-#endif
errno = save_errno;
return ret;
}
diff --git a/tools/virsh.c b/tools/virsh.c
index 5b26c78..aba7945 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -497,16 +497,21 @@ out:
*/
static int disconnected = 0; /* we may have been disconnected */
-#ifdef SIGPIPE
+/* Gnulib doesn't guarantee SA_SIGINFO support. */
+#ifndef SA_SIGINFO
+# define SA_SIGINFO 0
+#endif
+
/*
* vshCatchDisconnect:
*
* We get here when a SIGPIPE is being raised, we can't do much in the
* handler, just save the fact it was raised
*/
-static void vshCatchDisconnect(int sig, siginfo_t * siginfo,
- void* context ATTRIBUTE_UNUSED) {
- if ((sig == SIGPIPE) || (siginfo->si_signo == SIGPIPE))
+static void vshCatchDisconnect(int sig, siginfo_t *siginfo,
+ void *context ATTRIBUTE_UNUSED) {
+ if ((sig == SIGPIPE) ||
+ (SA_SIGINFO && siginfo->si_signo == SIGPIPE))
disconnected++;
}
@@ -526,10 +531,6 @@ vshSetupSignals(void) {
sigaction(SIGPIPE, &sig_action, NULL);
}
-#else
-static void
-vshSetupSignals(void) {}
-#endif
/*
* vshReconnect:
--
1.7.3.4
13 years, 11 months
[libvirt] [PATCH] Remove two unused PATH_MAX-sized char arrays from the stack
by Matthias Bolte
---
src/storage/storage_driver.c | 16 ++--------------
src/uml/uml_driver.c | 8 ++------
2 files changed, 4 insertions(+), 20 deletions(-)
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 67d043b..5373025 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -127,9 +127,9 @@ storageDriverAutostart(virStorageDriverStatePtr driver) {
* Initialization function for the QEmu daemon
*/
static int
-storageDriverStartup(int privileged) {
+storageDriverStartup(int privileged)
+{
char *base = NULL;
- char driverConf[PATH_MAX];
if (VIR_ALLOC(driverState) < 0)
return -1;
@@ -160,11 +160,6 @@ storageDriverStartup(int privileged) {
/* Configuration paths are either ~/.libvirt/storage/... (session) or
* /etc/libvirt/storage/... (system).
*/
- if (snprintf (driverConf, sizeof(driverConf),
- "%s/storage.conf", base) == -1)
- goto out_of_memory;
- driverConf[sizeof(driverConf)-1] = '\0';
-
if (virAsprintf(&driverState->configDir,
"%s/storage", base) == -1)
goto out_of_memory;
@@ -175,13 +170,6 @@ storageDriverStartup(int privileged) {
VIR_FREE(base);
- /*
- if (virStorageLoadDriverConfig(driver, driverConf) < 0) {
- virStorageDriverShutdown();
- return -1;
- }
- */
-
if (virStoragePoolLoadAllConfigs(&driverState->pools,
driverState->configDir,
driverState->autostartDir) < 0)
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
index 57f50f6..ef2a5b6 100644
--- a/src/uml/uml_driver.c
+++ b/src/uml/uml_driver.c
@@ -342,10 +342,10 @@ cleanup:
* Initialization function for the Uml daemon
*/
static int
-umlStartup(int privileged) {
+umlStartup(int privileged)
+{
uid_t uid = geteuid();
char *base = NULL;
- char driverConf[PATH_MAX];
char *userdir = NULL;
if (VIR_ALLOC(uml_driver) < 0)
@@ -398,10 +398,6 @@ umlStartup(int privileged) {
/* Configuration paths are either ~/.libvirt/uml/... (session) or
* /etc/libvirt/uml/... (system).
*/
- if (snprintf (driverConf, sizeof(driverConf), "%s/uml.conf", base) == -1)
- goto out_of_memory;
- driverConf[sizeof(driverConf)-1] = '\0';
-
if (virAsprintf(¨_driver->configDir, "%s/uml", base) == -1)
goto out_of_memory;
--
1.7.0.4
13 years, 11 months
[libvirt] [PATCH] docs: add buildbot to the apps page
by Justin Clift
---
Should have probably included this in the previous commit, but didn't
notice this BuildBot project until closing other browser windows. :/
docs/apps.html.in | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/docs/apps.html.in b/docs/apps.html.in
index 153584c..054e8c2 100644
--- a/docs/apps.html.in
+++ b/docs/apps.html.in
@@ -23,6 +23,18 @@
<img src="madeWith.png" alt="Made with libvirt"/>
</p>
+ <h2><a name="automatedtesting">Automated compile/testing</a></h2>
+
+ <dl>
+ <dt><a href="http://buildbot.net">BuildBot</a></dt>
+ <dd>
+ BuildBot is a system to automate the compile/test cycle required
+ by most software projects. CVS commits trigger new builds, run on
+ a variety of client machines. Build status (pass/fail/etc) are
+ displayed on a web page or through other protocols.
+ </dd>
+ </dl>
+
<h2><a name="clientserver">Client/Server applications</a></h2>
<dl>
--
1.7.3.5
13 years, 11 months
[libvirt] [PATCH] docs: add new conversion heading to the apps listing
by Justin Clift
---
docs/apps.html.in | 43 +++++++++++++++++++++++++++++++++++++++----
1 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/docs/apps.html.in b/docs/apps.html.in
index 9a8ffc0..153584c 100644
--- a/docs/apps.html.in
+++ b/docs/apps.html.in
@@ -93,6 +93,40 @@
</dd>
</dl>
+ <h2><a name="conversion">Conversion</a></h2>
+
+ <dl>
+ <dt><a href="https://rwmj.wordpress.com/2009/10/13/poor-mans-p2v/">Poor mans p2v</a></dt>
+ <dd>
+ A simple approach for converting a physical machine to a virtual
+ machine, using a rescue CD.
+ </dd>
+ <dt><a href="http://et.redhat.com/~rjones/virt-p2v/">virt-p2v</a></dt>
+ <dd>
+ An older tool for converting a physical machine into a virtual
+ machine. It is a LiveCD which is booted on the machine to be
+ converted. It collects a little information from the user, then
+ copies the disks over to a remote machine and defines the XML for a
+ domain to run the guest.
+ </dd>
+ <dt><a href="http://git.fedorahosted.org/git/?p=virt-v2v.git;a=summary">virt-v2v</a></dt>
+ <dd>
+ virt-v2v converts guests from a foreign hypervisor to run on KVM,
+ managed by libvirt. It can currently convert Red Hat Enterprise
+ Linux (RHEL) and Fedora guests running on Xen and VMware ESX. It
+ will enable VirtIO drivers in the converted guest if possible.
+ </dd>
+ <dd>
+ For RHEL customers of Red Hat, conversion of Windows guests is also
+ possible. This conversion requires some Microsoft signed pieces,
+ that Red Hat can provide.
+ </dd>
+ <dt><a href="http://bazaar.launchpad.net/~ubuntu-virt/virt-goodies/trunk/annotate/head...">vmware2libvirt</a></dt>
+ <dd>
+ A Python script for migrating a vmware image to libvirt.
+ </dd>
+ </dl>
+
<h2><a name="desktop">Desktop applications</a></h2>
<dl>
@@ -134,10 +168,11 @@
<dl>
<dt><a href="http://et.redhat.com/~rjones/virt-p2v/">virt-p2v</a></dt>
<dd>
- A tool for converting a physical machine into a virtual machine. It
- is a LiveCD which is booted on the machine to be converted. It collects
- a little information from the user, then copies the disks over to
- a remote machine and defines the XML for a domain to run the guest.
+ An older tool for converting a physical machine into a virtual
+ machine. It is a LiveCD which is booted on the machine to be
+ converted. It collects a little information from the user, then
+ copies the disks over to a remote machine and defines the XML for a
+ domain to run the guest.
</dd>
</dl>
--
1.7.3.5
13 years, 11 months