Compare commits
25 Commits
libvirt-0_
...
libvirt-0_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bca27d9111 | ||
|
|
08b9144b41 | ||
|
|
2063007248 | ||
|
|
81e46cb6da | ||
|
|
263e2f2021 | ||
|
|
2b9efc3de2 | ||
|
|
69f6239766 | ||
|
|
bf744f9872 | ||
|
|
45b0b2bfa6 | ||
|
|
f29ea218b7 | ||
|
|
7d193b7810 | ||
|
|
3182a4df5a | ||
|
|
4f667910e9 | ||
|
|
b395a39f7b | ||
|
|
fdd7e87fe3 | ||
|
|
f06c387ab5 | ||
|
|
5ad8bc8190 | ||
|
|
31802de821 | ||
|
|
cc39758e17 | ||
|
|
55fabd69c0 | ||
|
|
b2a1a0e9ba | ||
|
|
cbe377ed29 | ||
|
|
06a21e388f | ||
|
|
d1a886ab31 | ||
|
|
c70baa5133 |
25
.cvsignore
25
.cvsignore
@@ -1,20 +1,5 @@
|
||||
libvirt-0.0.3.tar.gz
|
||||
libvirt-0.0.4.tar.gz
|
||||
libvirt-0.0.5.tar.gz
|
||||
libvirt-0.0.6.tar.gz
|
||||
libvirt-0.1.0.tar.gz
|
||||
libvirt-0.1.2.tar.gz
|
||||
libvirt-0.1.1.tar.gz
|
||||
libvirt-0.1.3.tar.gz
|
||||
libvirt-0.1.4.tar.gz
|
||||
libvirt-0.1.5.tar.gz
|
||||
libvirt-0.1.6.tar.gz
|
||||
libvirt-0.1.7.tar.gz
|
||||
libvirt-0.1.8.tar.gz
|
||||
libvirt-0.1.9.tar.gz
|
||||
libvirt-0.1.10.tar.gz
|
||||
libvirt-0.1.11.tar.gz
|
||||
libvirt-0.2.0.tar.gz
|
||||
libvirt-0.2.1.tar.gz
|
||||
libvirt-0.2.2.tar.gz
|
||||
libvirt-0.2.3.tar.gz
|
||||
.build*.log
|
||||
*.rpm
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.gz
|
||||
|
||||
17
Makefile
17
Makefile
@@ -3,4 +3,19 @@
|
||||
NAME := libvirt
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
include ../common/Makefile.common
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||
|
||||
ifeq ($(MAKEFILE_COMMON),)
|
||||
# attempt a checkout
|
||||
define checkout-makefile-common
|
||||
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||
endif
|
||||
|
||||
include $(MAKEFILE_COMMON)
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
diff -rup libvirt-0.2.2/qemud/conf.c libvirt-0.2.2.new/qemud/conf.c
|
||||
--- libvirt-0.2.2/qemud/conf.c 2007-05-14 10:38:52.000000000 -0400
|
||||
+++ libvirt-0.2.2.new/qemud/conf.c 2007-05-14 10:38:34.000000000 -0400
|
||||
@@ -1151,6 +1151,12 @@ qemudNetworkIfaceConnect(struct qemud_se
|
||||
goto error;
|
||||
}
|
||||
|
||||
+ if (!server->brctl && (err = brInit(&server->brctl))) {
|
||||
+ qemudReportError(server, VIR_ERR_INTERNAL_ERROR,
|
||||
+ "cannot initialize bridge support: %s", strerror(err));
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
if ((err = brAddTap(server->brctl, brname,
|
||||
ifname, BR_IFNAME_MAXLEN, &tapfd))) {
|
||||
qemudReportError(server, VIR_ERR_INTERNAL_ERROR,
|
||||
Only in libvirt-0.2.2.new/qemud: conf.c.orig
|
||||
@@ -1,15 +0,0 @@
|
||||
diff -rup libvirt-0.2.2/src/xen_unified.c libvirt-0.2.2.new/src/xen_unified.c
|
||||
--- libvirt-0.2.2/src/xen_unified.c 2007-04-17 04:38:52.000000000 -0400
|
||||
+++ libvirt-0.2.2.new/src/xen_unified.c 2007-05-01 16:49:54.000000000 -0400
|
||||
@@ -112,6 +112,11 @@ xenUnifiedOpen (virConnectPtr conn, cons
|
||||
for (i = 0; i < nb_drivers; ++i) {
|
||||
int failed_to_open = 1;
|
||||
|
||||
+ /* Only use XM driver for Xen <= 3.0.3 (ie xendConfigVersion <= 2) */
|
||||
+ if (drivers[i] == &xenXMDriver &&
|
||||
+ priv->xendConfigVersion > 2)
|
||||
+ continue;
|
||||
+
|
||||
/* Ignore proxy for root */
|
||||
if (i == proxy_offset && getuid() == 0)
|
||||
continue;
|
||||
@@ -1,23 +0,0 @@
|
||||
diff -rup libvirt-0.2.2/qemud/qemud.c libvirt-0.2.2.new/qemud/qemud.c
|
||||
--- libvirt-0.2.2/qemud/qemud.c 2007-04-11 10:13:36.000000000 -0400
|
||||
+++ libvirt-0.2.2.new/qemud/qemud.c 2007-05-01 16:51:15.000000000 -0400
|
||||
@@ -1110,6 +1110,7 @@ qemudBuildDnsmasqArgv(struct qemud_serve
|
||||
len =
|
||||
1 + /* dnsmasq */
|
||||
1 + /* --keep-in-foreground */
|
||||
+ 1 + /* --strict-order */
|
||||
1 + /* --bind-interfaces */
|
||||
2 + /* --pid-file "" */
|
||||
2 + /* --conf-file "" */
|
||||
@@ -1133,6 +1134,11 @@ qemudBuildDnsmasqArgv(struct qemud_serve
|
||||
APPEND_ARG(*argv, i++, "dnsmasq");
|
||||
|
||||
APPEND_ARG(*argv, i++, "--keep-in-foreground");
|
||||
+ /*
|
||||
+ * Needed to ensure dnsmasq uses same algorithm for processing
|
||||
+ * multiple nameserver entries in /etc/resolv.conf as GLibC.
|
||||
+ */
|
||||
+ APPEND_ARG(*argv, i++, "--strict-order");
|
||||
APPEND_ARG(*argv, i++, "--bind-interfaces");
|
||||
|
||||
APPEND_ARG(*argv, i++, "--pid-file");
|
||||
@@ -1,70 +0,0 @@
|
||||
diff -rup libvirt-0.2.2.new/src/xend_internal.c libvirt-0.2.2/src/xend_internal.c
|
||||
--- libvirt-0.2.2.new/src/xend_internal.c 2007-04-15 16:09:10.000000000 -0400
|
||||
+++ libvirt-0.2.2/src/xend_internal.c 2007-05-03 14:52:42.000000000 -0400
|
||||
@@ -1676,35 +1676,38 @@ xend_parse_sexp_desc(virConnectPtr conn,
|
||||
}
|
||||
}
|
||||
|
||||
- /* Graphics device (HVM <= 3.0.4, or PV <= 3.0.4) vnc config */
|
||||
- tmp = sexpr_fmt_node(root, "domain/image/%s/vnc", hvm ? "hvm" : "linux");
|
||||
- if (tmp != NULL) {
|
||||
- if (tmp[0] == '1') {
|
||||
- int port = xenStoreDomainGetVNCPort(conn, domid);
|
||||
- const char *listenAddr = sexpr_fmt_node(root, "domain/image/%s/vnclisten", hvm ? "hvm" : "linux");
|
||||
- const char *keymap = sexpr_fmt_node(root, "domain/image/%s/keymap", hvm ? "hvm" : "linux");
|
||||
- /* For Xen >= 3.0.3, don't generate a fixed port mapping
|
||||
- * because it will almost certainly be wrong ! Just leave
|
||||
- * it as -1 which lets caller see that the VNC server isn't
|
||||
- * present yet. Subsquent dumps of the XML will eventually
|
||||
- * find the port in XenStore once VNC server has started
|
||||
- */
|
||||
- if (port == -1 && xendConfigVersion < 2)
|
||||
- port = 5900 + domid;
|
||||
- virBufferVSprintf(&buf, " <graphics type='vnc' port='%d'", port);
|
||||
- if (listenAddr)
|
||||
- virBufferVSprintf(&buf, " listen='%s'", listenAddr);
|
||||
- if (keymap)
|
||||
- virBufferVSprintf(&buf, " keymap='%s'", keymap);
|
||||
- virBufferAdd(&buf, "/>\n", 3);
|
||||
+ /* Graphics device (HVM <= 3.0.4, or PV <= 3.0.3) vnc config */
|
||||
+ if ((hvm && xendConfigVersion < 4) ||
|
||||
+ (!hvm && xendConfigVersion < 3)) {
|
||||
+ tmp = sexpr_fmt_node(root, "domain/image/%s/vnc", hvm ? "hvm" : "linux");
|
||||
+ if (tmp != NULL) {
|
||||
+ if (tmp[0] == '1') {
|
||||
+ int port = xenStoreDomainGetVNCPort(conn, domid);
|
||||
+ const char *listenAddr = sexpr_fmt_node(root, "domain/image/%s/vnclisten", hvm ? "hvm" : "linux");
|
||||
+ const char *keymap = sexpr_fmt_node(root, "domain/image/%s/keymap", hvm ? "hvm" : "linux");
|
||||
+ /* For Xen >= 3.0.3, don't generate a fixed port mapping
|
||||
+ * because it will almost certainly be wrong ! Just leave
|
||||
+ * it as -1 which lets caller see that the VNC server isn't
|
||||
+ * present yet. Subsquent dumps of the XML will eventually
|
||||
+ * find the port in XenStore once VNC server has started
|
||||
+ */
|
||||
+ if (port == -1 && xendConfigVersion < 2)
|
||||
+ port = 5900 + domid;
|
||||
+ virBufferVSprintf(&buf, " <graphics type='vnc' port='%d'", port);
|
||||
+ if (listenAddr)
|
||||
+ virBufferVSprintf(&buf, " listen='%s'", listenAddr);
|
||||
+ if (keymap)
|
||||
+ virBufferVSprintf(&buf, " keymap='%s'", keymap);
|
||||
+ virBufferAdd(&buf, "/>\n", 3);
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
|
||||
- /* Graphics device (HVM, or old (pre-3.0.4) style PV sdl config) */
|
||||
- tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux");
|
||||
- if (tmp != NULL) {
|
||||
- if (tmp[0] == '1')
|
||||
- virBufferAdd(&buf, " <graphics type='sdl'/>\n", 27 );
|
||||
+ /* Graphics device (HVM, or old (pre-3.0.4) style PV sdl config) */
|
||||
+ tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux");
|
||||
+ if (tmp != NULL) {
|
||||
+ if (tmp[0] == '1')
|
||||
+ virBufferAdd(&buf, " <graphics type='sdl'/>\n", 27 );
|
||||
+ }
|
||||
}
|
||||
|
||||
tty = xenStoreDomainGetConsolePath(conn, domid);
|
||||
Only in libvirt-0.2.2/src: xend_internal.c.orig
|
||||
@@ -1,128 +0,0 @@
|
||||
diff -rup libvirt-0.2.2/qemud/conf.c libvirt-0.2.2.new/qemud/conf.c
|
||||
--- libvirt-0.2.2/qemud/conf.c 2007-04-17 04:34:42.000000000 -0400
|
||||
+++ libvirt-0.2.2.new/qemud/conf.c 2007-05-14 10:36:12.000000000 -0400
|
||||
@@ -245,21 +245,25 @@ static int qemudExtractVersionInfo(const
|
||||
cleanup1:
|
||||
_exit(-1); /* Just in case */
|
||||
} else { /* Parent */
|
||||
- char help[4096]; /* Ought to be enough to hold QEMU help screen */
|
||||
- int got, ret = -1;
|
||||
+ char help[8192]; /* Ought to be enough to hold QEMU help screen */
|
||||
+ int got = 0, ret = -1;
|
||||
int major, minor, micro;
|
||||
|
||||
if (close(newstdout[1]) < 0)
|
||||
goto cleanup2;
|
||||
|
||||
- reread:
|
||||
- if ((got = read(newstdout[0], help, sizeof(help)-1)) < 0) {
|
||||
- if (errno == EINTR)
|
||||
- goto reread;
|
||||
- goto cleanup2;
|
||||
+ while (got < (sizeof(help)-1)) {
|
||||
+ int len;
|
||||
+ if ((len = read(newstdout[0], help+got, sizeof(help)-got-1)) <= 0) {
|
||||
+ if (!len)
|
||||
+ break;
|
||||
+ if (errno == EINTR)
|
||||
+ continue;
|
||||
+ goto cleanup2;
|
||||
+ }
|
||||
+ got += len;
|
||||
}
|
||||
help[got] = '\0';
|
||||
-
|
||||
if (sscanf(help, "QEMU PC emulator version %d.%d.%d", &major,&minor, µ) != 3) {
|
||||
goto cleanup2;
|
||||
}
|
||||
@@ -267,6 +271,8 @@ static int qemudExtractVersionInfo(const
|
||||
*version = (major * 1000 * 1000) + (minor * 1000) + micro;
|
||||
if (strstr(help, "-no-kqemu"))
|
||||
*flags |= QEMUD_CMD_FLAG_KQEMU;
|
||||
+ if (strstr(help, "-no-reboot"))
|
||||
+ *flags |= QEMUD_CMD_FLAG_NO_REBOOT;
|
||||
if (*version >= 9000)
|
||||
*flags |= QEMUD_CMD_FLAG_VNC_COLON;
|
||||
ret = 0;
|
||||
@@ -858,6 +864,22 @@ static struct qemud_vm_def *qemudParseXM
|
||||
}
|
||||
xmlXPathFreeObject(obj);
|
||||
|
||||
+
|
||||
+ /* See if we disable reboots */
|
||||
+ obj = xmlXPathEval(BAD_CAST "string(/domain/on_reboot)", ctxt);
|
||||
+ if ((obj == NULL) || (obj->type != XPATH_STRING) ||
|
||||
+ (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
|
||||
+ def->noReboot = 0;
|
||||
+ } else {
|
||||
+ if (!strcmp((char*)obj->stringval, "destroy"))
|
||||
+ def->noReboot = 1;
|
||||
+ else
|
||||
+ def->noReboot = 0;
|
||||
+ }
|
||||
+ if (obj)
|
||||
+ xmlXPathFreeObject(obj);
|
||||
+
|
||||
+
|
||||
/* Extract OS type info */
|
||||
obj = xmlXPathEval(BAD_CAST "string(/domain/os/type[1])", ctxt);
|
||||
if ((obj == NULL) || (obj->type != XPATH_STRING) ||
|
||||
@@ -1220,6 +1242,8 @@ int qemudBuildCommandLine(struct qemud_s
|
||||
2 + /* cpus */
|
||||
2 + /* boot device */
|
||||
2 + /* monitor */
|
||||
+ (server->qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT &&
|
||||
+ vm->def->noReboot ? 1 : 0) + /* no-reboot */
|
||||
(vm->def->features & QEMUD_FEATURE_ACPI ? 0 : 1) + /* acpi */
|
||||
(vm->def->os.kernel[0] ? 2 : 0) + /* kernel */
|
||||
(vm->def->os.initrd[0] ? 2 : 0) + /* initrd */
|
||||
@@ -1255,6 +1279,11 @@ int qemudBuildCommandLine(struct qemud_s
|
||||
goto no_memory;
|
||||
if (!((*argv)[++n] = strdup("pty")))
|
||||
goto no_memory;
|
||||
+ if (server->qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT &&
|
||||
+ vm->def->noReboot) {
|
||||
+ if (!((*argv)[++n] = strdup("-no-reboot")))
|
||||
+ goto no_memory;
|
||||
+ }
|
||||
|
||||
if (!(vm->def->features & QEMUD_FEATURE_ACPI)) {
|
||||
if (!((*argv)[++n] = strdup("-no-acpi")))
|
||||
@@ -2517,6 +2546,17 @@ char *qemudGenerateXML(struct qemud_serv
|
||||
goto no_memory;
|
||||
}
|
||||
|
||||
+ if (bufferAdd(buf, " <on_poweroff>destroy</on_poweroff>\n", -1) < 0)
|
||||
+ goto no_memory;
|
||||
+ if (def->noReboot) {
|
||||
+ if (bufferAdd(buf, " <on_reboot>destroy</on_reboot>\n", -1) < 0)
|
||||
+ goto no_memory;
|
||||
+ } else {
|
||||
+ if (bufferAdd(buf, " <on_reboot>restart</on_reboot>\n", -1) < 0)
|
||||
+ goto no_memory;
|
||||
+ }
|
||||
+ if (bufferAdd(buf, " <on_crash>destroy</on_crash>\n", -1) < 0)
|
||||
+ goto no_memory;
|
||||
|
||||
if (bufferAdd(buf, " <devices>\n", -1) < 0)
|
||||
goto no_memory;
|
||||
diff -rup libvirt-0.2.2/qemud/internal.h libvirt-0.2.2.new/qemud/internal.h
|
||||
--- libvirt-0.2.2/qemud/internal.h 2007-04-11 10:13:36.000000000 -0400
|
||||
+++ libvirt-0.2.2.new/qemud/internal.h 2007-05-14 10:36:02.000000000 -0400
|
||||
@@ -161,6 +161,7 @@ enum qemud_vm_grapics_type {
|
||||
enum qemud_cmd_flags {
|
||||
QEMUD_CMD_FLAG_KQEMU = 1,
|
||||
QEMUD_CMD_FLAG_VNC_COLON = 2,
|
||||
+ QEMUD_CMD_FLAG_NO_REBOOT = 4,
|
||||
};
|
||||
|
||||
|
||||
@@ -191,6 +192,8 @@ struct qemud_vm_def {
|
||||
int maxmem;
|
||||
int vcpus;
|
||||
|
||||
+ int noReboot;
|
||||
+
|
||||
struct qemud_vm_os_def os;
|
||||
|
||||
int features;
|
||||
@@ -1,19 +0,0 @@
|
||||
--- libvirt-0.2.2/ChangeLog.sync-restart 2007-05-02 13:07:21.719425000 -0400
|
||||
+++ libvirt-0.2.2/ChangeLog 2007-05-02 13:08:23.204879000 -0400
|
||||
@@ -0,0 +1,5 @@
|
||||
+Wed May 2 17:55:12 IST 2007 Mark McLoughlin <markmc@redhat.com>
|
||||
+
|
||||
+ * qemud/libvirtd.in: synchronously restart the daemon in
|
||||
+ order to avoid https://bugzilla.redhat.com/238492
|
||||
+
|
||||
--- libvirt-0.2.2/qemud/libvirtd.in.sync-restart 2007-02-23 07:50:58.000000000 -0500
|
||||
+++ libvirt-0.2.2/qemud/libvirtd.in 2007-05-02 13:08:23.209868000 -0400
|
||||
@@ -34,7 +34,7 @@
|
||||
stop() {
|
||||
echo -n $"Stopping $SERVICE daemon: "
|
||||
|
||||
- killproc $PROCESS -TERM
|
||||
+ killproc $PROCESS
|
||||
RETVAL=$?
|
||||
echo
|
||||
if [ $RETVAL -eq 0 ]; then
|
||||
48
libvirt-0.4.1-daemon-startup.patch
Normal file
48
libvirt-0.4.1-daemon-startup.patch
Normal file
@@ -0,0 +1,48 @@
|
||||
diff -rup libvirt-0.4.1.orig/qemud/qemud.c libvirt-0.4.1.new/qemud/qemud.c
|
||||
--- libvirt-0.4.1.orig/qemud/qemud.c 2008-03-10 17:31:09.000000000 -0400
|
||||
+++ libvirt-0.4.1.new/qemud/qemud.c 2008-03-10 17:31:36.000000000 -0400
|
||||
@@ -393,7 +393,7 @@ static int qemudGoDaemon(void) {
|
||||
case -1:
|
||||
return -1;
|
||||
default:
|
||||
- return nextpid;
|
||||
+ _exit(0);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
@@ -418,8 +418,7 @@ static int qemudGoDaemon(void) {
|
||||
status != 0) {
|
||||
return -1;
|
||||
}
|
||||
-
|
||||
- return pid;
|
||||
+ _exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2116,16 +2115,12 @@ int main(int argc, char **argv) {
|
||||
goto error1;
|
||||
|
||||
if (godaemon) {
|
||||
- int pid;
|
||||
openlog("libvirtd", 0, 0);
|
||||
- pid = qemudGoDaemon();
|
||||
- if (pid < 0) {
|
||||
+ if (qemudGoDaemon() < 0) {
|
||||
qemudLog(QEMUD_ERR, _("Failed to fork as daemon: %s"),
|
||||
strerror(errno));
|
||||
goto error1;
|
||||
}
|
||||
- if (pid > 0)
|
||||
- goto out;
|
||||
|
||||
/* Choose the name of the PID file. */
|
||||
if (!pid_file) {
|
||||
@@ -2172,7 +2167,6 @@ int main(int argc, char **argv) {
|
||||
if (godaemon)
|
||||
closelog();
|
||||
|
||||
- out:
|
||||
ret = 0;
|
||||
|
||||
error2:
|
||||
128
libvirt-0.4.1-qemu-media-change.patch
Normal file
128
libvirt-0.4.1-qemu-media-change.patch
Normal file
@@ -0,0 +1,128 @@
|
||||
commit 570fd656d1b67e5d02f52e107946930257e811a7
|
||||
Author: Daniel Veillard <veillard@redhat.com>
|
||||
Date: Thu Mar 13 09:17:45 2008 +0000
|
||||
|
||||
* src/qemu_conf.c src/qemu_driver.c: patch from Cole Robinson
|
||||
fixing CD Rom change on live QEmu/KVM domains.
|
||||
Daniel
|
||||
|
||||
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
|
||||
index e54da5b..ebbd251 100644
|
||||
--- a/src/qemu_conf.c
|
||||
+++ b/src/qemu_conf.c
|
||||
@@ -594,9 +594,16 @@ static int qemudParseDiskXML(virConnectPtr conn,
|
||||
}
|
||||
|
||||
if (source == NULL) {
|
||||
- qemudReportError(conn, NULL, NULL, VIR_ERR_NO_SOURCE, target ? "%s" : NULL, target);
|
||||
- goto error;
|
||||
+ /* There is a case without the source
|
||||
+ * to the CD-ROM device
|
||||
+ */
|
||||
+ if (!device || STRNEQ((const char *) device, "cdrom")) {
|
||||
+ qemudReportError(conn, NULL, NULL, VIR_ERR_NO_SOURCE,
|
||||
+ target ? "%s" : NULL, target);
|
||||
+ goto error;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
if (target == NULL) {
|
||||
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_TARGET, source ? "%s" : NULL, source);
|
||||
goto error;
|
||||
@@ -630,7 +637,7 @@ static int qemudParseDiskXML(virConnectPtr conn,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- strncpy(disk->src, (const char *)source, NAME_MAX-1);
|
||||
+ strncpy(disk->src, (source ? (const char *) source : "\0"), NAME_MAX-1);
|
||||
disk->src[NAME_MAX-1] = '\0';
|
||||
|
||||
strncpy(disk->dst, (const char *)target, NAME_MAX-1);
|
||||
@@ -1747,9 +1754,15 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||
char dev[NAME_MAX];
|
||||
char file[PATH_MAX];
|
||||
if (!strcmp(disk->dst, "hdc") &&
|
||||
- disk->device == QEMUD_DISK_CDROM)
|
||||
- snprintf(dev, NAME_MAX, "-%s", "cdrom");
|
||||
- else
|
||||
+ disk->device == QEMUD_DISK_CDROM) {
|
||||
+ if (disk->src[0])
|
||||
+ snprintf(dev, NAME_MAX, "-%s", "cdrom");
|
||||
+ else {
|
||||
+ /* Don't put anything on the cmdline for an empty cdrom*/
|
||||
+ disk = disk->next;
|
||||
+ continue;
|
||||
+ }
|
||||
+ } else
|
||||
snprintf(dev, NAME_MAX, "-%s", disk->dst);
|
||||
snprintf(file, PATH_MAX, "%s", disk->src);
|
||||
|
||||
@@ -2906,8 +2919,10 @@ char *qemudGenerateXML(virConnectPtr conn,
|
||||
types[disk->type], devices[disk->device]) < 0)
|
||||
goto no_memory;
|
||||
|
||||
- if (virBufferVSprintf(buf, " <source %s='%s'/>\n", typeAttrs[disk->type], disk->src) < 0)
|
||||
- goto no_memory;
|
||||
+ if (disk->src[0])
|
||||
+ if (virBufferVSprintf(buf, " <source %s='%s'/>\n",
|
||||
+ typeAttrs[disk->type], disk->src) < 0)
|
||||
+ goto no_memory;
|
||||
|
||||
if (virBufferVSprintf(buf, " <target dev='%s'/>\n", disk->dst) < 0)
|
||||
goto no_memory;
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index 21f0fed..2b4c2a6 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -2223,23 +2223,29 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
char *cmd, *reply, *safe_path;
|
||||
|
||||
- /* Migrate to file */
|
||||
- safe_path = qemudEscapeMonitorArg(newdisk->src);
|
||||
- if (!safe_path) {
|
||||
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||
- "out of memory");
|
||||
- return -1;
|
||||
- }
|
||||
- if (asprintf (&cmd, "change %s \"%s\"",
|
||||
- /* XXX qemu may support multiple CDROM in future */
|
||||
- /* olddisk->dst */ "cdrom",
|
||||
- safe_path) == -1) {
|
||||
+ if (newdisk->src[0]) {
|
||||
+ safe_path = qemudEscapeMonitorArg(newdisk->src);
|
||||
+ if (!safe_path) {
|
||||
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||
+ "out of memory");
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (asprintf (&cmd, "change %s \"%s\"",
|
||||
+ /* XXX qemu may support multiple CDROM in future */
|
||||
+ /* olddisk->dst */ "cdrom",
|
||||
+ safe_path) == -1) {
|
||||
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||
+ "out of memory");
|
||||
+ free(safe_path);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ free(safe_path);
|
||||
+
|
||||
+ } else if (asprintf(&cmd, "eject cdrom") == -1) {
|
||||
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||
"out of memory");
|
||||
- free(safe_path);
|
||||
return -1;
|
||||
}
|
||||
- free(safe_path);
|
||||
|
||||
if (qemudMonitorCommand(driver, vm, cmd, &reply) < 0) {
|
||||
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, "cannot change cdrom media");
|
||||
@@ -2248,7 +2254,7 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
|
||||
}
|
||||
free(reply);
|
||||
free(cmd);
|
||||
- strcpy(olddisk->dst, newdisk->dst);
|
||||
+ strcpy(olddisk->src, newdisk->src);
|
||||
olddisk->type = newdisk->type;
|
||||
return 0;
|
||||
}
|
||||
38
libvirt-0.4.1-qemud1.patch
Normal file
38
libvirt-0.4.1-qemud1.patch
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
Avoid segfault upon early libvirtd failure.
|
||||
* qemud/qemud.c (main): Don't call qemudCleanup on an
|
||||
uninitialized pointer.
|
||||
|
||||
By the way, even though this evoked a warning from gcc,
|
||||
"make distcheck" passes. Obviously, that means the distcheck
|
||||
rule is inadequate. I'll fix it so that it turns on -Werror
|
||||
for the final build.
|
||||
|
||||
Signed-off-by: Jim Meyering <meyering@redhat.com>
|
||||
---
|
||||
qemud/qemud.c | 5 +++--
|
||||
1 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/qemud/qemud.c b/qemud/qemud.c
|
||||
index 96fdf32..b6b82ed 100644
|
||||
--- a/qemud/qemud.c
|
||||
+++ b/qemud/qemud.c
|
||||
@@ -2025,7 +2025,7 @@ libvirt management daemon:\n\
|
||||
|
||||
#define MAX_LISTEN 5
|
||||
int main(int argc, char **argv) {
|
||||
- struct qemud_server *server;
|
||||
+ struct qemud_server *server = NULL;
|
||||
struct sigaction sig_action;
|
||||
int sigpipe[2];
|
||||
const char *pid_file = NULL;
|
||||
@@ -2180,7 +2180,8 @@ int main(int argc, char **argv) {
|
||||
unlink (pid_file);
|
||||
|
||||
error1:
|
||||
- qemudCleanup(server);
|
||||
+ if (server)
|
||||
+ qemudCleanup(server);
|
||||
return ret;
|
||||
}
|
||||
|
||||
23
libvirt-0.4.1-qemud2.patch
Normal file
23
libvirt-0.4.1-qemud2.patch
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
Don't use first byte of string as a pointer.
|
||||
* src/qemu_conf.c (qemudReportError): Use the pointer, errorMessage,
|
||||
not its first byte, errorMessage[0].
|
||||
|
||||
Signed-off-by: Jim Meyering <meyering@redhat.com>
|
||||
---
|
||||
src/qemu_conf.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
|
||||
index eead0bc..e54da5b 100644
|
||||
--- a/src/qemu_conf.c
|
||||
+++ b/src/qemu_conf.c
|
||||
@@ -68,7 +68,7 @@ void qemudReportError(virConnectPtr conn,
|
||||
errorMessage[0] = '\0';
|
||||
}
|
||||
|
||||
- virerr = __virErrorMsg(code, (errorMessage[0] ? errorMessage[0] : NULL));
|
||||
+ virerr = __virErrorMsg(code, (errorMessage[0] ? errorMessage : NULL));
|
||||
__virRaiseError(conn, dom, net, VIR_FROM_QEMU, code, VIR_ERR_ERROR,
|
||||
virerr, errorMessage, NULL, -1, -1, virerr, errorMessage);
|
||||
}
|
||||
63
libvirt-0.4.1-tap-ifname.patch
Normal file
63
libvirt-0.4.1-tap-ifname.patch
Normal file
@@ -0,0 +1,63 @@
|
||||
diff -rupN libvirt-0.4.1.orig/src/bridge.c libvirt-0.4.1.new/src/bridge.c
|
||||
--- libvirt-0.4.1.orig/src/bridge.c 2008-02-28 06:16:21.000000000 -0500
|
||||
+++ libvirt-0.4.1.new/src/bridge.c 2008-03-13 11:25:12.000000000 -0400
|
||||
@@ -313,7 +313,6 @@ brDeleteInterface(brControl *ctl ATTRIBU
|
||||
int
|
||||
brAddTap(brControl *ctl,
|
||||
const char *bridge,
|
||||
- unsigned char *macaddr,
|
||||
char *ifname,
|
||||
int maxlen,
|
||||
int *tapfd)
|
||||
@@ -357,18 +356,6 @@ brAddTap(brControl *ctl,
|
||||
}
|
||||
|
||||
if (ioctl(fd, TUNSETIFF, &try) == 0) {
|
||||
- struct ifreq addr;
|
||||
- memset(&addr, 0, sizeof(addr));
|
||||
- memcpy(addr.ifr_hwaddr.sa_data, macaddr, 6);
|
||||
- addr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
|
||||
-
|
||||
- /* Device actually starts in 'UP' state, but it
|
||||
- * needs to be down to set the MAC addr
|
||||
- */
|
||||
- if ((errno = brSetInterfaceUp(ctl, try.ifr_name, 0)))
|
||||
- goto error;
|
||||
- if (ioctl(fd, SIOCSIFHWADDR, &addr) != 0)
|
||||
- goto error;
|
||||
if ((errno = brAddInterface(ctl, bridge, try.ifr_name)))
|
||||
goto error;
|
||||
if ((errno = brSetInterfaceUp(ctl, try.ifr_name, 1)))
|
||||
diff -rupN libvirt-0.4.1.orig/src/bridge.h libvirt-0.4.1.new/src/bridge.h
|
||||
--- libvirt-0.4.1.orig/src/bridge.h 2008-02-28 06:16:21.000000000 -0500
|
||||
+++ libvirt-0.4.1.new/src/bridge.h 2008-03-13 11:25:12.000000000 -0400
|
||||
@@ -62,7 +62,6 @@ int brDeleteInterface (brContr
|
||||
|
||||
int brAddTap (brControl *ctl,
|
||||
const char *bridge,
|
||||
- unsigned char *mac,
|
||||
char *ifname,
|
||||
int maxlen,
|
||||
int *tapfd);
|
||||
diff -rupN libvirt-0.4.1.orig/src/qemu_conf.c libvirt-0.4.1.new/src/qemu_conf.c
|
||||
--- libvirt-0.4.1.orig/src/qemu_conf.c 2008-03-13 11:24:39.000000000 -0400
|
||||
+++ libvirt-0.4.1.new/src/qemu_conf.c 2008-03-13 11:25:12.000000000 -0400
|
||||
@@ -1540,7 +1540,6 @@ qemudNetworkIfaceConnect(virConnectPtr c
|
||||
}
|
||||
|
||||
if ((err = brAddTap(driver->brctl, brname,
|
||||
- net->mac,
|
||||
ifname, BR_IFNAME_MAXLEN, &tapfd))) {
|
||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||
"Failed to add tap interface '%s' to bridge '%s' : %s",
|
||||
@@ -1548,7 +1547,9 @@ qemudNetworkIfaceConnect(virConnectPtr c
|
||||
goto error;
|
||||
}
|
||||
|
||||
- snprintf(tapfdstr, sizeof(tapfdstr), "tap,fd=%d,script=,vlan=%d", tapfd, vlan);
|
||||
+ snprintf(tapfdstr, sizeof(tapfdstr),
|
||||
+ "tap,fd=%d,script=,vlan=%d,ifname=%s",
|
||||
+ tapfd, vlan, ifname);
|
||||
|
||||
if (!(retval = strdup(tapfdstr)))
|
||||
goto no_memory;
|
||||
21
libvirt-0.4.1-xen-boot-device.patch
Normal file
21
libvirt-0.4.1-xen-boot-device.patch
Normal file
@@ -0,0 +1,21 @@
|
||||
commit 2bcf35336cd649e58c08d7cf3452a8d4353bcf85
|
||||
Author: Daniel Veillard <veillard@redhat.com>
|
||||
Date: Fri Mar 7 09:23:30 2008 +0000
|
||||
|
||||
* src/xend_internal.c: applied patch from Cole Robinson to not
|
||||
loose the boot tag when defining a fully virtualized xen domain
|
||||
Daniel
|
||||
|
||||
diff --git a/src/xend_internal.c b/src/xend_internal.c
|
||||
index 8bbc28f..fef54f8 100644
|
||||
--- a/src/xend_internal.c
|
||||
+++ b/src/xend_internal.c
|
||||
@@ -1323,7 +1323,7 @@ xend_parse_sexp_desc_os(virConnectPtr xend, struct sexpr *node, virBufferPtr buf
|
||||
if (hvm)
|
||||
virBufferVSprintf(buf, " <loader>%s</loader>\n", loader);
|
||||
|
||||
- if (kernel) {
|
||||
+ if ((kernel) && ((!loader) || (STRNEQ(kernel, loader)))) {
|
||||
virBufferVSprintf(buf, " <kernel>%s</kernel>\n", kernel);
|
||||
if (initrd && initrd[0])
|
||||
virBufferVSprintf(buf, " <initrd>%s</initrd>\n", initrd);
|
||||
146
libvirt-iscsi-sysfs4.patch
Normal file
146
libvirt-iscsi-sysfs4.patch
Normal file
@@ -0,0 +1,146 @@
|
||||
--- a/src/storage_backend_iscsi.c 4 Mar 2008 20:02:34 -0000 1.3
|
||||
+++ b/src/storage_backend_iscsi.c 26 Mar 2008 22:07:05 -0000
|
||||
@@ -170,20 +170,91 @@
|
||||
virStorageBackendISCSIMakeLUN(virConnectPtr conn,
|
||||
virStoragePoolObjPtr pool,
|
||||
char **const groups,
|
||||
- void *data ATTRIBUTE_UNUSED)
|
||||
+ void *data)
|
||||
{
|
||||
virStorageVolDefPtr vol;
|
||||
int fd = -1;
|
||||
+ unsigned int target, channel, id, lun;
|
||||
char lunid[100];
|
||||
- char *dev = groups[4];
|
||||
int opentries = 0;
|
||||
char *devpath = NULL;
|
||||
+ char *session = data;
|
||||
+ char sysfs_path[PATH_MAX];
|
||||
+ char *dev = NULL;
|
||||
+ DIR *sysdir;
|
||||
+ struct dirent *block_dirent;
|
||||
+ struct stat sbuf;
|
||||
+ int len;
|
||||
+
|
||||
+ if ((virStrToLong_ui(groups[0], NULL, 10, &target) < 0) ||
|
||||
+ (virStrToLong_ui(groups[1], NULL, 10, &channel) < 0) ||
|
||||
+ (virStrToLong_ui(groups[2], NULL, 10, &id) < 0) ||
|
||||
+ (virStrToLong_ui(groups[3], NULL, 10, &lun) < 0)) {
|
||||
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("Failed parsing iscsiadm commands"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (lun == 0) {
|
||||
+ /* the 0'th LUN isn't a real LUN, it's just a control LUN; skip it */
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ snprintf(sysfs_path, PATH_MAX,
|
||||
+ "/sys/class/iscsi_session/session%s/device/"
|
||||
+ "target%d:%d:%d/%d:%d:%d:%d/block",
|
||||
+ session, target, channel, id, target, channel, id, lun);
|
||||
+
|
||||
+ if (stat(sysfs_path, &sbuf) < 0) {
|
||||
+ /* block path in subdir didn't exist; this is unexpected, so fail */
|
||||
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("Failed to find the sysfs path for %d:%d:%d:%d: %s"),
|
||||
+ target, channel, id, lun, strerror(errno));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ sysdir = opendir(sysfs_path);
|
||||
+ if (sysdir == NULL) {
|
||||
+ /* we failed for some reason; return an error */
|
||||
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("Failed to opendir sysfs path %s: %s"),
|
||||
+ sysfs_path, strerror(errno));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ while ((block_dirent = readdir(sysdir)) != NULL) {
|
||||
+ len = strlen(block_dirent->d_name);
|
||||
+ if ((len == 1 && block_dirent->d_name[0] == '.') ||
|
||||
+ (len == 2 && block_dirent->d_name[0] == '.' && block_dirent->d_name[1] == '.')) {
|
||||
+ /* the . and .. directories; just skip them */
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* OK, not . or ..; let's see if it is a SCSI device */
|
||||
+ if (len > 2 &&
|
||||
+ block_dirent->d_name[0] == 's' &&
|
||||
+ block_dirent->d_name[1] == 'd') {
|
||||
+ /* looks like a scsi device, smells like scsi device; it must be
|
||||
+ a scsi device */
|
||||
+ dev = strdup(block_dirent->d_name);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ closedir(sysdir);
|
||||
+
|
||||
+ if (dev == NULL) {
|
||||
+ /* we didn't find the sd? device we were looking for; fail */
|
||||
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("Failed to find SCSI device for %d:%d:%d:%d: %s"),
|
||||
+ target, channel, id, lun, strerror(errno));
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
snprintf(lunid, sizeof(lunid)-1, "lun-%s", groups[3]);
|
||||
|
||||
if ((vol = calloc(1, sizeof(virStorageVolDef))) == NULL) {
|
||||
virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("volume"));
|
||||
- return -1;
|
||||
+ goto cleanup;
|
||||
}
|
||||
|
||||
if ((vol->name = strdup(lunid)) == NULL) {
|
||||
@@ -197,6 +268,8 @@
|
||||
}
|
||||
strcpy(devpath, "/dev/");
|
||||
strcat(devpath, dev);
|
||||
+ free(dev);
|
||||
+ dev = NULL;
|
||||
/* It can take a little while between logging into the ISCSI
|
||||
* server and udev creating the /dev nodes, so if we get ENOENT
|
||||
* we must retry a few times - they should eventually appear.
|
||||
@@ -258,6 +331,7 @@
|
||||
if (fd != -1) close(fd);
|
||||
free(devpath);
|
||||
virStorageVolDefFree(vol);
|
||||
+ free(dev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -281,14 +355,13 @@
|
||||
* scsi1 Channel 00 Id 0 Lun: 5
|
||||
* Attached scsi disk sdg State: running
|
||||
*
|
||||
- * Need 2 regex to match alternating lines
|
||||
+ * Need a regex to match the Channel:Id:Lun lines
|
||||
*/
|
||||
const char *regexes[] = {
|
||||
- "^\\s*scsi(\\S+)\\s+Channel\\s+(\\S+)\\s+Id\\s+(\\S+)\\s+Lun:\\s+(\\S+)\\s*$",
|
||||
- "^\\s*Attached\\s+scsi\\s+disk\\s+(\\S+)\\s+State:\\s+running\\s*$"
|
||||
+ "^\\s*scsi(\\S+)\\s+Channel\\s+(\\S+)\\s+Id\\s+(\\S+)\\s+Lun:\\s+(\\S+)\\s*$"
|
||||
};
|
||||
int vars[] = {
|
||||
- 4, 1
|
||||
+ 4
|
||||
};
|
||||
const char *prog[] = {
|
||||
ISCSIADM, "--mode", "session", "-r", session, "-P", "3", NULL,
|
||||
@@ -296,11 +369,11 @@
|
||||
|
||||
return virStorageBackendRunProgRegex(conn, pool,
|
||||
prog,
|
||||
- 2,
|
||||
+ 1,
|
||||
regexes,
|
||||
vars,
|
||||
virStorageBackendISCSIMakeLUN,
|
||||
- NULL);
|
||||
+ (void *)session);
|
||||
}
|
||||
|
||||
|
||||
17
libvirt-source-dir-fix.patch
Normal file
17
libvirt-source-dir-fix.patch
Normal file
@@ -0,0 +1,17 @@
|
||||
Index: src/storage_conf.c
|
||||
===================================================================
|
||||
RCS file: /data/cvs/libvirt/src/storage_conf.c,v
|
||||
retrieving revision 1.3
|
||||
retrieving revision 1.4
|
||||
diff -u -r1.3 -r1.4
|
||||
--- a/src/storage_conf.c 27 Feb 2008 10:37:19 -0000 1.3
|
||||
+++ b/src/storage_conf.c 28 Mar 2008 17:56:44 -0000 1.4
|
||||
@@ -479,7 +479,7 @@
|
||||
}
|
||||
if ((options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_DIR) &&
|
||||
def->source.dir &&
|
||||
- virBufferVSprintf(buf," <directory path='%s'/>\n", def->source.dir) < 0)
|
||||
+ virBufferVSprintf(buf," <dir path='%s'/>\n", def->source.dir) < 0)
|
||||
goto no_memory;
|
||||
if ((options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_ADAPTER) &&
|
||||
def->source.adapter &&
|
||||
17
libvirt-storage-api-iscsi-sendtarget.patch
Normal file
17
libvirt-storage-api-iscsi-sendtarget.patch
Normal file
@@ -0,0 +1,17 @@
|
||||
--- /home/boston/clalance/devel/libvirt--devel/src/storage_backend_iscsi.c 2008-02-13 13:48:32.497466000 -0500
|
||||
+++ libvirt-0.4.0/src/storage_backend_iscsi.c 2008-02-11 17:19:35.000000000 -0500
|
||||
@@ -143,6 +143,14 @@ static int virStorageBackendISCSIConnect
|
||||
"--targetname", pool->def->source.devices[0].path, action, NULL
|
||||
};
|
||||
|
||||
+ const char *cmdsendtarget[] = {
|
||||
+ ISCSIADM, "--mode", "discovery", "--type", "sendtargets",
|
||||
+ "--portal", portal, NULL
|
||||
+ };
|
||||
+
|
||||
+ if (virRun(conn, (char **)cmdsendtarget, NULL) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (virRun(conn, (char **)cmdargv, NULL) < 0)
|
||||
return -1;
|
||||
|
||||
279
libvirt.spec
279
libvirt.spec
@@ -1,18 +1,39 @@
|
||||
# -*- rpm-spec -*-
|
||||
|
||||
# This macro is used for the continuous automated builds. It just
|
||||
# allows an extra fragment based on the timestamp to be appended
|
||||
# to the release. This distinguishes automated builds, from formal
|
||||
# Fedora RPM builds
|
||||
%define _extra_release %{?dist:%{dist}}%{!?dist:%{?extra_release:%{extra_release}}}
|
||||
%if "%{fedora}" >= "8"
|
||||
%define with_polkit 1
|
||||
%define with_proxy no
|
||||
%else
|
||||
%define with_polkit 0
|
||||
%define with_proxy yes
|
||||
%endif
|
||||
|
||||
%if "%{fedora}"
|
||||
%ifarch ppc64
|
||||
%define with_qemu 0
|
||||
%else
|
||||
%define with_qemu 1
|
||||
%endif
|
||||
%else
|
||||
%define with_qemu 0
|
||||
%endif
|
||||
|
||||
Summary: Library providing a simple API virtualization
|
||||
Name: libvirt
|
||||
Version: 0.2.3
|
||||
Release: 1%{?_extra_release}
|
||||
Version: 0.4.1
|
||||
Release: 6%{?dist}%{?extra_release}
|
||||
License: LGPL
|
||||
Group: Development/Libraries
|
||||
Source: libvirt-%{version}.tar.gz
|
||||
Patch0: libvirt-0.4.1-qemud1.patch
|
||||
Patch1: libvirt-0.4.1-qemud2.patch
|
||||
Patch2: %{name}-%{version}-daemon-startup.patch
|
||||
Patch3: %{name}-%{version}-qemu-media-change.patch
|
||||
Patch4: %{name}-%{version}-xen-boot-device.patch
|
||||
Patch5: %{name}-%{version}-tap-ifname.patch
|
||||
Patch6: libvirt-storage-api-iscsi-sendtarget.patch
|
||||
Patch7: libvirt-iscsi-sysfs4.patch
|
||||
Patch8: libvirt-source-dir-fix.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
||||
URL: http://libvirt.org/
|
||||
BuildRequires: python python-devel
|
||||
@@ -20,18 +41,80 @@ Requires: libxml2
|
||||
Requires: readline
|
||||
Requires: ncurses
|
||||
Requires: dnsmasq
|
||||
Requires: bridge-utils
|
||||
Requires: iptables
|
||||
# So remote clients can access libvirt over SSH tunnel
|
||||
# (client invokes 'nc' against the UNIX socket on the server)
|
||||
Requires: nc
|
||||
Requires: cyrus-sasl
|
||||
# Not technically required, but makes 'out-of-box' config
|
||||
# work correctly & doesn't have onerous dependencies
|
||||
Requires: cyrus-sasl-md5
|
||||
%if %{with_polkit}
|
||||
Requires: PolicyKit >= 0.6
|
||||
%endif
|
||||
# For mount/umount in FS driver
|
||||
BuildRequires: util-linux
|
||||
# PPC64 has no Xen nor QEmu, try to build anyway
|
||||
%ifnarch ppc64
|
||||
%if %{with_qemu}
|
||||
# From QEMU RPMs
|
||||
Requires: /usr/bin/qemu-img
|
||||
%else
|
||||
# From Xen RPMs
|
||||
Requires: /usr/sbin/qcow-create
|
||||
%endif
|
||||
%endif
|
||||
# For LVM drivers
|
||||
Requires: lvm2
|
||||
# For ISCSI driver
|
||||
Requires: iscsi-initiator-utils
|
||||
# For disk driver
|
||||
Requires: parted
|
||||
%ifarch i386 x86_64 ia64
|
||||
BuildRequires: xen-devel
|
||||
%endif
|
||||
BuildRequires: libxml2-devel
|
||||
BuildRequires: readline-devel
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: gettext
|
||||
BuildRequires: libsysfs-devel
|
||||
BuildRequires: /sbin/iptables
|
||||
BuildRequires: gnutls-devel
|
||||
BuildRequires: avahi-devel
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: dnsmasq
|
||||
BuildRequires: bridge-utils
|
||||
%if %{with_qemu}
|
||||
BuildRequires: qemu
|
||||
%endif
|
||||
BuildRequires: cyrus-sasl-devel
|
||||
%if %{with_polkit}
|
||||
BuildRequires: PolicyKit-devel >= 0.6
|
||||
%endif
|
||||
# For mount/umount in FS driver
|
||||
BuildRequires: util-linux
|
||||
# PPC64 has no Xen nor QEmu, try to build anyway
|
||||
%ifnarch ppc64
|
||||
%if %{with_qemu}
|
||||
# From QEMU RPMs
|
||||
BuildRequires: /usr/bin/qemu-img
|
||||
%else
|
||||
# From Xen RPMs
|
||||
BuildRequires: /usr/sbin/qcow-create
|
||||
%endif
|
||||
%endif
|
||||
# For LVM drivers
|
||||
BuildRequires: lvm2
|
||||
# For ISCSI driver
|
||||
BuildRequires: iscsi-initiator-utils
|
||||
# For disk driver
|
||||
BuildRequires: parted-devel
|
||||
Obsoletes: libvir
|
||||
ExclusiveArch: i386 x86_64 ia64
|
||||
|
||||
# Fedora build root suckage
|
||||
BuildRequires: gawk
|
||||
|
||||
%description
|
||||
Libvirt is a C toolkit to interract with the virtualization capabilities
|
||||
Libvirt is a C toolkit to interact with the virtualization capabilities
|
||||
of recent versions of Linux (and other OSes).
|
||||
|
||||
%package devel
|
||||
@@ -39,6 +122,9 @@ Summary: Libraries, includes, etc. to compile with the libvirt library
|
||||
Group: Development/Libraries
|
||||
Requires: libvirt = %{version}
|
||||
Requires: pkgconfig
|
||||
%ifarch i386 x86_64 ia64
|
||||
Requires: xen-devel
|
||||
%endif
|
||||
Obsoletes: libvir-devel
|
||||
|
||||
%description devel
|
||||
@@ -54,26 +140,58 @@ Obsoletes: libvir-python
|
||||
%description python
|
||||
The libvirt-python package contains a module that permits applications
|
||||
written in the Python programming language to use the interface
|
||||
supplied by the libvirt library to use the the virtualization capabilities
|
||||
supplied by the libvirt library to use the virtualization capabilities
|
||||
of recent versions of Linux (and other OSes).
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
|
||||
%build
|
||||
%configure --with-init-script=redhat --with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid
|
||||
# Xen is available only on i386 x86_64 ia64
|
||||
%ifarch i386 i686 x86_64 ia64
|
||||
%configure --with-init-script=redhat \
|
||||
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||
--with-remote-file=%{_localstatedir}/run/libvirtd.pid \
|
||||
--with-xen-proxy=%{with_proxy}
|
||||
%else
|
||||
%ifnarch ppc64
|
||||
%configure --without-xen \
|
||||
--with-init-script=redhat \
|
||||
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
|
||||
%else
|
||||
%configure --without-xen \
|
||||
--without-qemu \
|
||||
--with-init-script=redhat \
|
||||
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
|
||||
%endif
|
||||
%endif
|
||||
|
||||
make
|
||||
|
||||
%install
|
||||
rm -fr %{buildroot}
|
||||
|
||||
%makeinstall
|
||||
(cd docs/examples ; make clean ; rm -rf .deps)
|
||||
(cd docs/examples ; make clean ; rm -rf .deps Makefile Makefile.in)
|
||||
(cd docs/examples/python ; rm -f Makefile Makefile.in)
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
|
||||
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/run/libvirt/
|
||||
# Default dir for disk images defined in SELinux policy
|
||||
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/libvirt/images/
|
||||
|
||||
# We don't want to install /etc/libvirt/qemu/networks in the main %files list
|
||||
# because if the admin wants to delete the default network completely, we don't
|
||||
@@ -129,19 +247,27 @@ fi
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart
|
||||
%{_sysconfdir}/rc.d/init.d/libvirtd
|
||||
%dir %{_sysconfdir}/libvirt
|
||||
%dir %{_sysconfdir}/libvirt/qemu
|
||||
%dir %{_sysconfdir}/libvirt/qemu/networks
|
||||
%dir %{_sysconfdir}/libvirt/qemu/networks/autostart
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf
|
||||
%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
|
||||
%dir %{_datadir}/libvirt/
|
||||
%dir %{_datadir}/libvirt/networks/
|
||||
%{_datadir}/libvirt/networks/default.xml
|
||||
%dir %{_localstatedir}/run/libvirt/
|
||||
%dir %{_localstatedir}/lib/libvirt/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/images/
|
||||
%if %{with_polkit}
|
||||
%{_datadir}/PolicyKit/policy/libvirtd.policy
|
||||
%endif
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
|
||||
%if %{with_proxy} == "yes"
|
||||
%attr(4755, root, root) %{_libexecdir}/libvirt_proxy
|
||||
%attr(0755, root, root) %{_sbindir}/libvirt_qemud
|
||||
%doc docs/libvirt.rng
|
||||
%endif
|
||||
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
|
||||
%attr(0755, root, root) %{_sbindir}/libvirtd
|
||||
%doc docs/*.rng
|
||||
%doc docs/*.xml
|
||||
|
||||
%files devel
|
||||
%defattr(-, root, root)
|
||||
@@ -171,27 +297,106 @@ fi
|
||||
%doc docs/examples/python
|
||||
|
||||
%changelog
|
||||
* Fri Jun 8 2007 Daniel Veillard <veillard@redhat.com> - 0.2.3-1.fc7
|
||||
* Fri Mar 28 2008 Chris Lalancette <clalance@redhat.com> - 0.4.1-6.fc9
|
||||
- When dumping XML for a storage pool, make the <source> directory tag
|
||||
match the <dir> tag used for specifying the pool in the first place
|
||||
|
||||
* Thu Mar 27 2008 Chris Lalancette <clalance@redhat.com> - 0.4.1-5.fc9
|
||||
- Do iscsiadm sendtarget before trying to do login
|
||||
- Do sysfs scanning for iSCSI LUNs instead of trying to parse them from
|
||||
iscsiadm session output
|
||||
|
||||
* Thu Mar 13 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-4.fc9
|
||||
- Fix QEMU tap device setup
|
||||
- Fix Xen boot device XML processing
|
||||
- Fixed QEMU cdrom media change
|
||||
|
||||
* Mon Mar 10 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-3.fc9
|
||||
- Fixed daemon startup when run with --daemon flag
|
||||
|
||||
* Mon Mar 3 2008 Daniel Veillard <veillard@redhat.com> - 0.4.1-2.fc9
|
||||
- 2 patches found just after the release
|
||||
|
||||
* Mon Mar 3 2008 Daniel Veillard <veillard@redhat.com> - 0.4.1-1.fc9
|
||||
- Release of 0.4.1
|
||||
- Storage APIs
|
||||
- xenner support
|
||||
- lots of assorted improvements, bugfixes and cleanups
|
||||
- documentation and localization improvements
|
||||
|
||||
* Wed Feb 20 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 0.4.0-5
|
||||
- Autorebuild for GCC 4.3
|
||||
|
||||
* Fri Jan 18 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-4.fc9
|
||||
- Fix SSH tunnelling (rhbz #428743)
|
||||
- Fix back-compat for nodeinfo call changes.
|
||||
|
||||
* Sun Jan 13 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-3.fc9
|
||||
- Fix crash when no auth callback
|
||||
|
||||
* Wed Jan 2 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-2.fc9
|
||||
- Fix reading large config files (rhbz #426425)
|
||||
- Fix crash when connecting to a PolicyKit enabled server with not auth callback (rhbz #427107)
|
||||
|
||||
* Tue Dec 18 2007 Daniel Veillard <veillard@redhat.com> - 0.4.0-1.fc8
|
||||
- Release of 0.4.0
|
||||
- SASL based authentication
|
||||
- PolicyKit authentication
|
||||
- improved NUMA and statistics support
|
||||
- lots of assorted improvements, bugfixes and cleanups
|
||||
- documentation and localization improvements
|
||||
|
||||
* Mon Oct 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.3.3-2.fc8
|
||||
- Added QEMU driver config file support
|
||||
- Added example config files
|
||||
|
||||
* Sun Sep 30 2007 Daniel Veillard <veillard@redhat.com> - 0.3.3-1
|
||||
- Release of 0.3.3
|
||||
- Avahi support
|
||||
- NUMA support
|
||||
- lots of assorted improvements, bugfixes and cleanups
|
||||
- documentation and localization improvements
|
||||
|
||||
* Fri Aug 24 2007 Daniel Veillard <veillard@redhat.com> - 0.3.2-2.fc8
|
||||
- also build on arches where Xen is not available
|
||||
|
||||
* Tue Aug 21 2007 Daniel Veillard <veillard@redhat.com> - 0.3.2-1.fc8
|
||||
- Release of 0.3.2
|
||||
- API for domains migration
|
||||
- APIs for collecting statistics on disks and interfaces
|
||||
- lots of assorted bugfixes and cleanups
|
||||
- documentation and localization improvements
|
||||
|
||||
* Thu Aug 16 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-4.fc8
|
||||
- Fixes missing Requires for libvirt-devel
|
||||
|
||||
* Thu Jul 26 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-3.fc8
|
||||
- adds fix for bug #249594
|
||||
|
||||
* Wed Jul 25 2007 Jesse Keating <jkeating@redhat.com> - 0.3.1-2
|
||||
- Rebuild for RH #249435
|
||||
|
||||
* Tue Jul 24 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-1.fc8
|
||||
- Release of 0.3.1
|
||||
- localtime clock support
|
||||
- PS/2 and USB input devices
|
||||
- lots of assorted bugfixes and cleanups
|
||||
- documentation and localization improvements
|
||||
|
||||
* Mon Jul 9 2007 Daniel Veillard <veillard@redhat.com> - 0.3.0-1.fc8
|
||||
- Release of 0.3.0
|
||||
- Secure remote access support
|
||||
- unification of daemons
|
||||
- lots of assorted bugfixes and cleanups
|
||||
- documentation and localization improvements
|
||||
|
||||
* Fri Jun 8 2007 Daniel Veillard <veillard@redhat.com> - 0.2.3-1.fc8
|
||||
- Release of 0.2.3
|
||||
- lot of assorted bugfixes and cleanups
|
||||
- support for Xen-3.1
|
||||
- new scheduler API
|
||||
|
||||
* Mon May 14 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.2-4.fc7
|
||||
- Fixed uninitialized value causing stack overflow
|
||||
- Fixed bridged networking when no virtual network is defined (bz 239273)
|
||||
|
||||
* Thu May 3 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.2-3.fc7
|
||||
- Fixed init script restart race
|
||||
- Remove duplicate <graphics> tag for HVM
|
||||
- Support -no-reboot in qemu for installs
|
||||
- Disable xm config file driver for 3.0.5
|
||||
- Force dnsmasq ordering for resolv.conf
|
||||
|
||||
* Fri Apr 21 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.2-2.fc7
|
||||
- Added Requires on dnsmasq for virtual networking
|
||||
|
||||
* Tue Apr 17 2007 Daniel Veillard <veillard@redhat.com> - 0.2.2-1.fc7
|
||||
* Tue Apr 17 2007 Daniel Veillard <veillard@redhat.com> - 0.2.2-1
|
||||
- Release of 0.2.2
|
||||
- lot of assorted bugfixes and cleanups
|
||||
- preparing for Xen-3.0.5
|
||||
@@ -201,7 +406,7 @@ fi
|
||||
- fix scriptlet error (need to own more directories)
|
||||
- update description text
|
||||
|
||||
* Fri Mar 16 2007 Daniel Veillard <veillard@redhat.com> - 0.2.1-1.fc7
|
||||
* Fri Mar 16 2007 Daniel Veillard <veillard@redhat.com> - 0.2.1-1
|
||||
- Release of 0.2.1
|
||||
- lot of bug and portability fixes
|
||||
- Add support for network autostart and init scripts
|
||||
|
||||
Reference in New Issue
Block a user