Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ef89c28371 | ||
|
410c32a92d | ||
|
14ed987212 | ||
|
dc3282ddcc | ||
|
5131ed5eb7 | ||
|
d3437922b3 |
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,4 +1,3 @@
|
|||||||
/.build*.log
|
.build*.log
|
||||||
/x86_64/
|
*.src.rpm
|
||||||
/*.src.rpm
|
qemu-0.9.1.tar.gz
|
||||||
/qemu-*.tar.xz
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
# The KVM HV implementation on Power can require a significant amount
|
|
||||||
# of unswappable memory (about half of which also needs to be host
|
|
||||||
# physically contiguous) to hold the guest's Hash Page Table (HPT) -
|
|
||||||
# roughly 1/64th of the guest's RAM size, minimum 16MiB.
|
|
||||||
#
|
|
||||||
# These limits allow unprivileged users to start smallish VMs, such as
|
|
||||||
# those used by libguestfs.
|
|
||||||
#
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1293024
|
|
||||||
#
|
|
||||||
* hard memlock 65536
|
|
||||||
* soft memlock 65536
|
|
@ -1,2 +0,0 @@
|
|||||||
SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \
|
|
||||||
TAG+="systemd" ENV{SYSTEMD_WANTS}="qemu-guest-agent.service"
|
|
@ -1 +0,0 @@
|
|||||||
allow virbr0
|
|
@ -1,11 +0,0 @@
|
|||||||
###
|
|
||||||
### This configuration file was provided by the qemu package.
|
|
||||||
### Feel free to update as needed.
|
|
||||||
###
|
|
||||||
|
|
||||||
###
|
|
||||||
### Set these options to enable nested virtualization
|
|
||||||
###
|
|
||||||
|
|
||||||
#options kvm_intel nested=1
|
|
||||||
#options kvm_amd nested=1
|
|
10
qemu-0.9.1-alpha-int.patch
Normal file
10
qemu-0.9.1-alpha-int.patch
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
--- qemu-0.9.1/target-alpha/exec.h.BAD 2008-12-31 23:17:10.000000000 -0600
|
||||||
|
+++ qemu-0.9.1/target-alpha/exec.h 2008-12-31 23:17:48.000000000 -0600
|
||||||
|
@@ -24,6 +24,7 @@
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "dyngen-exec.h"
|
||||||
|
+#include <stdint.h>
|
||||||
|
|
||||||
|
#define TARGET_LONG_BITS 64
|
||||||
|
|
212
qemu-0.9.1-block-rw-range-check.patch
Normal file
212
qemu-0.9.1-block-rw-range-check.patch
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
diff -rup qemu-0.9.1.orig/block.c qemu-0.9.1.new/block.c
|
||||||
|
--- qemu-0.9.1.orig/block.c 2008-02-26 18:03:00.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/block.c 2008-02-26 18:05:26.000000000 -0500
|
||||||
|
@@ -123,6 +123,60 @@ void path_combine(char *dest, int dest_s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int bdrv_rd_badreq_sectors(BlockDriverState *bs,
|
||||||
|
+ int64_t sector_num, int nb_sectors)
|
||||||
|
+{
|
||||||
|
+ return
|
||||||
|
+ nb_sectors < 0 ||
|
||||||
|
+ sector_num < 0 ||
|
||||||
|
+ nb_sectors > bs->total_sectors ||
|
||||||
|
+ sector_num > bs->total_sectors - nb_sectors;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int bdrv_rd_badreq_bytes(BlockDriverState *bs,
|
||||||
|
+ int64_t offset, int count)
|
||||||
|
+{
|
||||||
|
+ int64_t size = bs->total_sectors << SECTOR_BITS;
|
||||||
|
+ return
|
||||||
|
+ count < 0 ||
|
||||||
|
+ size < 0 ||
|
||||||
|
+ count > size ||
|
||||||
|
+ offset > size - count;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int bdrv_wr_badreq_sectors(BlockDriverState *bs,
|
||||||
|
+ int64_t sector_num, int nb_sectors)
|
||||||
|
+{
|
||||||
|
+ if (sector_num < 0 ||
|
||||||
|
+ nb_sectors < 0)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ if (sector_num > bs->total_sectors - nb_sectors) {
|
||||||
|
+ if (bs->autogrow)
|
||||||
|
+ bs->total_sectors = sector_num + nb_sectors;
|
||||||
|
+ else
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int bdrv_wr_badreq_bytes(BlockDriverState *bs,
|
||||||
|
+ int64_t offset, int count)
|
||||||
|
+{
|
||||||
|
+ int64_t size = bs->total_sectors << SECTOR_BITS;
|
||||||
|
+ if (count < 0 ||
|
||||||
|
+ offset < 0)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ if (offset > size - count) {
|
||||||
|
+ if (bs->autogrow)
|
||||||
|
+ bs->total_sectors = (offset + count + SECTOR_SIZE - 1) >> SECTOR_BITS;
|
||||||
|
+ else
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
static void bdrv_register(BlockDriver *bdrv)
|
||||||
|
{
|
||||||
|
@@ -331,6 +385,10 @@ int bdrv_open2(BlockDriverState *bs, con
|
||||||
|
bs->read_only = 0;
|
||||||
|
bs->is_temporary = 0;
|
||||||
|
bs->encrypted = 0;
|
||||||
|
+ bs->autogrow = 0;
|
||||||
|
+
|
||||||
|
+ if (flags & BDRV_O_AUTOGROW)
|
||||||
|
+ bs->autogrow = 1;
|
||||||
|
|
||||||
|
if (flags & BDRV_O_SNAPSHOT) {
|
||||||
|
BlockDriverState *bs1;
|
||||||
|
@@ -375,6 +433,7 @@ int bdrv_open2(BlockDriverState *bs, con
|
||||||
|
}
|
||||||
|
bs->drv = drv;
|
||||||
|
bs->opaque = qemu_mallocz(drv->instance_size);
|
||||||
|
+ bs->total_sectors = 0; /* driver will set if it does not do getlength */
|
||||||
|
if (bs->opaque == NULL && drv->instance_size > 0)
|
||||||
|
return -1;
|
||||||
|
/* Note: for compatibility, we open disk image files as RDWR, and
|
||||||
|
@@ -440,6 +499,7 @@ void bdrv_close(BlockDriverState *bs)
|
||||||
|
bs->drv = NULL;
|
||||||
|
|
||||||
|
/* call the change callback */
|
||||||
|
+ bs->total_sectors = 0;
|
||||||
|
bs->media_changed = 1;
|
||||||
|
if (bs->change_cb)
|
||||||
|
bs->change_cb(bs->change_opaque);
|
||||||
|
@@ -505,6 +565,8 @@ int bdrv_read(BlockDriverState *bs, int6
|
||||||
|
if (!drv)
|
||||||
|
return -ENOMEDIUM;
|
||||||
|
|
||||||
|
+ if (bdrv_rd_badreq_sectors(bs, sector_num, nb_sectors))
|
||||||
|
+ return -EDOM;
|
||||||
|
if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
|
||||||
|
memcpy(buf, bs->boot_sector_data, 512);
|
||||||
|
sector_num++;
|
||||||
|
@@ -545,6 +607,8 @@ int bdrv_write(BlockDriverState *bs, int
|
||||||
|
return -ENOMEDIUM;
|
||||||
|
if (bs->read_only)
|
||||||
|
return -EACCES;
|
||||||
|
+ if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors))
|
||||||
|
+ return -EDOM;
|
||||||
|
if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
|
||||||
|
memcpy(bs->boot_sector_data, buf, 512);
|
||||||
|
}
|
||||||
|
@@ -670,6 +734,8 @@ int bdrv_pread(BlockDriverState *bs, int
|
||||||
|
return -ENOMEDIUM;
|
||||||
|
if (!drv->bdrv_pread)
|
||||||
|
return bdrv_pread_em(bs, offset, buf1, count1);
|
||||||
|
+ if (bdrv_rd_badreq_bytes(bs, offset, count1))
|
||||||
|
+ return -EDOM;
|
||||||
|
return drv->bdrv_pread(bs, offset, buf1, count1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -685,6 +751,8 @@ int bdrv_pwrite(BlockDriverState *bs, in
|
||||||
|
return -ENOMEDIUM;
|
||||||
|
if (!drv->bdrv_pwrite)
|
||||||
|
return bdrv_pwrite_em(bs, offset, buf1, count1);
|
||||||
|
+ if (bdrv_wr_badreq_bytes(bs, offset, count1))
|
||||||
|
+ return -EDOM;
|
||||||
|
return drv->bdrv_pwrite(bs, offset, buf1, count1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -951,6 +1019,8 @@ int bdrv_write_compressed(BlockDriverSta
|
||||||
|
return -ENOMEDIUM;
|
||||||
|
if (!drv->bdrv_write_compressed)
|
||||||
|
return -ENOTSUP;
|
||||||
|
+ if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors))
|
||||||
|
+ return -EDOM;
|
||||||
|
return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1097,6 +1167,8 @@ BlockDriverAIOCB *bdrv_aio_read(BlockDri
|
||||||
|
|
||||||
|
if (!drv)
|
||||||
|
return NULL;
|
||||||
|
+ if (bdrv_rd_badreq_sectors(bs, sector_num, nb_sectors))
|
||||||
|
+ return NULL;
|
||||||
|
|
||||||
|
/* XXX: we assume that nb_sectors == 0 is suppored by the async read */
|
||||||
|
if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
|
||||||
|
@@ -1128,6 +1200,8 @@ BlockDriverAIOCB *bdrv_aio_write(BlockDr
|
||||||
|
return NULL;
|
||||||
|
if (bs->read_only)
|
||||||
|
return NULL;
|
||||||
|
+ if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors))
|
||||||
|
+ return NULL;
|
||||||
|
if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
|
||||||
|
memcpy(bs->boot_sector_data, buf, 512);
|
||||||
|
}
|
||||||
|
diff -rup qemu-0.9.1.orig/block.h qemu-0.9.1.new/block.h
|
||||||
|
--- qemu-0.9.1.orig/block.h 2008-01-06 14:38:42.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/block.h 2008-02-26 17:41:47.000000000 -0500
|
||||||
|
@@ -45,6 +45,7 @@ typedef struct QEMUSnapshotInfo {
|
||||||
|
it (default for
|
||||||
|
bdrv_file_open()) */
|
||||||
|
#define BDRV_O_DIRECT 0x0020
|
||||||
|
+#define BDRV_O_AUTOGROW 0x0040 /* Allow backing file to extend when writing past end of file */
|
||||||
|
|
||||||
|
#ifndef QEMU_IMG
|
||||||
|
void bdrv_info(void);
|
||||||
|
diff -rup qemu-0.9.1.orig/block_int.h qemu-0.9.1.new/block_int.h
|
||||||
|
--- qemu-0.9.1.orig/block_int.h 2008-01-06 14:38:42.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/block_int.h 2008-02-26 17:41:47.000000000 -0500
|
||||||
|
@@ -97,6 +97,7 @@ struct BlockDriverState {
|
||||||
|
int locked; /* if true, the media cannot temporarily be ejected */
|
||||||
|
int encrypted; /* if true, the media is encrypted */
|
||||||
|
int sg; /* if true, the device is a /dev/sg* */
|
||||||
|
+ int autogrow; /* if true, the backing store can auto-extend to allocate new extents */
|
||||||
|
/* event callback when inserting/removing */
|
||||||
|
void (*change_cb)(void *opaque);
|
||||||
|
void *change_opaque;
|
||||||
|
diff -rup qemu-0.9.1.orig/block-qcow2.c qemu-0.9.1.new/block-qcow2.c
|
||||||
|
--- qemu-0.9.1.orig/block-qcow2.c 2008-01-06 14:38:42.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/block-qcow2.c 2008-02-26 18:01:06.000000000 -0500
|
||||||
|
@@ -191,7 +191,7 @@ static int qcow_open(BlockDriverState *b
|
||||||
|
int len, i, shift, ret;
|
||||||
|
QCowHeader header;
|
||||||
|
|
||||||
|
- ret = bdrv_file_open(&s->hd, filename, flags);
|
||||||
|
+ ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header))
|
||||||
|
diff -rup qemu-0.9.1.orig/block-qcow.c qemu-0.9.1.new/block-qcow.c
|
||||||
|
--- qemu-0.9.1.orig/block-qcow.c 2008-01-06 14:38:41.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/block-qcow.c 2008-02-26 18:00:53.000000000 -0500
|
||||||
|
@@ -95,7 +95,7 @@ static int qcow_open(BlockDriverState *b
|
||||||
|
int len, i, shift, ret;
|
||||||
|
QCowHeader header;
|
||||||
|
|
||||||
|
- ret = bdrv_file_open(&s->hd, filename, flags);
|
||||||
|
+ ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header))
|
||||||
|
diff -rup qemu-0.9.1.orig/block-vmdk.c qemu-0.9.1.new/block-vmdk.c
|
||||||
|
--- qemu-0.9.1.orig/block-vmdk.c 2008-01-06 14:38:42.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/block-vmdk.c 2008-02-26 18:02:17.000000000 -0500
|
||||||
|
@@ -376,7 +376,7 @@ static int vmdk_open(BlockDriverState *b
|
||||||
|
flags = BDRV_O_RDONLY;
|
||||||
|
fprintf(stderr, "(VMDK) image open: flags=0x%x filename=%s\n", flags, bs->filename);
|
||||||
|
|
||||||
|
- ret = bdrv_file_open(&s->hd, filename, flags);
|
||||||
|
+ ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
if (bdrv_pread(s->hd, 0, &magic, sizeof(magic)) != sizeof(magic))
|
12
qemu-0.9.1-build.patch
Normal file
12
qemu-0.9.1-build.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -urNp qemu-0.9.1.orig/Makefile.target qemu-0.9.1/Makefile.target
|
||||||
|
--- qemu-0.9.1.orig/Makefile.target 2009-01-11 23:01:20.000000000 +0530
|
||||||
|
+++ qemu-0.9.1/Makefile.target 2009-01-11 23:02:16.000000000 +0530
|
||||||
|
@@ -632,7 +632,7 @@ clean:
|
||||||
|
|
||||||
|
install: all
|
||||||
|
ifneq ($(PROGS),)
|
||||||
|
- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
|
||||||
|
+ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(wildcard .depend),)
|
11
qemu-0.9.1-dirent.patch
Normal file
11
qemu-0.9.1-dirent.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- qemu-0.9.1/linux-user/syscall.c.BAD 2008-12-31 20:20:00.000000000 -0600
|
||||||
|
+++ qemu-0.9.1/linux-user/syscall.c 2008-12-31 20:20:27.000000000 -0600
|
||||||
|
@@ -66,7 +66,7 @@
|
||||||
|
#include <linux/cdrom.h>
|
||||||
|
#include <linux/hdreg.h>
|
||||||
|
#include <linux/soundcard.h>
|
||||||
|
-#include <linux/dirent.h>
|
||||||
|
+#include <dirent.h>
|
||||||
|
#include <linux/kd.h>
|
||||||
|
|
||||||
|
#include "qemu.h"
|
24
qemu-0.9.1-nic-defaults.patch
Normal file
24
qemu-0.9.1-nic-defaults.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
diff -rup qemu-0.9.1.orig/hw/pc.c qemu-0.9.1.new/hw/pc.c
|
||||||
|
--- qemu-0.9.1.orig/hw/pc.c 2008-01-06 14:38:42.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/hw/pc.c 2008-01-08 17:06:27.000000000 -0500
|
||||||
|
@@ -913,7 +913,7 @@ static void pc_init1(int ram_size, int v
|
||||||
|
nd = &nd_table[i];
|
||||||
|
if (!nd->model) {
|
||||||
|
if (pci_enabled) {
|
||||||
|
- nd->model = "ne2k_pci";
|
||||||
|
+ nd->model = "rtl8139";
|
||||||
|
} else {
|
||||||
|
nd->model = "ne2k_isa";
|
||||||
|
}
|
||||||
|
diff -rup qemu-0.9.1.orig/vl.c qemu-0.9.1.new/vl.c
|
||||||
|
--- qemu-0.9.1.orig/vl.c 2008-01-06 14:38:42.000000000 -0500
|
||||||
|
+++ qemu-0.9.1.new/vl.c 2008-01-08 17:05:40.000000000 -0500
|
||||||
|
@@ -8787,7 +8787,7 @@ int main(int argc, char **argv)
|
||||||
|
char buf[1024];
|
||||||
|
if (net_boot & (1 << i)) {
|
||||||
|
if (model == NULL)
|
||||||
|
- model = "ne2k_pci";
|
||||||
|
+ model = "rtl8139";
|
||||||
|
snprintf(buf, sizeof(buf), "%s/pxe-%s.bin", bios_dir, model);
|
||||||
|
if (get_image_size(buf) > 0) {
|
||||||
|
if (nb_option_roms >= MAX_OPTION_ROMS) {
|
94
qemu-0.9.1-pty-rawmode.patch
Normal file
94
qemu-0.9.1-pty-rawmode.patch
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
diff -rup qemu-0.9.1.orig/vl.c qemu-0.9.1.new/vl.c
|
||||||
|
--- qemu-0.9.1.orig/vl.c 2008-05-05 13:32:55.000000000 -0400
|
||||||
|
+++ qemu-0.9.1.new/vl.c 2008-05-05 13:33:17.000000000 -0400
|
||||||
|
@@ -2200,28 +2200,78 @@ static CharDriverState *qemu_chr_open_st
|
||||||
|
return chr;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef __sun__
|
||||||
|
+/* Once Solaris has openpty(), this is going to be removed. */
|
||||||
|
+int openpty(int *amaster, int *aslave, char *name,
|
||||||
|
+ struct termios *termp, struct winsize *winp)
|
||||||
|
+{
|
||||||
|
+ const char *slave;
|
||||||
|
+ int mfd = -1, sfd = -1;
|
||||||
|
+
|
||||||
|
+ *amaster = *aslave = -1;
|
||||||
|
+
|
||||||
|
+ mfd = open("/dev/ptmx", O_RDWR | O_NOCTTY);
|
||||||
|
+ if (mfd < 0)
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ if (grantpt(mfd) == -1 || unlockpt(mfd) == -1)
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ if ((slave = ptsname(mfd)) == NULL)
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ if ((sfd = open(slave, O_RDONLY | O_NOCTTY)) == -1)
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ if (ioctl(sfd, I_PUSH, "ptem") == -1 ||
|
||||||
|
+ (termp != NULL && tcgetattr(sfd, termp) < 0))
|
||||||
|
+ goto err;
|
||||||
|
+
|
||||||
|
+ if (amaster)
|
||||||
|
+ *amaster = mfd;
|
||||||
|
+ if (aslave)
|
||||||
|
+ *aslave = sfd;
|
||||||
|
+ if (winp)
|
||||||
|
+ ioctl(sfd, TIOCSWINSZ, winp);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+err:
|
||||||
|
+ if (sfd != -1)
|
||||||
|
+ close(sfd);
|
||||||
|
+ close(mfd);
|
||||||
|
+ return -1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void cfmakeraw (struct termios *termios_p)
|
||||||
|
+{
|
||||||
|
+ termios_p->c_iflag &=
|
||||||
|
+ ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
|
||||||
|
+ termios_p->c_oflag &= ~OPOST;
|
||||||
|
+ termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
|
||||||
|
+ termios_p->c_cflag &= ~(CSIZE|PARENB);
|
||||||
|
+ termios_p->c_cflag |= CS8;
|
||||||
|
+
|
||||||
|
+ termios_p->c_cc[VMIN] = 0;
|
||||||
|
+ termios_p->c_cc[VTIME] = 0;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if defined(__linux__) || defined(__sun__)
|
||||||
|
static CharDriverState *qemu_chr_open_pty(void)
|
||||||
|
{
|
||||||
|
struct termios tty;
|
||||||
|
- char slave_name[1024];
|
||||||
|
int master_fd, slave_fd;
|
||||||
|
|
||||||
|
-#if defined(__linux__)
|
||||||
|
- /* Not satisfying */
|
||||||
|
- if (openpty(&master_fd, &slave_fd, slave_name, NULL, NULL) < 0) {
|
||||||
|
+ if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
- /* Disabling local echo and line-buffered output */
|
||||||
|
- tcgetattr (master_fd, &tty);
|
||||||
|
- tty.c_lflag &= ~(ECHO|ICANON|ISIG);
|
||||||
|
- tty.c_cc[VMIN] = 1;
|
||||||
|
- tty.c_cc[VTIME] = 0;
|
||||||
|
- tcsetattr (master_fd, TCSAFLUSH, &tty);
|
||||||
|
+ /* Set raw attributes on the pty. */
|
||||||
|
+ cfmakeraw(&tty);
|
||||||
|
+ tcsetattr(slave_fd, TCSAFLUSH, &tty);
|
||||||
|
|
||||||
|
- fprintf(stderr, "char device redirected to %s\n", slave_name);
|
||||||
|
+ fprintf(stderr, "char device redirected to %s\n", ptsname(master_fd));
|
||||||
|
return qemu_chr_open_fd(master_fd, master_fd);
|
||||||
|
}
|
||||||
|
|
25
qemu-0.9.1-sparc-configure.patch
Normal file
25
qemu-0.9.1-sparc-configure.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
--- qemu-0.9.1/configure.BAD 2008-12-31 20:49:19.000000000 -0600
|
||||||
|
+++ qemu-0.9.1/configure 2008-12-31 20:51:45.000000000 -0600
|
||||||
|
@@ -307,6 +307,8 @@
|
||||||
|
target_cpu="sparc"; cpu="sparc" ;;
|
||||||
|
v8plus|v8plusa) SP_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32"
|
||||||
|
target_cpu="sparc"; cpu="sparc" ;;
|
||||||
|
+ v932) SP_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v9__"; SP_LDFLAGS="-m32"
|
||||||
|
+ target_cpu="sparc"; cpu="sparc" ;;
|
||||||
|
v9) SP_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m64"
|
||||||
|
target_cpu="sparc64"; cpu="sparc64" ;;
|
||||||
|
*) echo "undefined SPARC architecture. Exiting";exit 1;;
|
||||||
|
@@ -337,11 +339,11 @@
|
||||||
|
|
||||||
|
#
|
||||||
|
# If cpu ~= sparc and sparc_cpu hasn't been defined, plug in the right
|
||||||
|
-# ARCH_CFLAGS/ARCH_LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit)
|
||||||
|
+# ARCH_CFLAGS/ARCH_LDFLAGS (assume sparc_v9 for 32-bit and sparc_v9 for 64-bit)
|
||||||
|
#
|
||||||
|
case $cpu in
|
||||||
|
sparc) if test -z "$sparc_cpu" ; then
|
||||||
|
- ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v8plus__"
|
||||||
|
+ ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v9__"
|
||||||
|
ARCH_LDFLAGS="-m32"
|
||||||
|
else
|
||||||
|
ARCH_CFLAGS="${SP_CFLAGS}"
|
@ -1,19 +0,0 @@
|
|||||||
# This is a systemd environment file, not a shell script.
|
|
||||||
# It provides settings for "/lib/systemd/system/qemu-guest-agent.service".
|
|
||||||
|
|
||||||
# Comma-separated blacklist of RPCs to disable, or empty list to enable all.
|
|
||||||
#
|
|
||||||
# You can get the list of RPC commands using "qemu-ga --blacklist='?'".
|
|
||||||
# There should be no spaces between commas and commands in the blacklist.
|
|
||||||
#BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status
|
|
||||||
|
|
||||||
# Fsfreeze hook script specification.
|
|
||||||
#
|
|
||||||
# FSFREEZE_HOOK_PATHNAME=/dev/null : disables the feature.
|
|
||||||
#
|
|
||||||
# FSFREEZE_HOOK_PATHNAME=/path/to/executable : enables the feature with the
|
|
||||||
# specified binary or shell script.
|
|
||||||
#
|
|
||||||
# FSFREEZE_HOOK_PATHNAME= : enables the feature with the
|
|
||||||
# default value (invoke "qemu-ga --help" to interrogate).
|
|
||||||
FSFREEZE_HOOK_PATHNAME=/etc/qemu-ga/fsfreeze-hook
|
|
@ -1,19 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=QEMU Guest Agent
|
|
||||||
BindsTo=dev-virtio\x2dports-org.qemu.guest_agent.0.device
|
|
||||||
After=dev-virtio\x2dports-org.qemu.guest_agent.0.device
|
|
||||||
IgnoreOnIsolate=True
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
UMask=0077
|
|
||||||
EnvironmentFile=/etc/sysconfig/qemu-ga
|
|
||||||
ExecStart=/usr/bin/qemu-ga \
|
|
||||||
--method=virtio-serial \
|
|
||||||
--path=/dev/virtio-ports/org.qemu.guest_agent.0 \
|
|
||||||
--blacklist=${BLACKLIST_RPC} \
|
|
||||||
-F${FSFREEZE_HOOK_PATHNAME}
|
|
||||||
Restart=always
|
|
||||||
RestartSec=0
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=dev-virtio\x2dports-org.qemu.guest_agent.0.device
|
|
10
qemu-kvm.sh
10
qemu-kvm.sh
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Libvirt introspects the binary using -M none. In that case, don't try
|
|
||||||
# to init KVM, which will fail and be noisy if the host has kvm disabled
|
|
||||||
opts="-machine accel=kvm"
|
|
||||||
if echo "$@" | grep -q " -M none "; then
|
|
||||||
opts=
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec /usr/bin/qemu-system-x86_64 $opts "$@"
|
|
102
qemu.init
Executable file
102
qemu.init
Executable file
@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# qemu Allow users to run non-native Linux programs by just clicking on them
|
||||||
|
# (or typing ./file.exe)
|
||||||
|
#
|
||||||
|
# chkconfig: 2345 35 98
|
||||||
|
# description: Allow users to run non-native Linux programs by just clicking \
|
||||||
|
# on them (or typing ./file.exe)
|
||||||
|
|
||||||
|
. /etc/rc.d/init.d/functions
|
||||||
|
RETVAL=0
|
||||||
|
QEMU=/usr/bin
|
||||||
|
|
||||||
|
start() {
|
||||||
|
cpu=`uname -m`
|
||||||
|
case "$cpu" in
|
||||||
|
i386|i486|i586|i686|i86pc|BePC)
|
||||||
|
cpu="i386"
|
||||||
|
;;
|
||||||
|
"Power Macintosh"|ppc|ppc64)
|
||||||
|
cpu="ppc"
|
||||||
|
;;
|
||||||
|
armv4l|armv5l)
|
||||||
|
cpu="arm"
|
||||||
|
;;
|
||||||
|
sh4)
|
||||||
|
cpu="sh4"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo -n $"Registering binary handler for qemu applications"
|
||||||
|
/sbin/modprobe binfmt_misc &>/dev/null
|
||||||
|
if [ "$cpu" != i386 -a -x $QEMU/qemu-i386 -a -d /usr/qemu-i386 ] ; then
|
||||||
|
echo ":qemu-i386:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:$QEMU/qemu-i386:" > /proc/sys/fs/binfmt_misc/register
|
||||||
|
echo ":qemu-i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:$QEMU/qemu-i386:" > /proc/sys/fs/binfmt_misc/register
|
||||||
|
fi
|
||||||
|
if [ "$cpu" != arm -a -x $QEMU/qemu-arm -a -d /usr/qemu-arm ] ; then
|
||||||
|
echo ":qemu-arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:$QEMU/qemu-arm:" > /proc/sys/fs/binfmt_misc/register
|
||||||
|
fi
|
||||||
|
if [ "$cpu" != ppc -a -x $QEMU/qemu-ppc -a -d /usr/qemu-ppc ] ; then
|
||||||
|
echo ":ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:$QEMU/qemu-ppc:" > /proc/sys/fs/binfmt_misc/register
|
||||||
|
echo do ppc
|
||||||
|
fi
|
||||||
|
if [ "$cpu" != sparc -a -x $QEMU/qemu-sparc -a -d /usr/qemu-sparc ] ; then
|
||||||
|
echo ":qemu-sparc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:$QEMU/qemu-sparc:" > /proc/sys/fs/binfmt_misc/register
|
||||||
|
fi
|
||||||
|
if [ "$cpu" != sh4 -a -x $QEMU/qemu-sh4 -a -d /usr/qemu-sh4 ] ; then
|
||||||
|
echo ":qemu-sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:$QEMU/qemu-sh4:" > /proc/sys/fs/binfmt_misc/register
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo -n $"Unregistering binary handler for qemu applications"
|
||||||
|
for a in i386 i486 ppc arm sparc sh4 ] ; do
|
||||||
|
[ -r /proc/sys/fs/binfmt_misc/qemu-$a ] && echo "-1" >/proc/sys/fs/binfmt_misc/qemu-$a
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
||||||
|
|
||||||
|
qemu_status() {
|
||||||
|
if ls /proc/sys/fs/binfmt_misc/qemu-* &>/dev/null; then
|
||||||
|
echo $"qemu binary format handlers are registered."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo $"qemu binary format handlers are not registered."
|
||||||
|
return 3
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
qemu_status
|
||||||
|
RETVAL=$?
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
condrestart)
|
||||||
|
if qemu_status &>/dev/null; then
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo $"Usage: $prog {start|stop|status|restart|condrestart}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
exit $RETVAL
|
||||||
|
|
Loading…
Reference in New Issue
Block a user