diff --git a/32on64-extra-mem.patch b/32on64-extra-mem.patch index 6d40a91..2df2ae9 100644 --- a/32on64-extra-mem.patch +++ b/32on64-extra-mem.patch @@ -2,7 +2,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2559,7 +2559,7 @@ class XendDomainInfo: +@@ -2560,7 +2560,7 @@ class XendDomainInfo: vtd_mem = ((vtd_mem + 1023) / 1024) * 1024 # Make sure there's enough RAM available for the domain diff --git a/bdrv_open2_fix_flags.patch b/bdrv_open2_fix_flags.patch new file mode 100644 index 0000000..0659c3f --- /dev/null +++ b/bdrv_open2_fix_flags.patch @@ -0,0 +1,126 @@ +diff -uNrp xen-3.4.0-testing.orig/tools/ioemu-remote/block.c xen-3.4.0-testing/tools/ioemu-remote/block.c +--- xen-3.4.0-testing.orig/tools/ioemu-remote/block.c 2009-06-09 14:02:11.000000000 +0800 ++++ xen-3.4.0-testing/tools/ioemu-remote/block.c 2009-06-09 14:07:40.000000000 +0800 +@@ -347,7 +347,7 @@ int bdrv_file_open(BlockDriverState **pb + + int bdrv_open(BlockDriverState *bs, const char *filename, int flags) + { +- return bdrv_open2(bs, filename, flags, NULL); ++ return bdrv_open2(bs, filename, flags|BDRV_O_RDWR, NULL); + } + + int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, +@@ -416,12 +416,13 @@ int bdrv_open2(BlockDriverState *bs, con + } + bs->drv = drv; + bs->opaque = qemu_mallocz(drv->instance_size); +- /* Note: for compatibility, we open disk image files as RDWR, and +- RDONLY as fallback */ + if (!(flags & BDRV_O_FILE)) +- open_flags = BDRV_O_RDWR | (flags & BDRV_O_CACHE_MASK); ++ open_flags = flags & BDRV_O_CACHE_MASK; + else + open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT); ++ if (!(open_flags & BDRV_O_RDWR)) ++ bs->read_only = 1; ++ + ret = drv->bdrv_open(bs, filename, open_flags); + if ((ret == -EACCES || ret == -EPERM) && !(flags & BDRV_O_FILE)) { + ret = drv->bdrv_open(bs, filename, open_flags & ~BDRV_O_RDWR); +diff -uNrp xen-3.4.0-testing.orig/tools/ioemu-remote/hw/usb-msd.c xen-3.4.0-testing/tools/ioemu-remote/hw/usb-msd.c +--- xen-3.4.0-testing.orig/tools/ioemu-remote/hw/usb-msd.c 2009-06-09 14:02:11.000000000 +0800 ++++ xen-3.4.0-testing/tools/ioemu-remote/hw/usb-msd.c 2009-06-09 14:06:50.000000000 +0800 +@@ -551,7 +551,7 @@ USBDevice *usb_msd_init(const char *file + s = qemu_mallocz(sizeof(MSDState)); + + bdrv = bdrv_new("usb"); +- if (bdrv_open2(bdrv, filename, 0, drv) < 0) ++ if (bdrv_open2(bdrv, filename, BDRV_O_RDWR, drv) < 0) + goto fail; + s->bs = bdrv; + *pbs = bdrv; +diff -uNrp xen-3.4.0-testing.orig/tools/ioemu-remote/qemu-img.c xen-3.4.0-testing/tools/ioemu-remote/qemu-img.c +--- xen-3.4.0-testing.orig/tools/ioemu-remote/qemu-img.c 2009-06-09 14:02:11.000000000 +0800 ++++ xen-3.4.0-testing/tools/ioemu-remote/qemu-img.c 2009-06-09 14:06:32.000000000 +0800 +@@ -32,7 +32,7 @@ + #endif + + /* Default to cache=writeback as data integrity is not important for qemu-tcg. */ +-#define BRDV_O_FLAGS BDRV_O_CACHE_WB ++#define BDRV_O_FLAGS BDRV_O_CACHE_WB + + static void QEMU_NORETURN error(const char *fmt, ...) + { +@@ -185,7 +185,7 @@ static int read_password(char *buf, int + #endif + + static BlockDriverState *bdrv_new_open(const char *filename, +- const char *fmt) ++ const char *fmt, int flags) + { + BlockDriverState *bs; + BlockDriver *drv; +@@ -201,7 +201,7 @@ static BlockDriverState *bdrv_new_open(c + } else { + drv = &bdrv_raw; + } +- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) { ++ if (bdrv_open2(bs, filename, flags, drv) < 0) { + error("Could not open '%s'", filename); + } + if (bdrv_is_encrypted(bs)) { +@@ -253,7 +253,7 @@ static int img_create(int argc, char **a + size = 0; + if (base_filename) { + BlockDriverState *bs; +- bs = bdrv_new_open(base_filename, NULL); ++ bs = bdrv_new_open(base_filename, NULL, BDRV_O_RDWR); + bdrv_get_geometry(bs, &size); + size *= 512; + bdrv_delete(bs); +@@ -332,7 +332,7 @@ static int img_commit(int argc, char **a + } else { + drv = NULL; + } +- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) { ++ if (bdrv_open2(bs, filename, BDRV_O_RDWR, drv) < 0) { + error("Could not open '%s'", filename); + } + ret = bdrv_commit(bs); +@@ -455,7 +455,8 @@ static int img_convert(int argc, char ** + + total_sectors = 0; + for (bs_i = 0; bs_i < bs_n; bs_i++) { +- bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt); ++ bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, ++ BDRV_O_CACHE_WB|BDRV_O_RDONLY); + if (!bs[bs_i]) + error("Could not open '%s'", argv[optind + bs_i]); + bdrv_get_geometry(bs[bs_i], &bs_sectors); +@@ -483,7 +484,7 @@ static int img_convert(int argc, char ** + } + } + +- out_bs = bdrv_new_open(out_filename, out_fmt); ++ out_bs = bdrv_new_open(out_filename, out_fmt, BDRV_O_CACHE_WB|BDRV_O_RDWR); + + bs_i = 0; + bs_offset = 0; +@@ -706,7 +707,7 @@ static int img_info(int argc, char **arg + } else { + drv = NULL; + } +- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) { ++ if (bdrv_open2(bs, filename, BDRV_O_FLAGS|BDRV_O_RDWR, drv) < 0) { + error("Could not open '%s'", filename); + } + bdrv_get_format(bs, fmt_name, sizeof(fmt_name)); +@@ -810,7 +811,7 @@ static void img_snapshot(int argc, char + if (!bs) + error("Not enough memory"); + +- if (bdrv_open2(bs, filename, 0, NULL) < 0) { ++ if (bdrv_open2(bs, filename, BDRV_O_RDWR, NULL) < 0) { + error("Could not open '%s'", filename); + } + diff --git a/bdrv_open2_flags_2.patch b/bdrv_open2_flags_2.patch new file mode 100644 index 0000000..c2d566e --- /dev/null +++ b/bdrv_open2_flags_2.patch @@ -0,0 +1,91 @@ +diff -uNrp xen-3.4.0-testing.orig.2/tools/ioemu-remote/hw/xen_blktap.c xen-3.4.0-testing/tools/ioemu-remote/hw/xen_blktap.c +--- xen-3.4.0-testing.orig.2/tools/ioemu-remote/hw/xen_blktap.c 2009-06-09 14:08:58.000000000 +0800 ++++ xen-3.4.0-testing/tools/ioemu-remote/hw/xen_blktap.c 2009-06-09 14:09:08.000000000 +0800 +@@ -227,6 +227,7 @@ static int open_disk(struct td_state *s, + BlockDriver* drv; + char* devname; + static int devnumber = 0; ++ int flags = readonly ? BDRV_O_RDONLY : BDRV_O_RDWR; + int i; + + DPRINTF("Opening %s as blktap%d\n", path, devnumber); +@@ -249,7 +250,7 @@ static int open_disk(struct td_state *s, + DPRINTF("%s driver specified\n", drv ? drv->format_name : "No"); + + /* Open the image */ +- if (bdrv_open2(bs, path, 0, drv) != 0) { ++ if (bdrv_open2(bs, path, flags, drv) != 0) { + fprintf(stderr, "Could not open image file %s\n", path); + return -ENOMEM; + } +diff -uNrp xen-3.4.0-testing.orig.2/tools/ioemu-remote/xenstore.c xen-3.4.0-testing/tools/ioemu-remote/xenstore.c +--- xen-3.4.0-testing.orig.2/tools/ioemu-remote/xenstore.c 2009-06-09 14:08:58.000000000 +0800 ++++ xen-3.4.0-testing/tools/ioemu-remote/xenstore.c 2009-06-09 14:09:08.000000000 +0800 +@@ -64,7 +64,8 @@ static void insert_media(void *opaque) + for (i = 0; i < MAX_DRIVES + 1; i++) { + bs = drives_table[i].bdrv; + if (media_filename[i] && bs && bs->filename[0] == '\0') { +- bdrv_open2(bs, media_filename[i], 0, &bdrv_raw); ++ /* Temporary BDRV_O_RDWR */ ++ bdrv_open2(bs, media_filename[i], BDRV_O_RDWR, &bdrv_raw); + pstrcpy(bs->filename, sizeof(bs->filename), media_filename[i]); + free(media_filename[i]); + media_filename[i] = NULL; +@@ -314,9 +315,9 @@ void xenstore_parse_domain_config(int hv + { + char **e_danger = NULL; + char *buf = NULL; +- char *fpath = NULL, *bpath = NULL, *btype = NULL, ++ char *fpath = NULL, *bpath = NULL, *btype = NULL, *mode = NULL, + *dev = NULL, *params = NULL, *drv = NULL; +- int i, j, any_hdN = 0, ret, is_tap; ++ int i, j, any_hdN = 0, ret, is_tap, flags; + unsigned int len, num, hd_index, pci_devid = 0; + BlockDriverState *bs; + BlockDriver *format; +@@ -378,7 +379,8 @@ void xenstore_parse_domain_config(int hv + } + + for (i = 0; i < num; i++) { +- format = NULL; /* don't know what the format is yet */ ++ flags = 0; ++ format = NULL; /* don't know what the format is yet */ + /* read the backend path */ + xenstore_get_backend_path(&bpath, "vbd", danger_path, hvm_domid, e_danger[i]); + if (bpath == NULL) +@@ -464,6 +466,17 @@ void xenstore_parse_domain_config(int hv + format = &bdrv_raw; + } + ++ /* read the mode of the device */ ++ if (pasprintf(&buf, "%s/mode", bpath) == -1) ++ continue; ++ free(mode); ++ mode = xs_read(xsh, XBT_NULL, buf, &len); ++ ++ if (!strcmp(mode, "r") || !strcmp(mode, "ro")) ++ flags |= BDRV_O_RDONLY; ++ if (!strcmp(mode, "w") || !strcmp(mode, "rw")) ++ flags |= BDRV_O_RDWR; ++ + #if 0 + /* Phantom VBDs are disabled because the use of paths + * from guest-controlled areas in xenstore is unsafe. +@@ -509,7 +522,7 @@ void xenstore_parse_domain_config(int hv + #ifdef CONFIG_STUBDOM + if (pasprintf(&danger_buf, "%s/device/vbd/%s", danger_path, e_danger[i]) == -1) + continue; +- if (bdrv_open2(bs, danger_buf, BDRV_O_CACHE_WB /* snapshot and write-back */, &bdrv_raw) == 0) { ++ if (bdrv_open2(bs, danger_buf, flags|BDRV_O_CACHE_WB /* snapshot and write-back */, &bdrv_raw) == 0) { + pstrcpy(bs->filename, sizeof(bs->filename), params); + } else + #endif +@@ -535,7 +548,7 @@ void xenstore_parse_domain_config(int hv + } + } + pstrcpy(bs->filename, sizeof(bs->filename), params); +- if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0) { ++ if (bdrv_open2(bs, params, flags|BDRV_O_CACHE_WB /* snapshot and write-back */, format) < 0) { + fprintf(stderr, "qemu: could not open vbd '%s' or hard disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?", format ? format->format_name : "0"); + } else { + char* snapshot = get_snapshot_name(atoi(e_danger[i])); diff --git a/blktap.patch b/blktap.patch index 911167f..7ae2031 100644 --- a/blktap.patch +++ b/blktap.patch @@ -5,7 +5,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2939,7 +2939,7 @@ class XendDomainInfo: +@@ -2940,7 +2940,7 @@ class XendDomainInfo: (fn, BOOTLOADER_LOOPBACK_DEVICE)) vbd = { diff --git a/hv_xen_base.patch b/hv_xen_base.patch index 4701c3c..f2d8755 100644 --- a/hv_xen_base.patch +++ b/hv_xen_base.patch @@ -26,7 +26,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c =================================================================== --- xen-3.4.0-testing.orig/xen/arch/x86/hvm/hvm.c +++ xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c -@@ -45,6 +45,7 @@ +@@ -46,6 +46,7 @@ #include #include #include @@ -34,7 +34,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c #include #include #include -@@ -373,6 +374,7 @@ void hvm_domain_relinquish_resources(str +@@ -374,6 +375,7 @@ void hvm_domain_relinquish_resources(str void hvm_domain_destroy(struct domain *d) { @@ -42,7 +42,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c hvm_funcs.domain_destroy(d); rtc_deinit(d); stdvga_deinit(d); -@@ -673,8 +675,14 @@ int hvm_vcpu_initialise(struct vcpu *v) +@@ -674,8 +676,14 @@ int hvm_vcpu_initialise(struct vcpu *v) { int rc; @@ -57,7 +57,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c if ( (rc = hvm_funcs.vcpu_initialise(v)) != 0 ) goto fail2; -@@ -721,12 +729,14 @@ int hvm_vcpu_initialise(struct vcpu *v) +@@ -726,6 +734,7 @@ int hvm_vcpu_initialise(struct vcpu *v) hvm_funcs.vcpu_destroy(v); fail2: vlapic_destroy(v); @@ -65,14 +65,15 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c fail1: return rc; } - +@@ -733,6 +742,7 @@ int hvm_vcpu_initialise(struct vcpu *v) void hvm_vcpu_destroy(struct vcpu *v) { + tasklet_kill(&v->arch.hvm_vcpu.assert_evtchn_irq_tasklet); + hyperx_intercept_vcpu_destroy(v); hvm_vcpu_cacheattr_destroy(v); vlapic_destroy(v); hvm_funcs.vcpu_destroy(v); -@@ -1678,7 +1688,7 @@ void hvm_cpuid(unsigned int input, unsig +@@ -1684,7 +1694,7 @@ void hvm_cpuid(unsigned int input, unsig return; if ( cpuid_hypervisor_leaves(input, eax, ebx, ecx, edx) ) @@ -81,7 +82,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c domain_cpuid(v->domain, input, *ecx, eax, ebx, ecx, edx); -@@ -1690,6 +1700,8 @@ void hvm_cpuid(unsigned int input, unsig +@@ -1696,6 +1706,8 @@ void hvm_cpuid(unsigned int input, unsig if ( vlapic_hw_disabled(vcpu_vlapic(v)) ) __clear_bit(X86_FEATURE_APIC & 31, edx); } @@ -90,7 +91,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c } void hvm_rdtsc_intercept(struct cpu_user_regs *regs) -@@ -1789,6 +1801,8 @@ int hvm_msr_read_intercept(struct cpu_us +@@ -1795,6 +1807,8 @@ int hvm_msr_read_intercept(struct cpu_us break; default: @@ -99,7 +100,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c return hvm_funcs.msr_read_intercept(regs); } -@@ -1877,6 +1891,8 @@ int hvm_msr_write_intercept(struct cpu_u +@@ -1883,6 +1897,8 @@ int hvm_msr_write_intercept(struct cpu_u break; default: @@ -108,7 +109,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c return hvm_funcs.msr_write_intercept(regs); } -@@ -2044,6 +2060,10 @@ int hvm_do_hypercall(struct cpu_user_reg +@@ -2050,6 +2066,10 @@ int hvm_do_hypercall(struct cpu_user_reg case 0: break; } @@ -119,7 +120,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c if ( (eax & 0x80000000) && is_viridian_domain(curr->domain) ) return viridian_hypercall(regs); -@@ -2560,6 +2580,15 @@ long do_hvm_op(unsigned long op, XEN_GUE +@@ -2566,6 +2586,15 @@ long do_hvm_op(unsigned long op, XEN_GUE rc = -EINVAL; break; diff --git a/init.xend b/init.xend index 84144ce..b8ccdbf 100644 --- a/init.xend +++ b/init.xend @@ -21,7 +21,7 @@ . /etc/rc.status rc_reset -XEND=`pidofproc /usr/sbin/xend` +XEND=`pidof -x /usr/sbin/xend` await_daemons_up() { diff --git a/init.xendomains b/init.xendomains index 48e9d79..836149e 100644 --- a/init.xendomains +++ b/init.xendomains @@ -55,8 +55,7 @@ xendomains_abort() check() { - XEND=`ps ax | grep -w xend | grep -w python | awk '{ print $1 }'` - XEND=`echo $XEND` + XEND=`pidof -x /usr/sbin/xend` if [ "$1" = status ]; then if [ ! -e /proc/xen/capabilities ] || [ ! -r "$XENDOM_CONFIG" ] || [ -z "$XEND" ]; then diff --git a/python2.6-fixes.patch b/python2.6-fixes.patch deleted file mode 100644 index 2819327..0000000 --- a/python2.6-fixes.patch +++ /dev/null @@ -1,45 +0,0 @@ -Index: xen-3.4.0-testing/tools/python/xen/util/acmpolicy.py -=================================================================== ---- xen-3.4.0-testing.orig/tools/python/xen/util/acmpolicy.py -+++ xen-3.4.0-testing/tools/python/xen/util/acmpolicy.py -@@ -17,7 +17,10 @@ - #============================================================================ - - import os --import sha -+try: -+ import hashlib # python v2.6 or newer -+except ImportError: -+ import sha # python v2.5 or older - import stat - import array - import struct -Index: xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py -=================================================================== ---- xen-3.4.0-testing.orig/tools/python/xen/xend/XendAPI.py -+++ xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py -@@ -18,7 +18,6 @@ - import inspect - import os - import Queue --import sets - import string - import sys - import traceback -@@ -119,7 +118,7 @@ event_registrations = {} - def event_register(session, reg_classes): - if session not in event_registrations: - event_registrations[session] = { -- 'classes' : sets.Set(), -+ 'classes' : set(), - 'queue' : Queue.Queue(EVENT_QUEUE_LENGTH), - 'next-id' : 1 - } -@@ -131,7 +130,6 @@ def event_register(session, reg_classes) - event_registrations[session]['classes'].update(reg_classes) - - -- - def event_unregister(session, unreg_classes): - if session not in event_registrations: - return diff --git a/snapshot-xend.patch b/snapshot-xend.patch index 6642ccf..4f24522 100644 --- a/snapshot-xend.patch +++ b/snapshot-xend.patch @@ -115,7 +115,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendCheckpoint.py try: if not os.path.isdir("/var/lib/xen"): os.makedirs("/var/lib/xen") -@@ -98,52 +98,59 @@ def save(fd, dominfo, network, live, dst +@@ -98,52 +98,61 @@ def save(fd, dominfo, network, live, dst image_cfg = dominfo.info.get('image', {}) hvm = dominfo.info.is_hvm() @@ -191,6 +191,8 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendCheckpoint.py + domain_name) + if hvm: + dominfo.image.saveDeviceModel() ++ if name: ++ dominfo.image.resumeDeviceModel() + + if line == "suspend": + tochild.write("done\n") @@ -221,7 +223,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendCheckpoint.py if checkpoint: dominfo.resumeDomain() -@@ -207,6 +214,71 @@ def restore(xd, fd, dominfo = None, paus +@@ -207,6 +216,71 @@ def restore(xd, fd, dominfo = None, paus if othervm is not None and othervm.domid is not None: raise VmError("Domain '%s' already exists with ID '%d'" % (domconfig["name_label"], othervm.domid)) @@ -293,7 +295,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendCheckpoint.py if dominfo: dominfo.resume() else: -@@ -322,26 +394,7 @@ def restore(xd, fd, dominfo = None, paus +@@ -322,26 +396,7 @@ def restore(xd, fd, dominfo = None, paus dominfo.completeRestore(handler.store_mfn, handler.console_mfn) @@ -345,7 +347,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py xc = xen.lowlevel.xc.xc() xoptions = XendOptions.instance() -@@ -1418,6 +1419,181 @@ class XendDomain: +@@ -1421,6 +1422,187 @@ class XendDomain: raise XendError("can't write guest state file %s: %s" % (dst, ex[1])) @@ -367,6 +369,12 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py + if not dominfo: + raise XendInvalidDomain(str(domid)) + ++ snap_file = os.path.join(xoptions.get_xend_domains_path(), ++ dominfo.get_uuid(), "snapshots", name) ++ ++ if os.access(snap_file, os.F_OK): ++ raise XendError("Snapshot:%s exist for domain %s\n" % (name, str(domid))) ++ + if dominfo.getDomid() == DOM0_ID: + raise XendError("Cannot snapshot privileged domain %s" % str(domid)) + if dominfo._stateGet() != DOM_STATE_RUNNING: @@ -533,7 +541,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xm/main.py +++ xen-3.4.0-testing/tools/python/xen/xm/main.py @@ -120,6 +120,14 @@ SUBCOMMAND_HELP = { 'Restore a domain from a saved state.'), - 'save' : ('[-c] ', + 'save' : ('[-c|-f] ', 'Save a domain state to restore later.'), + 'snapshot-create' : ('[-d] ', + 'Snapshot a running domain.'), @@ -546,9 +554,9 @@ Index: xen-3.4.0-testing/tools/python/xen/xm/main.py 'shutdown' : (' [-waRH]', 'Shutdown a domain.'), 'top' : ('', 'Monitor a host and the domains in real time.'), 'unpause' : ('', 'Unpause a paused domain.'), -@@ -276,6 +284,9 @@ SUBCOMMAND_OPTIONS = { - 'save': ( +@@ -277,6 +285,9 @@ SUBCOMMAND_OPTIONS = { ('-c', '--checkpoint', 'Leave domain running after creating snapshot'), + ('-f', '--force', 'Force to overwrite exist file'), ), + 'snapshot-create': ( + ('-d', '--diskonly', 'Perform disk only snapshot of domain'), @@ -556,7 +564,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xm/main.py 'restore': ( ('-p', '--paused', 'Do not unpause domain after restoring it'), ), -@@ -302,6 +313,10 @@ common_commands = [ +@@ -303,6 +314,10 @@ common_commands = [ "restore", "resume", "save", @@ -567,7 +575,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xm/main.py "shell", "shutdown", "start", -@@ -333,6 +348,10 @@ domain_commands = [ +@@ -334,6 +349,10 @@ domain_commands = [ "restore", "resume", "save", @@ -578,7 +586,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xm/main.py "shutdown", "start", "suspend", -@@ -724,6 +743,62 @@ def xm_event_monitor(args): +@@ -725,6 +744,62 @@ def xm_event_monitor(args): # ######################################################################### @@ -640,8 +648,8 @@ Index: xen-3.4.0-testing/tools/python/xen/xm/main.py + def xm_save(args): - arg_check(args, "save", 2, 3) -@@ -2853,6 +2928,10 @@ commands = { + arg_check(args, "save", 2, 4) +@@ -2857,6 +2932,10 @@ commands = { "restore": xm_restore, "resume": xm_resume, "save": xm_save, diff --git a/svm-lmsl.patch b/svm-lmsl.patch index 22d736a..390ac6e 100644 --- a/svm-lmsl.patch +++ b/svm-lmsl.patch @@ -2,7 +2,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c =================================================================== --- xen-3.4.0-testing.orig/xen/arch/x86/hvm/hvm.c +++ xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c -@@ -537,11 +537,12 @@ static int hvm_load_cpu_ctxt(struct doma +@@ -538,11 +538,12 @@ static int hvm_load_cpu_ctxt(struct doma return -EINVAL; } @@ -16,7 +16,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/hvm/hvm.c (!cpu_has_ffxsr && (ctxt.msr_efer & EFER_FFXSE)) || ((ctxt.msr_efer & (EFER_LME|EFER_LMA)) == EFER_LMA) ) { -@@ -818,10 +819,11 @@ int hvm_set_efer(uint64_t value) +@@ -824,10 +825,11 @@ int hvm_set_efer(uint64_t value) value &= ~EFER_LMA; diff --git a/x86-cpufreq-report.patch b/x86-cpufreq-report.patch index a88978a..4ac74e3 100644 --- a/x86-cpufreq-report.patch +++ b/x86-cpufreq-report.patch @@ -19,15 +19,7 @@ Index: xen-3.4.0-testing/xen/arch/x86/platform_hypercall.c struct xen_platform_op curop, *op = &curop; if ( !IS_PRIV(current->domain) ) -@@ -313,7 +314,6 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe - { - uint32_t cpu; - uint64_t idletime, now = NOW(); -- struct vcpu *v; - struct xenctl_cpumap ctlmap; - cpumask_t cpumap; - XEN_GUEST_HANDLE(uint8) cpumap_bitmap; -@@ -386,6 +386,20 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe +@@ -385,6 +386,20 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe break; } break; diff --git a/x86-show-page-walk-early.patch b/x86-show-page-walk-early.patch index dff7f02..16680a0 100644 --- a/x86-show-page-walk-early.patch +++ b/x86-show-page-walk-early.patch @@ -134,7 +134,7 @@ Index: xen-3.4.0-testing/xen/include/asm-x86/mm.h =================================================================== --- xen-3.4.0-testing.orig/xen/include/asm-x86/mm.h +++ xen-3.4.0-testing/xen/include/asm-x86/mm.h -@@ -411,6 +411,7 @@ TYPE_SAFE(unsigned long,mfn); +@@ -412,6 +412,7 @@ TYPE_SAFE(unsigned long,mfn); #define machine_to_phys_mapping ((unsigned long *)RDWR_MPT_VIRT_START) #define INVALID_M2P_ENTRY (~0UL) #define VALID_M2P(_e) (!((_e) & (1UL<<(BITS_PER_LONG-1)))) diff --git a/xen-3.4.0-testing-src.tar.bz2 b/xen-3.4.0-testing-src.tar.bz2 index 0f9a336..7ad6c35 100644 --- a/xen-3.4.0-testing-src.tar.bz2 +++ b/xen-3.4.0-testing-src.tar.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9922e7477ca5425e756c86bb120a998c1f5528e3537295e2fc953b31191df5e0 -size 22574212 +oid sha256:f813543c4c975b9d0d95ecf2c4f8f08a8780673a45a1fd301ac2c225210da52c +size 22573690 diff --git a/xen-config.diff b/xen-config.diff index 9392a04..740cc5e 100644 --- a/xen-config.diff +++ b/xen-config.diff @@ -2,7 +2,7 @@ Index: xen-3.4.0-testing/Config.mk =================================================================== --- xen-3.4.0-testing.orig/Config.mk +++ xen-3.4.0-testing/Config.mk -@@ -117,14 +117,14 @@ QEMU_REMOTE=http://xenbits.xensource.com +@@ -124,14 +124,14 @@ QEMU_REMOTE=http://xenbits.xensource.com # Specify which qemu-dm to use. This may be `ioemu' to use the old # Mercurial in-tree version, or a local directory, or a git URL. # CONFIG_QEMU ?= ../qemu-xen.git diff --git a/xen-destdir.diff b/xen-destdir.diff index 006d4bb..c984170 100644 --- a/xen-destdir.diff +++ b/xen-destdir.diff @@ -26,11 +26,13 @@ Index: xen-3.4.0-testing/tools/security/Makefile =================================================================== --- xen-3.4.0-testing.orig/tools/security/Makefile +++ xen-3.4.0-testing/tools/security/Makefile -@@ -61,7 +61,7 @@ install: all $(ACM_CONFIG_FILE) +@@ -60,8 +60,8 @@ install: all $(ACM_CONFIG_FILE) + $(INSTALL_DATA) $(ACM_INST_HTML) $(DESTDIR)$(ACM_SECGEN_HTMLDIR) $(INSTALL_DIR) $(DESTDIR)$(ACM_SECGEN_CGIDIR) $(INSTALL_PROG) $(ACM_INST_CGI) $(DESTDIR)$(ACM_SECGEN_CGIDIR) - python python/setup.py install \ -- --prefix="$(PREFIX)" --root="$(DESTDIR)" --force +- $(PYTHON) python/setup.py install $(PYTHON_PREFIX_ARG) \ +- --root="$(DESTDIR)" --force ++ $(PYTHON) python/setup.py install \ + --prefix="/usr" --root="$(DESTDIR)" --force else .PHONY: all @@ -42,8 +44,8 @@ Index: xen-3.4.0-testing/tools/pygrub/Makefile @@ -11,7 +11,7 @@ build: .PHONY: install install: all - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \ -- --prefix="$(PREFIX)" --root="$(DESTDIR)" --force + CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py install \ +- $(PYTHON_PREFIX_ARG) --root="$(DESTDIR)" --force + --prefix="/usr" --root="$(DESTDIR)" --force $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot @@ -55,8 +57,8 @@ Index: xen-3.4.0-testing/tools/python/Makefile @@ -56,7 +56,7 @@ refresh-po: $(POTFILE) .PHONY: install install: install-messages install-dtd - CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \ -- --prefix="$(PREFIX)" --root="$(DESTDIR)" --force + CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py install \ +- $(PYTHON_PREFIX_ARG) --root="$(DESTDIR)" --force + --prefix="/usr" --root="$(DESTDIR)" --force install-dtd: all diff --git a/xen-domUloader.diff b/xen-domUloader.diff index 8b301ca..5988114 100644 --- a/xen-domUloader.diff +++ b/xen-domUloader.diff @@ -122,7 +122,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py import xen.util.xsm.xsm as security from xen.util import xsconstants -@@ -2134,6 +2134,10 @@ class XendDomainInfo: +@@ -2135,6 +2135,10 @@ class XendDomainInfo: deviceClass, config = self.info['devices'].get(dev_uuid) self._waitForDevice(deviceClass, config['devid']) @@ -133,7 +133,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py def _waitForDevice_destroy(self, deviceClass, devid, backpath): return self.getDeviceController(deviceClass).waitForDevice_destroy( devid, backpath) -@@ -2892,9 +2896,19 @@ class XendDomainInfo: +@@ -2893,9 +2897,19 @@ class XendDomainInfo: devtype = devinfo[0] disk = devinfo[1]['uname'] @@ -156,7 +156,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py if mounted: # This is a file, not a device. pygrub can cope with a # file if it's raw, but if it's QCOW or other such formats -@@ -2910,7 +2924,9 @@ class XendDomainInfo: +@@ -2911,7 +2925,9 @@ class XendDomainInfo: from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() @@ -167,7 +167,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py fn = BOOTLOADER_LOOPBACK_DEVICE try: -@@ -2920,8 +2936,10 @@ class XendDomainInfo: +@@ -2921,8 +2937,10 @@ class XendDomainInfo: if mounted: log.info("Unmounting %s from %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) diff --git a/xen-max-free-mem.diff b/xen-max-free-mem.diff index 453ce4d..a6b684f 100644 --- a/xen-max-free-mem.diff +++ b/xen-max-free-mem.diff @@ -94,7 +94,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1294,6 +1294,27 @@ class XendDomainInfo: +@@ -1295,6 +1295,27 @@ class XendDomainInfo: dev_str_list = dev_str_list + [dev_str] return dev_str_list diff --git a/xen-xmexample-vti.diff b/xen-xmexample-vti.diff index f3cf9d8..1d460f0 100644 --- a/xen-xmexample-vti.diff +++ b/xen-xmexample-vti.diff @@ -2,8 +2,8 @@ Index: xen-3.4.0-testing/tools/examples/Makefile =================================================================== --- xen-3.4.0-testing.orig/tools/examples/Makefile +++ xen-3.4.0-testing/tools/examples/Makefile -@@ -20,7 +20,6 @@ XEN_CONFIGS += xmexample.hvm-stubdom - XEN_CONFIGS += xmexample.hvm-dm +@@ -19,7 +19,6 @@ XEN_CONFIGS += xmexample.hvm + XEN_CONFIGS += xmexample.hvm-stubdom XEN_CONFIGS += xmexample.pv-grub XEN_CONFIGS += xmexample.nbd -XEN_CONFIGS += xmexample.vti diff --git a/xen.changes b/xen.changes index ac3327b..6ab38fc 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,36 @@ +------------------------------------------------------------------- +Thu Jun 11 14:17:22 MDT 2009 - carnold@novell.com + +- Update to Xen 3.4.1 RC2 c/s 19648. + +------------------------------------------------------------------- +Tue Jun 9 13:52:07 CST 2009 - wkong@novell.com +- bnc#504491 - drop write data when set read only disk in xen config + bdrv_open2_fix_flags.patch + bdrv_open2_flags_2.patch + +------------------------------------------------------------------- +Mon May 18 15:03:29 MDT 2009 - carnold@novell.com + +- Update to Xen 3.4.0 FCS c/s 19607 + +------------------------------------------------------------------- +Mon May 17 17:15:57 CST 2009 - wkong@novell.com +-bnc#485770 - check exsit file for save and snapshot-create + xm-save-check-file.patch + snapshot-xend.patch + +------------------------------------------------------------------- +Thu May 14 12:00:09 MDT 2009 - jfehlig@novell.com + +- bnc#503332 - Remove useless qcow tools + /usr/sbin/{qcow-create,img2qcow,qcow2raw} from xen-tools package. + +------------------------------------------------------------------- +Mon May 11 18:49:50 CST 2009 - wkong@novell.com +- bnc#477892 - snapshot windows can't accomplish. + snapshot-xend.patch + ------------------------------------------------------------------- Fri Apr 22 17:30:02 CST 2009 - wkong@novell.com diff --git a/xen.spec b/xen.spec index 44702e0..b7be93d 100644 --- a/xen.spec +++ b/xen.spec @@ -1,5 +1,5 @@ # -# spec file for package xen (Version 3.4.0_19590_01) +# spec file for package xen (Version 3.4.0_19648_01) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,7 +22,7 @@ Name: xen ExclusiveArch: %ix86 x86_64 %define xvers 3.4 %define xvermaj 3 -%define changeset 19590 +%define changeset 19648 %define xen_build_dir xen-3.4.0-testing %define with_kmp 0 BuildRequires: LibVNCServer-devel SDL-devel automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel ncurses-devel openssl openssl-devel pciutils-devel python-devel texinfo transfig @@ -37,7 +37,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit %if %{?with_kmp}0 BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 %endif -Version: 3.4.0_19590_01 +Version: 3.4.0_19648_01 Release: 1 License: GPL v2 only Group: System/Kernel @@ -113,13 +113,13 @@ Patch158: xen-api-auth.patch Patch159: tools-gdbserver-build.diff Patch160: network-route.patch # Needs to go upstream sometime, when python 2.6 is widespread -Patch161: python2.6-fixes.patch -Patch162: udev-rules.patch -Patch163: ioemu-vnc-resize.patch +Patch161: udev-rules.patch +Patch162: ioemu-vnc-resize.patch # Needs to go upstream -Patch164: checkpoint-rename.patch -Patch165: network-nat.patch -Patch166: ioemu-debuginfo.patch +Patch163: checkpoint-rename.patch +Patch164: network-nat.patch +Patch165: ioemu-debuginfo.patch +Patch166: xm-save-check-file.patch # Patches for snapshot support Patch200: snapshot-ioemu-save.patch Patch201: snapshot-ioemu-restore.patch @@ -136,6 +136,8 @@ Patch215: tapdisk-ioemu-shutdown-fix.patch Patch220: qemu-dm-segfault.patch Patch221: blktapctrl-default-to-ioemu.patch Patch222: ioemu-blktap-barriers.patch +Patch223: bdrv_open2_fix_flags.patch +Patch224: bdrv_open2_flags_2.patch # Jim's domain lock patch Patch300: xend-domain-lock.patch # Patches from Jan @@ -556,6 +558,8 @@ Authors: %patch220 -p1 %patch221 -p1 %patch222 -p1 +%patch223 -p1 +%patch224 -p1 %patch300 -p1 #%patch340 -p1 - Port Later if needed %patch341 -p1 @@ -660,6 +664,7 @@ export XEN_PYTHON_NATIVE_INSTALL=1 make -C tools install \ DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} cp tools/debugger/gdb/gdb-6.2.1-linux-i386-xen/gdb/gdbserver/gdbserver-xen $RPM_BUILD_ROOT/usr/bin/gdbserver-xen +rm -f $RPM_BUILD_ROOT/usr/sbin/{qcow-create,img2qcow,qcow2raw} make -C tools/misc/serial-split install \ DESTDIR=$RPM_BUILD_ROOT MANDIR=%{_mandir} %ifarch x86_64 @@ -704,7 +709,7 @@ install -m644 %SOURCE9 %SOURCE10 $RPM_BUILD_ROOT/etc/xen/examples/ # scripts rm -f $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd install -m755 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE16 %SOURCE17 $RPM_BUILD_ROOT/etc/xen/scripts/ -ln -s /etc/xen/scripts/xen-monitor $RPM_BUILD_ROOT/etc/xen/scripts/set-lock +ln -s /etc/xen/scripts/vm-monitor $RPM_BUILD_ROOT/etc/xen/scripts/set-lock # Xen API remote authentication files install -d $RPM_BUILD_ROOT/etc/pam.d install -m644 %SOURCE23 $RPM_BUILD_ROOT/etc/pam.d/xen-api @@ -788,9 +793,6 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug /usr/bin/gdbserver-xen /usr/sbin/blktapctrl /usr/sbin/flask-loadpolicy -/usr/sbin/img2qcow -/usr/sbin/qcow-create -/usr/sbin/qcow2raw /usr/sbin/rcxend /usr/sbin/rcxendomains /usr/sbin/tapdisk @@ -936,6 +938,24 @@ rm -f $RPM_BUILD_ROOT/%{_libdir}/xen/bin/qemu-dm.debug /sbin/ldconfig %changelog +* Thu Jun 11 2009 carnold@novell.com +- Update to Xen 3.4.1 RC2 c/s 19648. +* Tue Jun 09 2009 wkong@novell.com +- bnc#504491 - drop write data when set read only disk in xen config + bdrv_open2_fix_flags.patch + bdrv_open2_flags_2.patch +* Mon May 18 2009 carnold@novell.com +- Update to Xen 3.4.0 FCS c/s 19607 +* Sun May 17 2009 wkong@novell.com +-bnc#485770 - check exsit file for save and snapshot-create + xm-save-check-file.patch + snapshot-xend.patch +* Thu May 14 2009 jfehlig@novell.com +- bnc#503332 - Remove useless qcow tools + /usr/sbin/{qcow-create,img2qcow,qcow2raw} from xen-tools package. +* Mon May 11 2009 wkong@novell.com +- bnc#477892 - snapshot windows can't accomplish. + snapshot-xend.patch * Wed Apr 22 2009 wkong@novell.com - Backport two qcow2 patches from qemu org ioemu-6816-qcow2-revert-6404-6405-6407.patch diff --git a/xenapi-console-protocol.patch b/xenapi-console-protocol.patch index c3d2f7f..73e8a43 100644 --- a/xenapi-console-protocol.patch +++ b/xenapi-console-protocol.patch @@ -2,7 +2,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -3570,6 +3570,14 @@ class XendDomainInfo: +@@ -3571,6 +3571,14 @@ class XendDomainInfo: if not config.has_key('backend'): config['backend'] = "00000000-0000-0000-0000-000000000000" diff --git a/xend-core-dump-loc.diff b/xend-core-dump-loc.diff index f325310..9a64fd9 100644 --- a/xend-core-dump-loc.diff +++ b/xend-core-dump-loc.diff @@ -2,7 +2,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2117,7 +2117,7 @@ class XendDomainInfo: +@@ -2118,7 +2118,7 @@ class XendDomainInfo: if not corefile: this_time = time.strftime("%Y-%m%d-%H%M.%S", time.localtime()) diff --git a/xend-domain-lock.patch b/xend-domain-lock.patch index 83550a2..397d64f 100644 --- a/xend-domain-lock.patch +++ b/xend-domain-lock.patch @@ -94,7 +94,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py XendTask.log_progress(0, 30, self._constructDomain) XendTask.log_progress(31, 60, self._initDomain) -@@ -2626,6 +2629,11 @@ class XendDomainInfo: +@@ -2627,6 +2630,11 @@ class XendDomainInfo: self._stateSet(DOM_STATE_HALTED) self.domid = None # Do not push into _stateSet()! @@ -106,7 +106,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomainInfo.py finally: self.refresh_shutdown_lock.release() -@@ -3992,6 +4000,74 @@ class XendDomainInfo: +@@ -3993,6 +4001,74 @@ class XendDomainInfo: def has_device(self, dev_class, dev_uuid): return (dev_uuid in self.info['%s_refs' % dev_class.lower()]) @@ -203,7 +203,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendOptions.py def __init__(self): self.configure() -@@ -368,6 +379,19 @@ class XendOptions: +@@ -368,6 +379,24 @@ class XendOptions: return self.get_config_int("qemu-dm-logrotate-count", self.qemu_dm_logrotate_count) @@ -218,7 +218,12 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendOptions.py + return self.get_config_string("xend-domain-lock-path", self.xend_domain_lock_path_default) + + def get_xend_domain_lock_utility(self): -+ return self.get_config_string('xend-domain-lock-utility', self.xend_domain_lock_utility) ++ s = self.get_config_string('xend-domain-lock-utility') ++ ++ if s: ++ return os.path.join(osdep.scripts_dir, s) ++ else: ++ return self.xend_domain_lock_utility + class XendOptionsFile(XendOptions): @@ -235,7 +240,7 @@ Index: xen-3.4.0-testing/tools/python/xen/xend/XendCheckpoint.py dominfo.migrateDevices(network, dst, DEV_MIGRATE_STEP2, domain_name) log.info("Domain %d suspended.", dominfo.getDomid()) -@@ -399,6 +400,7 @@ def restore(xd, fd, dominfo = None, paus +@@ -401,6 +402,7 @@ def restore(xd, fd, dominfo = None, paus if not paused: dominfo.unpause() @@ -251,7 +256,7 @@ Index: xen-3.4.0-testing/tools/hotplug/Linux/Makefile XEN_SCRIPTS += xen-hotplug-cleanup XEN_SCRIPTS += external-device-migrate XEN_SCRIPTS += vscsi -+XEN_SCRIPTS += domain-lock xen-monitor ++XEN_SCRIPTS += domain-lock vm-monitor XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh @@ -282,7 +287,7 @@ Index: xen-3.4.0-testing/tools/hotplug/Linux/domain-lock + local path=$1/lock + local name=$2 + -+ pid=`ps -efwww | grep xen-monitor | grep $name | awk '{print $2}'` ++ pid=`ps -efwww | grep vm-monitor | grep $name | awk '{print $2}'` + if [ -n "$pid" ]; then + kill $pid + rm -f $path @@ -343,10 +348,10 @@ Index: xen-3.4.0-testing/tools/hotplug/Linux/domain-lock + get_status $vm_path + ;; +esac -Index: xen-3.4.0-testing/tools/hotplug/Linux/xen-monitor +Index: xen-3.4.0-testing/tools/hotplug/Linux/vm-monitor =================================================================== --- /dev/null -+++ xen-3.4.0-testing/tools/hotplug/Linux/xen-monitor ++++ xen-3.4.0-testing/tools/hotplug/Linux/vm-monitor @@ -0,0 +1,41 @@ +#!/bin/bash + @@ -374,7 +379,7 @@ Index: xen-3.4.0-testing/tools/hotplug/Linux/xen-monitor + local rc=0 + + [ -f $path ] || touch $path -+ flock -x -w $HA_TICK $path $basedir/xen-monitor $* ++ flock -x -w $HA_TICK $path $basedir/vm-monitor $* + rc=$? + if [ $rc -eq 1 ]; then + echo `cat $path` @@ -386,6 +391,6 @@ Index: xen-3.4.0-testing/tools/hotplug/Linux/xen-monitor + +if [ $0 = "$basedir/set-lock" ]; then + create_lock $* -+elif [ $0 = "$basedir/xen-monitor" ]; then ++elif [ $0 = "$basedir/vm-monitor" ]; then + monitor $* +fi diff --git a/xm-save-check-file.patch b/xm-save-check-file.patch new file mode 100644 index 0000000..547c9c3 --- /dev/null +++ b/xm-save-check-file.patch @@ -0,0 +1,97 @@ +Index: xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py +=================================================================== +--- xen-3.4.0-testing.orig/tools/python/xen/xend/XendAPI.py ++++ xen-3.4.0-testing/tools/python/xen/xend/XendAPI.py +@@ -1817,10 +1817,10 @@ class XendAPI(object): + bool(live), port, node, ssl) + return xen_api_success_void() + +- def VM_save(self, _, vm_ref, dest, checkpoint): ++ def VM_save(self, _, vm_ref, dest, checkpoint, force): + xendom = XendDomain.instance() + xeninfo = xendom.get_vm_by_uuid(vm_ref) +- xendom.domain_save(xeninfo.getDomid(), dest, checkpoint) ++ xendom.domain_save(xeninfo.getDomid(), dest, checkpoint, force) + return xen_api_success_void() + + def VM_restore(self, _, src, paused): +Index: xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py +=================================================================== +--- xen-3.4.0-testing.orig/tools/python/xen/xend/XendDomain.py ++++ xen-3.4.0-testing/tools/python/xen/xend/XendDomain.py +@@ -1380,7 +1380,7 @@ class XendDomain: + finally: + sock.close() + +- def domain_save(self, domid, dst, checkpoint=False): ++ def domain_save(self, domid, dst, checkpoint=False, force=False): + """Start saving a domain to file. + + @param domid: Domain ID or Name +@@ -1396,6 +1396,9 @@ class XendDomain: + if not dominfo: + raise XendInvalidDomain(str(domid)) + ++ if os.access(dst, os.F_OK) and not force: ++ raise XendError("Save file:%s exist!\n" % dst) ++ + if dominfo.getDomid() == DOM0_ID: + raise XendError("Cannot save privileged domain %s" % str(domid)) + if dominfo._stateGet() != DOM_STATE_RUNNING: +Index: xen-3.4.0-testing/tools/python/xen/xm/main.py +=================================================================== +--- xen-3.4.0-testing.orig/tools/python/xen/xm/main.py ++++ xen-3.4.0-testing/tools/python/xen/xm/main.py +@@ -118,7 +118,7 @@ SUBCOMMAND_HELP = { + 'reset' : ('', 'Reset a domain.'), + 'restore' : (' [-p]', + 'Restore a domain from a saved state.'), +- 'save' : ('[-c] ', ++ 'save' : ('[-c|-f] ', + 'Save a domain state to restore later.'), + 'shutdown' : (' [-waRH]', 'Shutdown a domain.'), + 'top' : ('', 'Monitor a host and the domains in real time.'), +@@ -275,6 +275,7 @@ SUBCOMMAND_OPTIONS = { + ), + 'save': ( + ('-c', '--checkpoint', 'Leave domain running after creating snapshot'), ++ ('-f', '--force', 'Force to overwrite exist file'), + ), + 'restore': ( + ('-p', '--paused', 'Do not unpause domain after restoring it'), +@@ -726,18 +727,21 @@ def xm_event_monitor(args): + + def xm_save(args): + +- arg_check(args, "save", 2, 3) ++ arg_check(args, "save", 2, 4) + + try: +- (options, params) = getopt.gnu_getopt(args, 'c', ['checkpoint']) ++ (options, params) = getopt.gnu_getopt(args, 'cf', ['checkpoint', 'force']) + except getopt.GetoptError, opterr: + err(opterr) + usage('save') + + checkpoint = False ++ force = False + for (k, v) in options: + if k in ['-c', '--checkpoint']: + checkpoint = True ++ if k in ['-f', '--force']: ++ force = True + + if len(params) != 2: + err("Wrong number of parameters") +@@ -751,9 +755,9 @@ def xm_save(args): + sys.exit(1) + + if serverType == SERVER_XEN_API: +- server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint) ++ server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint, force) + else: +- server.xend.domain.save(dom, savefile, checkpoint) ++ server.xend.domain.save(dom, savefile, checkpoint, force) + + def xm_restore(args): + arg_check(args, "restore", 1, 2) diff --git a/xmclone.sh b/xmclone.sh index 0223a75..b92211f 100644 --- a/xmclone.sh +++ b/xmclone.sh @@ -679,7 +679,7 @@ then # if [ -n "$MAC" ] then - if [ "$SLE10" -a -d etc/sysconfig/network/ ] + if [ -d etc/sysconfig/network/ ] then echo "Changing the Network configuration in the newly copied image." pushd "etc/sysconfig/network/" > /dev/null @@ -694,7 +694,13 @@ then losetup -d $loopdev exit 1 fi - mv -f "$ETH0" ifcfg-eth-id-$MAC + if [ "$SLE10" ] + then + mv -f "$ETH0" ifcfg-eth-id-$MAC + else + sed -i -e "s,^LLADDR=.*$,LLADDR=\'$MAC\'," \ + ifcfg-eth0 + fi popd > /dev/null fi @@ -732,7 +738,7 @@ then sed -i -e "s,^IPADDR=.*$,IPADDR=$IP," \ ifcfg-eth-id-$MAC else - sed -i -e "s,^IPADDR=.*$,IPADDR=$IP/$MASK," \ + sed -i -e "s,^IPADDR=.*$,IPADDR=$IP/$MASK," \ ifcfg-eth0 fi popd > /dev/null