Compare commits

..

6 commits

Author SHA1 Message Date
Fedora Release Engineering
840bcc6f81 dist-git conversion 2010-07-29 14:58:06 +00:00
Bill Nottingham
a24c676d19 Fix typo that causes a failure to update the common directory. (releng
#2781)
2009-11-26 01:13:35 +00:00
Richard W.M. Jones
a15733e15c Some changes to the default configuration file suggested by SAP to make it
more CIM standards compliant.
2009-11-02 11:03:52 +00:00
Richard W.M. Jones
fd80342460 - New upstream based on git e9db007b.
- Fix segfault in vm-dump-metrics (RHBZ#529348).
- On error, vm-dump-metrics now exits with status code 1.
2009-10-16 16:10:59 +00:00
Richard W.M. Jones
a30bd027da - New upstream based on git ea2f772d.
- Update the configuration file based on upstream changes to how virsh has
    to be run.
- vhostmd should run non-root as user 'vhostmd'.
- Allow libvirt URI to be configured.
2009-10-15 17:53:57 +00:00
Kevin Fenzi
a9ddf11d09 Initialize branch F-11 for vhostmd 2009-10-15 17:22:51 +00:00
30 changed files with 243 additions and 1698 deletions

3
.gitignore vendored
View file

@ -1,4 +1 @@
vhostmd-0.4.tar.bz2
/vhostmd-0.5.tar.bz2
/vhostmd-1.0.tar.gz
/vhostmd-1.1.tar.gz

View file

@ -1,42 +0,0 @@
From 83cc269f6892852be94467cea771b3ad1da8a369 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 8 Oct 2019 20:56:18 -0600
Subject: [PATCH 01/19] Relax virtio requirement in config file
When the virtio transport was introduced the schema was changed to
require a <virtio> transport in vhostmd.conf. When updating existing
deployments without a virtio transport specified in vhostmd.conf,
vhostmd fails to start
/usr/sbin/vhostmd -d
/etc/vhostmd/vhostmd.conf:41: element globals: validity error : Element
globals content does not follow the DTD, expecting (disk , virtio ,
update_period , path , transport+), got (disk update_period path transport )
validate_config_file(): Failed to validate :/etc/vhostmd/vhostmd.conf
Config file: /etc/vhostmd/vhostmd.conf, fails DTD validation
Relax the requirement for virtio transport in the schema. With the
introduction of multiple transports perhaps the others shoud be optional
as well, but requiring virtio is clearly a regression.
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd.dtd | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/vhostmd.dtd b/vhostmd.dtd
index db417fd..888270e 100644
--- a/vhostmd.dtd
+++ b/vhostmd.dtd
@@ -9,7 +9,7 @@ Virtual Host Metrics Daemon (vhostmd). Configuration file DTD
-->
<!ELEMENT vhostmd (globals,metrics)>
-<!ELEMENT globals (disk,virtio,update_period,path,transport+)>
+<!ELEMENT globals (disk,virtio*,update_period,path,transport+)>
<!ELEMENT disk (name,path,size)>
<!ELEMENT name (#PCDATA)>
--
2.32.0

View file

@ -1,58 +0,0 @@
From 06e73264b2338d20aa6e3f17b9820be3768439bf Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 16:14:18 -0700
Subject: [PATCH 02/19] libmetrics: Set pointer NULL after free
From a coverity scan
vhostmd-1.1/libmetrics/libmetrics.c:185:10: warning: Attempt to free released memory
free(mdisk->buffer);
Some error conditions will call mdisk_content_free(), which could result
in a double-free when the entire mdisk is freed and mdisk_content_free()
is called again. Protect agains these potential double-frees by setting
the mdisk contents NULL after freeing them.
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 6c80681..a5582e7 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -177,14 +177,22 @@ static metric_disk * mdisk_alloc()
static void mdisk_content_free()
{
if (mdisk) {
- if (mdisk->doc)
- xmlFreeDoc(mdisk->doc);
- if (mdisk->pctxt)
- xmlFreeParserCtxt(mdisk->pctxt);
- if (mdisk->buffer)
- free(mdisk->buffer);
- if (mdisk->disk_name)
- free(mdisk->disk_name);
+ if (mdisk->doc) {
+ xmlFreeDoc(mdisk->doc);
+ mdisk->doc = NULL;
+ }
+ if (mdisk->pctxt) {
+ xmlFreeParserCtxt(mdisk->pctxt);
+ mdisk->pctxt = NULL;
+ }
+ if (mdisk->buffer) {
+ free(mdisk->buffer);
+ mdisk->buffer = NULL;
+ }
+ if (mdisk->disk_name) {
+ free(mdisk->disk_name);
+ mdisk->disk_name = NULL;
+ }
}
}
--
2.32.0

View file

@ -1,125 +0,0 @@
From 9db959c9e3f83cb2a4fc07534462e769990d9631 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 16:33:24 -0700
Subject: [PATCH 03/19] libmetrics: Initialize local variable 'ret' to failure
The get_mdef() and dump_xenstore_metrics() functions have local variables
named 'ret' that are initialized to zero, meaning success. In failure paths
'ret' is set to -1 before jumping to the 'out' label. Invert this logic by
initializing 'ret' to -1 and only setting it to success after the function
bodies have successfully executed.
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index a5582e7..49b38ea 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -228,7 +228,7 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
xmlNodePtr node;
char *str;
char *xpath;
- int ret = 0;
+ int ret = -1;
ctxt = xmlXPathNewContext(mdisk->doc);
if (!ctxt) {
@@ -242,19 +242,16 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
libmsg("%s(): No metrics found that matches %s in context:%s or malformed definition\n",
__func__, pmdef->name, pmdef->context);
- ret = -1;
goto out;
}
if (xmlXPathNodeSetGetLength(obj->nodesetval) != 1) {
libmsg("%s(): No metrics found that matches %s in context:%s or malformed definition\n",
__func__, pmdef->name, pmdef->context);
- ret = -1;
goto out;
}
node = obj->nodesetval->nodeTab[0];
if ((str = (char *)xmlGetProp(node, BAD_CAST "type")) == NULL) {
libmsg("%s(): Metric type not specified\n", __func__);
- ret = -1;
goto out;
}
metric_type_from_str((char *)str, &(pmdef->type));
@@ -267,7 +264,6 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
free(xpath);
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
libmsg("%s(): No metrics value found!\n", __func__);
- ret = -1;
goto out;
}
@@ -276,6 +272,7 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
str = (char *)xmlNodeListGetString(mdisk->doc, node, 1);
pmdef->value = strdup(str);
free(str);
+ ret = 0;
out:
if (obj)
@@ -707,7 +704,7 @@ int dump_xenstore_metrics(const char *dest_file)
char *buf = NULL, *path = NULL, *metrics = NULL;
struct xs_handle *xsh = NULL;
unsigned int len;
- int ret = 0;
+ int ret = -1;
xmlParserCtxtPtr pctxt = NULL;
xmlDocPtr doc = NULL;
int domid;
@@ -726,35 +723,30 @@ int dump_xenstore_metrics(const char *dest_file)
if ((domid = get_dom_id()) == -1) {
libmsg("Unable to derive domID.\n" );
- ret = -1;
goto out;
}
xsh = xs_domain_open();
if (xsh == NULL) {
libmsg("xs_domain_open() error. errno: %d.\n", errno);
- ret = -1;
goto out;
}
path = xs_get_domain_path(xsh, domid);
if (path == NULL) {
libmsg("xs_get_domain_path() error. domid %d.\n", 0);
- ret = -1;
goto out;
}
asprintf(&buf, "%s/metrics", path);
metrics = xs_read(xsh, XBT_NULL, buf, &len);
if (metrics == NULL) {
libmsg("xs_read(): uuid get error. %s.\n", buf);
- ret = -1;
goto out;
}
pctxt = xmlNewParserCtxt();
if (!pctxt || !pctxt->sax) {
libmsg("%s(): failed to create parser \n", __func__);
- ret = -1;
goto out;
}
@@ -764,10 +756,10 @@ int dump_xenstore_metrics(const char *dest_file)
XML_PARSE_NOWARNING);
if (!doc) {
libmsg("%s(): libxml failed to xenstore metrics attribute\n", __func__);
- ret = -1;
goto out;
}
xmlDocFormatDump(fp, doc, 1);
+ ret = 0;
out:
if (fp && fp != stdout)
--
2.32.0

View file

@ -1,67 +0,0 @@
From f659ec774221532cc5452a07418e2ab1385f162c Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 16:43:21 -0700
Subject: [PATCH 04/19] libmetrics: Check return value of asprintf
Exmaple from coverity scan
vhostmd-1.1/libmetrics/libmetrics.c: scope_hint: In function 'get_mdef'
vhostmd-1.1/libmetrics/libmetrics.c:231:4: warning: ignoring return value of 'asprintf', declared with attribute warn_unused_result [-Wunused-result]
asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']", pmdef->name, pmdef->context);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 49b38ea..4b2369a 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -236,7 +236,9 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
}
/* Get the matching metric node type */
- asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']", pmdef->name, pmdef->context);
+ if (asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']", pmdef->name, pmdef->context) < 0)
+ goto out;
+
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
free(xpath);
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
@@ -259,7 +261,9 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
xmlXPathFreeObject(obj);
/* Get the matching metric node value */
- asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']/value/text()", pmdef->name, pmdef->context);
+ if (asprintf(&xpath, "//metrics/metric[name='%s'][@context='%s']/value/text()", pmdef->name, pmdef->context) < 0)
+ goto out;
+
obj = xmlXPathEval( BAD_CAST xpath, ctxt); /* worked but no nodes */
free(xpath);
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
@@ -349,7 +353,8 @@ retry:
strcmp(entry->d_name, "..") == 0)
continue;
- asprintf(&path, "/dev/%s", entry->d_name);
+ if (asprintf(&path, "/dev/%s", entry->d_name) < 0)
+ goto error;
#else
path = strdup("/dev/shm/vhostmd0");
#endif
@@ -737,7 +742,9 @@ int dump_xenstore_metrics(const char *dest_file)
libmsg("xs_get_domain_path() error. domid %d.\n", 0);
goto out;
}
- asprintf(&buf, "%s/metrics", path);
+ if (asprintf(&buf, "%s/metrics", path) , 0)
+ goto out;
+
metrics = xs_read(xsh, XBT_NULL, buf, &len);
if (metrics == NULL) {
libmsg("xs_read(): uuid get error. %s.\n", buf);
--
2.32.0

View file

@ -1,41 +0,0 @@
From 3d4f3acdfc9f937bea946bb1c7dfad1f3516a6ce Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 17:42:39 -0700
Subject: [PATCH 05/19] libmetrics: Remove unsafe XML_PARSE_NOENT option
From coverity scan
Error: UNSAFE_XML_PARSE_CONFIG:
vhostmd-1.1/libmetrics/libmetrics.c:412: unsafe_xml_parse_config: XML parse option should not have flag "XML_PARSE_NOENT" set, which is vulnerable to XML external entity attack.
410| mdisk->doc = xmlCtxtReadMemory(mdisk->pctxt, mdisk->buffer,
411| mdisk->length, "mdisk.xml", NULL,
412|-> XML_PARSE_NOENT | XML_PARSE_NONET |
413| XML_PARSE_NOWARNING);
414| if (!mdisk->doc) {
It should be safe to remove the option.
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 4b2369a..2819f80 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -418,9 +418,8 @@ retry:
}
mdisk->doc = xmlCtxtReadMemory(mdisk->pctxt, mdisk->buffer,
- mdisk->length, "mdisk.xml", NULL,
- XML_PARSE_NOENT | XML_PARSE_NONET |
- XML_PARSE_NOWARNING);
+ mdisk->length, "mdisk.xml", NULL,
+ XML_PARSE_NONET | XML_PARSE_NOWARNING);
if (!mdisk->doc) {
libmsg("%s(): libxml failed to parse mdisk.xml buffer\n", __func__);
goto error;
--
2.32.0

View file

@ -1,53 +0,0 @@
From 855326a8c9ec1a599354f743fb5391a2766a2a9c Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 17:47:10 -0700
Subject: [PATCH 06/19] libmetrics: Ensure libmetrics mutex is unlocked in
error paths
From coverity scan
vhostmd-1.1/libmetrics/libmetrics.c:595: missing_unlock: Returning without unlocking "libmetrics_mutex".
593| if (mdisk_alloc() == NULL) {
594| errno = ENOMEM;
595|-> return -1;
596| }
597| read_mdisk(mdisk);
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 2819f80..756645c 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -601,7 +601,7 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
mdisk_free();
if (mdisk_alloc() == NULL) {
errno = ENOMEM;
- return -1;
+ goto out;
}
read_mdisk(mdisk);
}
@@ -620,7 +620,7 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
if ((lmdef = metric_alloc_padded(extra_len)) == NULL) {
errno = ENOMEM;
- return -1;
+ goto out;
}
lmdef->type = pmdef.type;
@@ -635,6 +635,7 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
if (pmdef.context)
free(pmdef.context);
+out:
/* unlock library data */
pthread_mutex_unlock(&libmetrics_mutex);
return ret;
--
2.32.0

View file

@ -1,49 +0,0 @@
From 2cbce5fcb652226bf159f9cd9649f5869d76f6b7 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 18:40:33 -0700
Subject: [PATCH 07/19] libmetrics: Fix potential memory leak
From coverity scan
vhostmd-1.1/libmetrics/libmetrics.c:613:18: warning: Potential leak of memory pointed to by 'pmdef.context'
errno = ENOMEM;
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 756645c..6817df9 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -586,7 +586,8 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
int ret = -1;
*mdef = NULL;
-
+ memset(&pmdef, 0, sizeof(private_metric));
+
if (mdisk == NULL) {
errno = ENODEV;
return -1;
@@ -628,6 +629,8 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
*mdef = lmdef;
ret = 0;
}
+
+out:
if (pmdef.name)
free(pmdef.name);
if (pmdef.value)
@@ -635,7 +638,6 @@ int get_metric(const char *metric_name, metric **mdef, metric_context context)
if (pmdef.context)
free(pmdef.context);
-out:
/* unlock library data */
pthread_mutex_unlock(&libmetrics_mutex);
return ret;
--
2.32.0

View file

@ -1,40 +0,0 @@
From bc5da0b99699bbeb653b86398a7112bc0885c31e Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 18:51:40 -0700
Subject: [PATCH 08/19] libmetrics: Use proper conversion specifier when
calling log function
From coverity scan
vhostmd-1.1/libmetrics/libmetrics.c:817: invalid_type: Argument "5L" to format specifier "%u" was expected to have type "unsigned int" but has type "long".
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 6817df9..0f4cf70 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -823,7 +823,7 @@ static char *get_virtio_metrics(void)
usleep(10000);
if (time(NULL) > end_time) {
libmsg("%s(): Unable to send metrics request"
- " - timeout after %us\n", __func__, timeout);
+ " - timeout after %lis\n", __func__, timeout);
goto error;
}
}
@@ -856,7 +856,7 @@ static char *get_virtio_metrics(void)
usleep(10000);
if (time(NULL) > end_time) {
libmsg("%s(): Unable to read metrics"
- " - timeout after %us\n", __func__, timeout);
+ " - timeout after %lis\n", __func__, timeout);
goto error;
}
} else
--
2.32.0

View file

@ -1,75 +0,0 @@
From cba4dddebc56886034038f907085da3c6b50baab Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Mon, 6 Jan 2020 18:59:18 -0700
Subject: [PATCH 09/19] libmetrics: Fix potential leak of FILE pointer
From coverity scan
vhostmd-1.1/libmetrics/libmetrics.c:892: alloc_fn: Storage is returned from allocation function "fopen".
vhostmd-1.1/libmetrics/libmetrics.c:892: var_assign: Assigning: "fp" = storage returned from "fopen(dest_file, "w")".
vhostmd-1.1/libmetrics/libmetrics.c:900: noescape: Resource "fp" is not freed or pointed-to in "fwrite".
vhostmd-1.1/libmetrics/libmetrics.c:909: leaked_storage: Variable "fp" going out of scope leaks the storage it points to.
907| free(response);
908|
909|-> return 0;
910|
911| error:
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
libmetrics/libmetrics.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 0f4cf70..8819074 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -890,10 +890,11 @@ int dump_virtio_metrics(const char *dest_file)
FILE *fp = stdout;
char *response = NULL;
size_t len;
+ int ret = -1;
response = get_virtio_metrics();
if (response == NULL)
- goto error;
+ return -1;
len = strlen(response);
@@ -902,27 +903,24 @@ int dump_virtio_metrics(const char *dest_file)
if (fp == NULL) {
libmsg("%s(), unable to dump metrics: fopen(%s) %s\n",
__func__, dest_file, strerror(errno));
- goto error;
+ goto out;
}
}
if (fwrite(response, 1UL, len, fp) != len) {
libmsg("%s(), unable to export metrics to file:%s %s\n",
__func__, dest_file ? dest_file : "stdout", strerror(errno));
- goto error;
+ goto out;
}
- if (response)
- free(response);
+ ret = 0;
- return 0;
-
- error:
+out:
if (dest_file && fp)
fclose(fp);
if (response)
free(response);
- return -1;
+ return ret;
}
--
2.32.0

View file

@ -1,55 +0,0 @@
From 69fcc2075d7cb1f16eb7d27ae3559fa3c77f5514 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 7 Jan 2020 11:36:56 -0700
Subject: [PATCH 10/19] util: Add missing call to va_end
From coverity scan
Error: VARARGS (CWE-237):
vhostmd-1.1/vhostmd/util.c:209: va_init: Initializing va_list "argptr".
vhostmd-1.1/vhostmd/util.c:218: missing_va_end: va_end was not called for "argptr".
216| grow_size = (count > 1000) ? count : 1000;
217| if (buffer_grow(buf, grow_size) < 0)
218|-> return;
219|
220| size = buf->size - buf->use - 1;
Error: VARARGS (CWE-237):
vhostmd-1.1/vhostmd/util.c:209: va_init: Initializing va_list "argptr".
vhostmd-1.1/vhostmd/util.c:226: missing_va_end: va_end was not called for "argptr".
224| buf->use += count;
225| buf->content[buf->use] = '\0';
226|-> }
227|
228| /*
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/util.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/vhostmd/util.c b/vhostmd/util.c
index 5747f16..1f9545b 100644
--- a/vhostmd/util.c
+++ b/vhostmd/util.c
@@ -214,13 +214,16 @@ void vu_buffer_vsprintf(vu_buffer *buf, const char *format, ...)
va_end(locarg);
grow_size = (count > 1000) ? count : 1000;
- if (buffer_grow(buf, grow_size) < 0)
+ if (buffer_grow(buf, grow_size) < 0) {
+ va_end(argptr);
return;
+ }
size = buf->size - buf->use - 1;
va_copy(locarg, argptr);
}
va_end(locarg);
+ va_end(argptr);
buf->use += count;
buf->content[buf->use] = '\0';
}
--
2.32.0

View file

@ -1,40 +0,0 @@
From b39f7cc778903e9cda8aa46d170b9efe80efda89 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 7 Jan 2020 11:41:11 -0700
Subject: [PATCH 11/19] util: Fix potential memory leak
From coverity scan
vhostmd-1.1/vhostmd/util.c:415:14: warning: Potential leak of memory pointed to by 'cp'
return(NULL);
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/util.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/vhostmd/util.c b/vhostmd/util.c
index 1f9545b..599c5c7 100644
--- a/vhostmd/util.c
+++ b/vhostmd/util.c
@@ -415,7 +415,7 @@ char *vu_str_replace(const char *haystack, const char *origstr, const char *news
dest = malloc(strlen(haystack) - (origlen * cnt) + (newlen * cnt) + 1);
if (dest == NULL) {
- return(NULL);
+ goto out;
}
*dest = '\0';
@@ -428,6 +428,8 @@ char *vu_str_replace(const char *haystack, const char *origstr, const char *news
cp = p + origlen;
}
strcat(dest, cp);
+
+out:
free(tempstr);
return dest;
--
2.32.0

View file

@ -1,38 +0,0 @@
From 4350fcf7a5c4cb7d803db1a0df2b757230b90e25 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 7 Jan 2020 11:47:33 -0700
Subject: [PATCH 12/19] util: Check return value of strstr
From coverity scan
vhostmd-1.1/vhostmd/util.c:421: returned_null: "strstr" returns "NULL" (checked 6 out of 7 times).
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/util.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/vhostmd/util.c b/vhostmd/util.c
index 599c5c7..317dbc6 100644
--- a/vhostmd/util.c
+++ b/vhostmd/util.c
@@ -422,10 +422,12 @@ char *vu_str_replace(const char *haystack, const char *origstr, const char *news
cp = tempstr;
for (i=0; i <cnt; i++) {
p = strstr(cp, origstr);
- *p = '\0';
- strcat(dest, cp);
- strcat(dest, newstr);
- cp = p + origlen;
+ if (p) {
+ *p = '\0';
+ strcat(dest, cp);
+ strcat(dest, newstr);
+ cp = p + origlen;
+ }
}
strcat(dest, cp);
--
2.32.0

View file

@ -1,48 +0,0 @@
From 1771ddb83fe8a8cb38e7bee212bdfa3d1927cfc5 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 7 Jan 2020 11:52:23 -0700
Subject: [PATCH 13/19] Check return value of asprintf
Example from coverity scan
vhostmd-1.1/vhostmd/util.c: scope_hint: In function 'vu_append_string'
vhostmd-1.1/vhostmd/util.c:484:7: warning: ignoring return value of 'asprintf', declared with attribute warn_unused_result [-Wunused-result]
asprintf(&cp, "%s,%s", *dest, str);
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/util.c | 3 ++-
vhostmd/vhostmd.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/vhostmd/util.c b/vhostmd/util.c
index 317dbc6..d7ce3fc 100644
--- a/vhostmd/util.c
+++ b/vhostmd/util.c
@@ -488,7 +488,8 @@ int vu_append_string(char **dest, xmlChar * str)
char *cp;
if (*dest) {
- asprintf(&cp, "%s,%s", *dest, str);
+ if (asprintf(&cp, "%s,%s", *dest, str) < 0)
+ return -1;
free(*dest);
*dest = cp;
}
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 7e29e6f..7374ec9 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -259,7 +259,8 @@ static int parse_group_metric(xmlDocPtr xml ATTRIBUTE_UNUSED,
vu_log(VHOSTMD_WARN, "parse_group_metric: node path not found");
return -1;
}
- asprintf(&cp, "%s/variable", path);
+ if (asprintf(&cp, "%s/variable", path) < 0)
+ goto error;
obj = xmlXPathEval( BAD_CAST cp, ctxt);
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
--
2.32.0

View file

@ -1,36 +0,0 @@
From 71a94a18c470ebbd870253b8aedbb7b3b24a274b Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 14 Jan 2020 15:08:54 -0700
Subject: [PATCH 14/19] vhostmd: Fix memory leak in parse_transports
From coverity scan
vhostmd-1.1/vhostmd/vhostmd.c:455: alloc_fn: Storage is returned from allocation function "xmlXPathEval".
vhostmd-1.1/vhostmd/vhostmd.c:455: var_assign: Assigning: "obj" = storage returned from "xmlXPathEval((xmlChar *)"//vhostmd/globals/transport", ctxt)".
vhostmd-1.1/vhostmd/vhostmd.c:474: leaked_storage: Variable "obj" going out of scope leaks the storage it points to.
472| #else
473| vu_log (VHOSTMD_ERR, "No support for xenstore transport in this vhostmd");
474|-> return -1;
475| #endif
476| }
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/vhostmd.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 7374ec9..3d1d53e 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -472,6 +472,7 @@ static int parse_transports(xmlDocPtr xml,
transports |= XENSTORE;
#else
vu_log (VHOSTMD_ERR, "No support for xenstore transport in this vhostmd");
+ xmlXPathFreeObject(obj);
return -1;
#endif
}
--
2.32.0

View file

@ -1,36 +0,0 @@
From d9eeede678521776d327784d0307de6c98920bb8 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 14 Jan 2020 15:12:28 -0700
Subject: [PATCH 15/19] vhostmd: Remove unsafe XML_PARSE_NOENT option
From coverity scan
vhostmd-1.1/vhostmd/vhostmd.c:553: unsafe_xml_parse_config: XML parse option should not have flag "XML_PARSE_NOENT" set, which is vulnerable to XML external entty attack.
551|
552| xml = xmlCtxtReadFile(pctxt, filename, NULL,
553|-> XML_PARSE_NOENT | XML_PARSE_NONET |
554| XML_PARSE_NOWARNING);
555| if (!xml) {
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/vhostmd.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 3d1d53e..4d04989 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -552,8 +552,7 @@ static int parse_config_file(const char *filename)
goto out;
xml = xmlCtxtReadFile(pctxt, filename, NULL,
- XML_PARSE_NOENT | XML_PARSE_NONET |
- XML_PARSE_NOWARNING);
+ XML_PARSE_NONET | XML_PARSE_NOWARNING);
if (!xml) {
vu_log(VHOSTMD_ERR, "libxml failed to parse config file %s",
filename);
--
2.32.0

View file

@ -1,94 +0,0 @@
From 4f7b23e19c88c92d834d5f975c846b47eaa03c79 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 14 Jan 2020 15:33:39 -0700
Subject: [PATCH 16/19] vhostmd: Check return value of file functions
Check return value of ftruncate, lseek, and write functions as
reported by coverity. Example from coverity scan
vhostmd-1.1/vhostmd/vhostmd.c: scope_hint: In function 'metrics_disk_create'
vhostmd-1.1/vhostmd/vhostmd.c:821:4: warning: ignoring return value of 'ftruncate', declared with attribute warn_unused_result [-Wunused-result]
ftruncate(fd, mdisk_size);
^~~~~~~~~~~~~~~~~~~~~~~~~
819|
820| /* truncate to a possible new size */
821|-> ftruncate(fd, mdisk_size);
822|
823| /* zero fill metrics data */
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/vhostmd.c | 33 +++++++++++++++++++++++++--------
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 4d04989..1600a87 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -675,8 +675,12 @@ static int metrics_disk_busy(int fd, int busy)
{
md_header.busy = (uint32_t)(htonl(busy));
- lseek(fd, offsetof(mdisk_header, busy), SEEK_SET);
- write(fd, &(md_header.busy), sizeof(uint32_t));
+ if (lseek(fd, offsetof(mdisk_header, busy), SEEK_SET) == -1)
+ return -1;
+
+ if (write(fd, &(md_header.busy), sizeof(uint32_t)) == -1)
+ return -1;
+
return 0;
}
@@ -724,6 +728,8 @@ error:
static int metrics_disk_update(int fd, vu_buffer *buf)
{
+ int ret = -1;
+
if (buf->use > MDISK_SIZE) {
vu_log(VHOSTMD_ERR, "Metrics data is larger than metrics disk");
return -1;
@@ -731,11 +737,17 @@ static int metrics_disk_update(int fd, vu_buffer *buf)
metrics_disk_busy(fd, 1);
metrics_disk_header_update(fd, buf);
- lseek(fd, MDISK_HEADER_SIZE, SEEK_SET);
- write(fd, buf->content, buf->use);
+ if (lseek(fd, MDISK_HEADER_SIZE, SEEK_SET) == -1)
+ goto out;
+
+ if (write(fd, buf->content, buf->use) == -1)
+ goto out;
+
+ ret = 0;
+
+out:
metrics_disk_busy(fd, 0);
-
- return 0;
+ return ret;
}
static int metrics_free()
@@ -819,10 +831,15 @@ static int metrics_disk_create(void)
}
/* truncate to a possible new size */
- ftruncate(fd, mdisk_size);
+ if (ftruncate(fd, mdisk_size) == -1){
+ vu_log(VHOSTMD_ERR, "Failed to truncate metrics disk: %s",
+ strerror(errno));
+ goto error;
+ }
/* zero fill metrics data */
- lseek(fd, MDISK_HEADER_SIZE, SEEK_SET);
+ if (lseek(fd, MDISK_HEADER_SIZE, SEEK_SET) == -1)
+ goto error;
for (i = 0; i < size / MDISK_SIZE_MIN; i++)
if (write(fd, buf, MDISK_SIZE_MIN) != MDISK_SIZE_MIN) {
vu_log(VHOSTMD_ERR, "Error creating disk of requested "
--
2.32.0

View file

@ -1,38 +0,0 @@
From d86c51d98ce8b891f3948f8aa54fc9634e6a8c67 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 14 Jan 2020 16:04:09 -0700
Subject: [PATCH 17/19] vhostmd: Check for valide file handle before calling
close
From coverity scan
vhostmd-1.1/vhostmd/vhostmd.c:778: var_tested_neg: Assigning: "fd" = a negative value.
vhostmd-1.1/vhostmd/vhostmd.c:845: negative_returns: "fd" is passed to a parameter that cannot be negative.
843| free(dir);
844| free(buf);
845|-> close(fd);
846| return -1;
847| }
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/vhostmd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 1600a87..1395bc5 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -860,7 +860,8 @@ static int metrics_disk_create(void)
error:
free(dir);
free(buf);
- close(fd);
+ if (fd != -1)
+ close(fd);
return -1;
}
--
2.32.0

View file

@ -1,46 +0,0 @@
From ff6959fd9203c667f6b4c95fa812621cc91dc42e Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 14 Jan 2020 16:08:42 -0700
Subject: [PATCH 18/19] vhostmd: Fix memory leak in vhostmd_run
Example from coverity scan
vhostmd-1.1/vhostmd/vhostmd.c:940: alloc_arg: "vu_buffer_create" allocates memory that is stored into "buf".
vhostmd-1.1/vhostmd/vhostmd.c:959: leaked_storage: Variable "buf" going out of scope leaks the storage it points to.
957| vu_log(VHOSTMD_ERR, "Failed to start virtio thread '%s'\n",
958| strerror(rc));
959|-> return -1;
960| }
961| }
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/vhostmd.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/vhostmd/vhostmd.c b/vhostmd/vhostmd.c
index 1395bc5..6f3709b 100644
--- a/vhostmd/vhostmd.c
+++ b/vhostmd/vhostmd.c
@@ -967,14 +967,17 @@ static int vhostmd_run(int diskfd)
if (virtio_expiration_time < (update_period * 3))
virtio_expiration_time = update_period * 3;
- if (virtio_init(virtio_max_channels, virtio_expiration_time))
+ if (virtio_init(virtio_max_channels, virtio_expiration_time)) {
+ vu_buffer_delete(buf);
return -1;
+ }
rc = pthread_create(&virtio_tid, NULL, virtio_run, NULL);
if (rc != 0) {
vu_log(VHOSTMD_ERR, "Failed to start virtio thread '%s'\n",
strerror(rc));
+ vu_buffer_delete(buf);
return -1;
}
}
--
2.32.0

View file

@ -1,36 +0,0 @@
From 99995e4ba138f43b277620bd43a096c72f354548 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <jfehlig@suse.com>
Date: Tue, 14 Jan 2020 16:22:48 -0700
Subject: [PATCH 19/19] virtio: Fix strncpy length parameter
Leave an extra byte for null-terminator in call to strncpy. From
coverity scan
vhostmd-1.1/vhostmd/virtio.c:194: buffer_size_warning: Calling "strncpy" with a maximum size argument of 108 bytes on destination array "address.sun_path" of size 108 bytes might leave the destination string unterminated.
192| address.sun_family = AF_LOCAL;
193|
194|-> strncpy(address.sun_path, c->uds_name, SUN_PATH_LEN);
195|
196| if ((c->fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1)
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
vhostmd/virtio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/vhostmd/virtio.c b/vhostmd/virtio.c
index f227b45..a6c2515 100644
--- a/vhostmd/virtio.c
+++ b/vhostmd/virtio.c
@@ -191,7 +191,7 @@ static int vio_channel_open(channel_t * c)
bzero(&address, sizeof(address));
address.sun_family = AF_LOCAL;
- strncpy(address.sun_path, c->uds_name, SUN_PATH_LEN);
+ strncpy(address.sun_path, c->uds_name, SUN_PATH_LEN - 1);
if ((c->fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1)
goto error;
--
2.32.0

View file

@ -1,74 +0,0 @@
From cf555d3bf079ff60b363dba4dc48a349dce5d3b4 Mon Sep 17 00:00:00 2001
From: Yaakov Selkowitz <yselkowi@redhat.com>
Date: Sun, 24 Dec 2023 14:54:09 -0500
Subject: [PATCH] Fix implicit declarations
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Errors raised in Fedora rawhide and ELN which have added the
-Werror=implicit-function-declaration flag for C:
virt-util.c:96:9: error: implicit declaration of function calloc
virt-util.c:129:10: error: implicit declaration of function free
virtio.c:160:9: error: implicit declaration of function free
virtio.c:254:31: error: implicit declaration of function bsearch
virtio.c:259:13: error: implicit declaration of function qsort
virtio.c:586:33: error: implicit declaration of function calloc
libmetrics.c:136:28: error: implicit declaration of function 'atoi'
libmetrics.c:142:29: error: implicit declaration of function 'atoll'
libmetrics.c:148:28: error: implicit declaration of function 'atof'
libmetrics.c:170:12: error: implicit declaration of function 'calloc'
libmetrics.c:189:12: error: implicit declaration of function 'free'
libmetrics.c:311:7: error: implicit declaration of function 'posix_memalign'
libmetrics.c:385:26: error: implicit declaration of function 'malloc'
libmetrics.c:848:28: error: implicit declaration of function 'realloc'
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
---
libmetrics/libmetrics.c | 1 +
vhostmd/virt-util.c | 1 +
vhostmd/virtio.c | 1 +
3 files changed, 3 insertions(+)
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
index 8819074..c83fd03 100644
--- a/libmetrics/libmetrics.c
+++ b/libmetrics/libmetrics.c
@@ -21,6 +21,7 @@
#include <config.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
diff --git a/vhostmd/virt-util.c b/vhostmd/virt-util.c
index a94cccd..40765c3 100644
--- a/vhostmd/virt-util.c
+++ b/vhostmd/virt-util.c
@@ -21,6 +21,7 @@
#include <config.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <libvirt/libvirt.h>
diff --git a/vhostmd/virtio.c b/vhostmd/virtio.c
index a6c2515..98340ce 100644
--- a/vhostmd/virtio.c
+++ b/vhostmd/virtio.c
@@ -30,6 +30,7 @@
#include <search.h>
#include <dirent.h>
#include <pthread.h>
+#include <stdlib.h>
#include <libvirt/libvirt.h>
#include "util.h"
--
2.43.0

View file

@ -1,7 +0,0 @@
--- !Policy
product_versions:
- rhel-*
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
- !PassingTestCaseRule {test_case_name: manual.sst_virtualization.vhostmd.manual-test}

View file

@ -1,5 +0,0 @@
xml:
# Regular expression (man 7 regex) matching directories to ignore
# during the xml inspection. Skip DTD files, which
# contain a mix of XML and code.
exclude_path: .*(\.dtd)$

View file

@ -1 +1 @@
SHA512 (vhostmd-1.1.tar.gz) = 9fad55c96c504b59345fb670d9ae9b83c892d82f05784253c8826436a1a75419bb73d6be48a8f8d956f89c77ab4f54a85200e92078c22c8f156954ca8f434d49
139650528c154da52a65adedfb8e83cf vhostmd-0.4.tar.bz2

View file

@ -1,6 +0,0 @@
#!/bin/bash -
set -e
set -x
# Setting up vhostmd is basically impossible, so:
LANG=C vm-dump-metrics |& grep "Unable to read metrics disk"

View file

@ -1,11 +0,0 @@
- hosts: localhost
roles:
- role: standard-test-basic
tags:
- classic
required_packages:
- vm-dump-metrics-devel
tests:
- simple:
dir: .
run: ./basic-test.sh

379
vhostmd.conf Executable file → Normal file
View file

@ -19,59 +19,6 @@ within the vm element.
-->
<!-- 1 2 3 4 5 6 -->
<!-- 678901234567890123456789012345678901234567890123456789012345678 -->
<!--
We sometimes use the following awk form to filter the output of the
virsh command (mostly `virsh -r CONNECT dominfo NAME' - use
`virsh -r dominfo <dom id>' to test on the commandline) into a standard
format like
ID:6
NAME:ls3055v0
UUID:955c3b65-d013-547f-321b-9fea65439c40
OS_TYPE:hvm
STATE:running
CPU(S):4
CPU_TIME:433016.4:S
MAX_MEMORY:20000000:KB
USED_MEMORY:16384000:KB
AUTOSTART:disable
We do this to extract numbers out of physical quantities in a reliable
way.
-->
<!--
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
-->
<vhostmd>
<globals>
<disk>
@ -80,352 +27,124 @@ way.
<!-- must be between [128 KB, 256 MB] in size -->
<size unit="k">256</size>
</disk>
<virtio>
<max_channels>1024</max_channels>
<expiration_time>15</expiration_time>
</virtio>
<update_period>60</update_period>
<path>/bin:/sbin:/usr/bin:/usr/sbin:/usr/share/vhostmd/scripts</path>
<transport>vbd</transport>
<!-- <transport>xenstore</transport> -->
<transport>virtio</transport>
</globals>
<metrics>
<metric type="string" context="host">
<name>HostName</name>
<action>hostname</action>
</metric>
<metric type="uint64" context="host">
<name>Time</name>
<action>date +%s</action>
</metric>
<metric type="string" context="host">
<name>VirtualizationVendor</name>
<action>
rpm -q --queryformat "%{VENDOR}\n" libvirt | sort -u
</action>
<action>rpm -qi libvirt| grep Vendor: |awk '{print substr($0, index($0,$5)) }'</action>
</metric>
<!-- SAP "CIM" -->
<metric type="string" context="host">
<name>VirtProductInfo</name>
<action>
virsh -r CONNECT version \
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
| awk -F: '$1 == "USING_API" { print $2; }'
</action>
<action>virsh -r CONNECT version | grep API | gawk -F': ' '{print $2}'</action>
</metric>
<!-- SAP "CIM" -->
<metric type="string" context="host">
<name>HostSystemInfo</name>
<action>hostname -s</action>
</metric>
<!-- SAP "XCIM" -->
<!-- SAP "CIM" -->
<metric type="uint32" context="host">
<name>NumberOfPhysicalCPUs</name>
<!-- physical CPUs usable by the virtual machines -->
<!-- SAP "CIM" uses "NumberOfPhysicalCPUsUtilized" -->
<!-- which means something different, i.e. -->
<!-- "physical CPUs used by the virtual machines" -->
<!-- but may be calculated (on client side) by -->
<!-- Delta TotalCPUTime / Delta ElapsedTime -->
<action>
virsh -r CONNECT nodeinfo \
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
| awk -F: '$1 == "CPU(S)" { print $2; }'
</action>
<name>NumberOfPhysicalCPUsUtilized</name>
<action>virsh -r CONNECT nodeinfo | grep 'CPU(s):' | gawk -F': +' '{print $2}'</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="host">
<name>MemoryAllocatedToVirtualServers</name>
<!-- physical memory used by the virtual machines, -->
<!-- (_not_ physical memory usable by the virtual -->
<!-- machines) -->
<action>
free|egrep -i '^[[:space:]]*(Mem:)' \
| awk 'BEGIN { sum = 0; }
{ sum += $3; }
END { printf "%d\n", sum/1024; }'
</action>
<action>virsh -r CONNECT nodeinfo | grep 'Memory size:' | gawk -F' +' '{ printf "%d\n" $3/1024 }'</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="host">
<name>FreePhysicalMemory</name>
<action>
free|egrep -i '^[[:space:]]*(Mem:)' \
| awk 'BEGIN { sum = 0; }
free|egrep -i '^[[:space:]]*(Mem:)' \
|awk 'BEGIN { sum = 0; }
{ sum += $4; }
END { printf "%d\n", sum/1024; }'
END { printf "%10d\n", sum/1024; }'
</action>
</metric>
<metric type="uint64" context="host">
<name>UsedPhysicalMemory</name>
<action>
free|egrep -i '^[[:space:]]*(Mem:)' \
|awk 'BEGIN { sum = 0; }
{ sum += $3; }
END { printf "%10d\n", sum/1024; }'
</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="host">
<name>FreeVirtualMemory</name>
<action>
free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \
| awk 'BEGIN { sum = 0; }
free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \
|awk 'BEGIN { sum = 0; }
{ sum += $4; }
END { printf "%d\n", sum/1024; }'
END { printf "%10d\n", sum/1024; }'
</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="host">
<name>UsedVirtualMemory</name>
<action>
free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \
| awk 'BEGIN { sum = 0; }
free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \
|awk 'BEGIN { sum = 0; }
{ sum += $3; }
END { printf "%d\n", sum/1024; }'
END { printf "%10d\n", sum/1024; }'
</action>
</metric>
<!-- SAP "XCIM" -->
<metric type="uint64" context="host">
<name>PagedInMemory</name>
<action>
vmstat -s | awk 'BEGIN {
cmd = "getconf PAGESIZE";
cmd | getline pagesize;
close(cmd);
}
/pages swapped in/ {
printf "%d\n", $1 / 1024 * pagesize / 1024;
}'
</action>
<action>echo "$((`vmstat -s | gawk '/pages paged in/ {print $1}'` / 1024))"</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="host">
<!-- TODO: CHECK -->
<name>PagedOutMemory</name>
<action>
vmstat -s | awk 'BEGIN {
cmd = "getconf PAGESIZE";
cmd | getline pagesize;
close(cmd);
}
/pages swapped out/ {
printf "%d\n", $1 / 1024 * pagesize / 1024;
}'
</action>
<action>echo "$((`vmstat -s | gawk '/pages paged out/ {print $1}'` / 1024))"</action>
</metric>
<!-- SAP "CIM" -->
<metric type="real64" context="host">
<metric type="group" context="host">
<name>PageRates</name>
<action>pagerate.pl</action>
<!-- SAP "CIM" -->
<variable name="PageInRate" type="uint64"/>
<variable name="PageFaultRate" type="uint64"/>
</metric>
<!--<metric type="real64" context="host">
<name>TotalCPUTime</name>
<action>
awk '
function user_hz( hz)
{
cmd = "getconf CLK_TCK";
cmd | getline;
hz = $1;
close(cmd);
return hz;
}
BEGIN {
USER_HZ = user_hz();
TotalCPUTime = 0;
while ( 0 &lt; ( getline &lt; "/proc/stat" ) )
{
if ( "cpu" == $1 )
{
TotalCPUTime = $2 + $3 + $4;
break;
}
}
close("/proc/stat");
#printf "USER_HZ = %d\n", USER_HZ | "cat 1&gt;&amp;2";
TotalCPUTime /= USER_HZ;
printf "%f\n", TotalCPUTime;
#close("cat 1&gt;&amp;2");
}'
</action>
</metric>
<action>virsh -r CONNECT dominfo 0 | sed 's/: */:/' | \
gawk -F: '/CPU time/ {print $2;}'</action>
</metric>-->
<!-- SAP "CIM" -->
<metric type="real64" context="vm">
<name>TotalCPUTime</name>
<action>
virsh -r CONNECT dominfo NAME \
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
| awk -F: '$1 == "CPU_TIME" { print $2; }'
</action>
<action>virsh -r CONNECT dominfo NAME | sed 's/: */:/' | \
gawk -F: '/CPU time/ {print $2;}'</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint32" context="vm">
<name>ResourceProcessorLimit</name>
<action>
virsh -r CONNECT dominfo NAME \
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
| awk -F: '$1 == "CPU(S)" { print $2; }'
</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="vm">
<name>ResourceMemoryLimit</name>
<action>
virsh -r CONNECT dominfo NAME \
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
| awk -F: '$1 == "MAX_MEMORY" { print int($2/1024); }'
</action>
<name>NumberOfAssignedPhysicalCPUs</name>
<action>virsh -r CONNECT dominfo NAME | grep 'CPU(s):' | gawk -F': +' '{print $2}'</action>
</metric>
<!-- SAP "CIM" -->
<metric type="uint64" context="vm">
<name>PhysicalMemoryAllocatedToVirtualSystem</name>
<action>
virsh -r CONNECT dominfo NAME \
|awk -F ':' '
function mkvarnam(s) { # UPPER_CASE_UNDERSCORE
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
gsub("[[:space:]]+", "_", s); s = toupper(s);
return s;
}
function filt_phys(s, sep, num, unit) { # 42.0 KM
sub("(^[[:space:]]+|[[:space:]]+$)", "", s); # trim
if ( s ~ /^[0-9]*\.?[0-9]+[[:space:]]*[[:alpha:]]+$/ )
{
num = s; unit = s;
sub("[[:space:]]*[[:alpha:]]+$", "", num);
sub("^[0-9]*[.]?[0-9]+[[:space:]]*", "", unit);
return num sep toupper(unit);
}
else
{
return s;
}
}
/:/ {
d1 = substr($0, 1, index($0, ":") - 1);
rest = substr($0, index($0, ":") + 1);
printf("%s:%s\n", mkvarnam(d1), filt_phys(rest, ":"));
}' \
| awk -F: '$1 == "USED_MEMORY" { print int($2/1024); }'
</action>
<action>virsh -r CONNECT dominfo NAME | grep 'Max memory:' | gawk -F' +' '{printf "%d\n", $3/1024}'</action>
</metric>
<!-- will only be supported by Fedora -->
<!-- <metric type="uint64" context="vm">
<name>UsedMem</name>
<action>virsh -r CONNECT dominfo NAME | grep 'Used memory:' | gawk -F' +' '{printf "%d\n", $3/1024}'</action>
</metric> -->
</metrics>
</vhostmd>
<!--
vi:ts=2:sw=2:expandtab:ignorecase:nu:ruler
vi:ts=2:sw=2:expandtab:ignorecase:
-->
<!-- EOF -->

115
vhostmd.init Normal file
View file

@ -0,0 +1,115 @@
#!/bin/sh
#
# vhostmd: Virtualization host metrics daemon
#
# chkconfig: - 98 02
# description: This daemon allows access to host information from guests.
### BEGIN INIT INFO
# Provides: vhostmd
# Required-Start: libvirtd
# Required-Stop: libvirtd
# Default-Stop:
# Short-Description: Virtualization host metrics daemon
# Description: This daemon allows access to host information from guests.
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
exec=/usr/sbin/vhostmd
prog=vhostmd
config=/etc/vhostmd/vhostmd.conf
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
ARGS=
if [ -n "$VHOSTMD_VERBOSE" ]; then
ARGS="$ARGS --verbose"
fi
if [ -n "$VHOSTMD_CONFIG" ]; then
ARGS="$ARGS --config $VHOSTMD_CONFIG"
fi
if [ -n "$VHOSTMD_USER" ]; then
ARGS="$ARGS --user $VHOSTMD_USER"
fi
if [ -n "$VHOSTMD_URI" ]; then
ARGS="$ARGS --connect $VHOSTMD_URI"
fi
lockfile=/var/lock/subsys/$prog
start() {
[ -x $exec ] || exit 5
[ -f $config ] || exit 6
echo -n $"Starting $prog: "
daemon $exec $ARGS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog
rm -f /var/run/$prog.pid
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?

View file

@ -1,63 +1,42 @@
# Xen is only available on a limited number of architectures
%ifarch %{ix86} x86_64 ia64
%global have_xen 1
%else
%global have_xen 0
%endif
Summary: Virtualization host metrics daemon
Name: vhostmd
Version: 1.1
Release: 19%{?dist}
License: LGPL-2.1-or-later
Version: 0.4
Release: 0.6.gite9db007b%{?dist}
License: GPLv2+
Group: System Environment/Daemons
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
URL: https://github.com/vhostmd/vhostmd
URL: http://gitorious.org/vhostmd
Source0: https://github.com/vhostmd/vhostmd/archive/v%{version}/%{name}-%{version}.tar.gz
Source1: vhostmd.conf
# Upstream tarball hosting is screwed at the moment. This release is
# a pre-release of 0.4, based on the git commit names in the Release
# tag above, with 'make dist' done by the packager.
Source0: vhostmd-%{version}.tar.bz2
Source1: vhostmd.init
Source2: vhostmd.sysconfig
Source3: vhostmd.conf
# Prevents updates from previous versions with the old config file
# from breaking (RHBZ#1782897).
# https://github.com/vhostmd/vhostmd/commit/83cc269f6892852be94467cea771b3ad1da8a369
Patch0001: 0001-Relax-virtio-requirement-in-config-file.patch
Patch0002: 0002-libmetrics-Set-pointer-NULL-after-free.patch
Patch0003: 0003-libmetrics-Initialize-local-variable-ret-to-failure.patch
Patch0004: 0004-libmetrics-Check-return-value-of-asprintf.patch
Patch0005: 0005-libmetrics-Remove-unsafe-XML_PARSE_NOENT-option.patch
Patch0006: 0006-libmetrics-Ensure-libmetrics-mutex-is-unlocked-in-er.patch
Patch0007: 0007-libmetrics-Fix-potential-memory-leak.patch
Patch0008: 0008-libmetrics-Use-proper-conversion-specifier-when-call.patch
Patch0009: 0009-libmetrics-Fix-potential-leak-of-FILE-pointer.patch
Patch0010: 0010-util-Add-missing-call-to-va_end.patch
Patch0011: 0011-util-Fix-potential-memory-leak.patch
Patch0012: 0012-util-Check-return-value-of-strstr.patch
Patch0013: 0013-Check-return-value-of-asprintf.patch
Patch0014: 0014-vhostmd-Fix-memory-leak-in-parse_transports.patch
Patch0015: 0015-vhostmd-Remove-unsafe-XML_PARSE_NOENT-option.patch
Patch0016: 0016-vhostmd-Check-return-value-of-file-functions.patch
Patch0017: 0017-vhostmd-Check-for-valide-file-handle-before-calling-.patch
Patch0018: 0018-vhostmd-Fix-memory-leak-in-vhostmd_run.patch
Patch0019: 0019-virtio-Fix-strncpy-length-parameter.patch
# https://github.com/vhostmd/vhostmd/pull/13
Patch0020: 0020-implicit-function-declarations.patch
ExcludeArch: %{ix86}
BuildRequires: make
BuildRequires: gcc
BuildRequires: chrpath
BuildRequires: perl-generators
BuildRequires: pkgconfig
BuildRequires: libxml2-devel
BuildRequires: libvirt-devel
BuildRequires: autoconf, automake, libtool
BuildRequires: git
%{?systemd_requires}
BuildRequires: systemd
%if %{have_xen}
BuildRequires: xen-devel
%endif
# This is hopefully temporary, but required to run vhostmd.xml as
# currently written. For more information see:
# https://bugzilla.redhat.com/show_bug.cgi?id=1897130
Requires: libvirt
Requires(post): chkconfig
Requires(preun): chkconfig
Requires(preun): initscripts
Requires(postun): initscripts
Requires(pre): shadow-utils
%description
@ -68,6 +47,7 @@ resource usage from within virtual machines.
%package -n vm-dump-metrics
Summary: Virtualization host metrics dump
Group: Applications/System
%description -n vm-dump-metrics
@ -77,7 +57,8 @@ or a file.
%package -n vm-dump-metrics-devel
Summary: Virtualization host metrics dump development
Requires: vm-dump-metrics = %{version}-%{release}
Group: Development/Libraries
Requires: vm-dump-metrics = %{version}
Requires: pkgconfig
@ -86,16 +67,14 @@ Header and libraries necessary for metrics gathering development
%prep
%autosetup -S git
%setup -q
%build
autoreconf -i
%configure \
%if %{have_xen} == 0
--without-xenstore \
%endif
--with-init-script=systemd \
--enable-shared --disable-static
make %{_smp_mflags}
@ -105,6 +84,13 @@ rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/init.d
install -m 0755 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/init.d/%{name}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name}
#rm $RPM_BUILD_ROOT%{_libdir}/libmetrics.a
rm $RPM_BUILD_ROOT%{_libdir}/libmetrics.la
chrpath --delete $RPM_BUILD_ROOT%{_sbindir}/vm-dump-metrics
@ -118,33 +104,48 @@ rm $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/metric.dtd
# The default configuration file is great for Xen, not so great
# for anyone else. Replace it with one which is better for libvirt
# users.
rm $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf
cp %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf
%if 0%{?rhel}
# Remove Perl script (https://bugzilla.redhat.com/show_bug.cgi?id=749875)
rm $RPM_BUILD_ROOT%{_datadir}/vhostmd/scripts/pagerate.pl
%endif
mv $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf \
$RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf.for.xen
cp %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/vhostmd/vhostmd.conf
%pre
# UID:GID 112:112 reserved, see RHBZ#534109.
%sysusers_create_inline u vhostmd 112 "Virtual Host Metrics Daemon" %{_datadir}/vhostmd /sbin/nologin
%clean
rm -rf $RPM_BUILD_ROOT
%post
%systemd_post vhostmd.service
/sbin/chkconfig --add vhostmd
%preun
%systemd_preun vhostmd.service
if [ $1 = 0 ] ; then
/sbin/service vhostmd stop >/dev/null 2>&1
/sbin/chkconfig --del vhostmd
fi
%postun
%systemd_postun_with_restart vhostmd.service
if [ "$1" -ge "1" ] ; then
/sbin/service vhostmd condrestart >/dev/null 2>&1 || :
fi
%post -n vm-dump-metrics -p /sbin/ldconfig
%postun -n vm-dump-metrics -p /sbin/ldconfig
%pre
getent group vhostmd >/dev/null || groupadd -r vhostmd
getent passwd vhostmd >/dev/null || \
useradd -r -g vhostmd -d %{_datadir}/vhostmd -s /sbin/nologin \
-c "Virtual Host Metrics Daemon" vhostmd
exit 0
%files
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING README
%doc mdisk.xml metric.dtd vhostmd.dtd vhostmd.xml
@ -152,20 +153,20 @@ rm $RPM_BUILD_ROOT%{_datadir}/vhostmd/scripts/pagerate.pl
%dir %{_sysconfdir}/vhostmd
%config(noreplace) %{_sysconfdir}/vhostmd/vhostmd.conf
%config(noreplace) %{_sysconfdir}/vhostmd/vhostmd.conf.for.xen
%config %{_sysconfdir}/vhostmd/vhostmd.dtd
%{_unitdir}/vhostmd.service
%{_sysconfdir}/init.d/%{name}
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%dir %{_datadir}/vhostmd
%dir %{_datadir}/vhostmd/scripts
%if !0%{?rhel}
%{_datadir}/vhostmd/scripts/pagerate.pl
%endif
%{_mandir}/man8/vhostmd.8.gz
%files -n vm-dump-metrics
%defattr(-,root,root,-)
%doc COPYING
%{_sbindir}/vm-dump-metrics
%{_libdir}/libmetrics.so.0
@ -174,6 +175,7 @@ rm $RPM_BUILD_ROOT%{_datadir}/vhostmd/scripts/pagerate.pl
%files -n vm-dump-metrics-devel
%defattr(-,root,root,-)
%doc README
%{_libdir}/libmetrics.so
%dir %{_includedir}/vhostmd
@ -181,185 +183,6 @@ rm $RPM_BUILD_ROOT%{_datadir}/vhostmd/scripts/pagerate.pl
%changelog
* Thu Oct 2 2025 Daniel P. Berrangé <berrange@redhat.com> - 1.1-19
- Disable build on i686 architecture
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Jul 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1.1-10
- Miscellaneous upstream fixes.
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1.1-8
- Rebuilt for updated systemd-rpm-macros
See https://pagure.io/fesco/issue/2583.
* Tue Feb 09 2021 Richard W.M. Jones <rjones@redhat.com> - 1.1-7
- Unify vhostmd.conf with RHEL 8.4 (RHBZ#1924966).
* Thu Feb 04 2021 Richard W.M. Jones <rjones@redhat.com> - 1.1-6
- Increase release so > RHEL 8 (RHBZ#1924966).
- Unify spec files between RHEL and Fedora.
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Aug 29 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1-1
- Upstream version 1.1.
- Remove patches, since all included 1.1.
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Jan 18 2019 Richard W.M. Jones <rjones@redhat.com> - 1.0-2
- Upstream version 1.0.
- Remove patches, since all included 1.0.
- Add patches since 1.0.
- Fix Source0 URL, hosted on github.
- Remove old Source1 and Source2, not used.
* Tue Oct 16 2018 Richard W.M. Jones <rjones@redhat.com> - 0.5-19
- Include all upstream patches since 0.5.
- Enable systemd init scripts (RHBZ#1592400).
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Jul 05 2018 Richard W.M. Jones <rjones@redhat.com> - 0.5-17
- Remove ldconfig
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/SU3LJVDZ7LUSJGZR5MS72BMRAFP3PQQL/
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 0.5-16
- Escape macros in %%changelog
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Tue Jan 26 2016 Richard Jones <rjones@redhat.com> - 0.5-11
- Remove useless defattr in files section.
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat Aug 03 2013 Petr Pisar <ppisar@redhat.com> - 0.5-7
- Perl 5.18 rebuild
* Mon Jul 29 2013 Richard W.M. Jones <rjones@redhat.com> - 0.5-6
- Completely disable Xen. APIs seem to have changed incompatibly.
- Add commits from upstream since 0.5.
- Remove pagerate.pl when building on RHEL.
- Modernize the spec file.
* Wed Jul 17 2013 Petr Pisar <ppisar@redhat.com> - 0.5-5
- Perl 5.18 rebuild
* Thu May 23 2013 Richard W.M. Jones <rjones@redhat.com> - 0.5-4
- Disable Xen support on RHEL >= 6 (RHBZ#927853).
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Mon Jan 16 2012 Richard W.M. Jones <rjones@redhat.com> - 0.5-1
- New upstream version 0.5.
- Remove -ldl patch which is now upstream.
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Fri Jul 23 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-11
- /etc/sysconfig/vhostmd: Default to KVM.
* Tue Jul 13 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-10
- Patch Makefile.in directly so we don't need to run autotools.
* Tue Jul 6 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-9
- Updated vhostmd.conf from Dr. Joachim Schneider at SAP.
- Run aclocal.
* Tue Apr 27 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-6
- Updated vhostmd.conf file which enables TotalCPUTime metric.
* Tue Feb 16 2010 Richard W.M. Jones <rjones@redhat.com> - 0.4-5
- Add a patch to link tests explicitly with -ldl (RHBZ#565096).
* Thu Dec 10 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-2
- Fix the PagedOutMemory and PagedInMemory stats to report MB instead
of pages (fixes supplied by Joachim Schneider).
* Wed Dec 9 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-1
- vhostmd didn't chdir ("/") when daemonizing. Fixed in this 0.4 release.
* Tue Nov 17 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.9.gite9db007b
- Add a timestamp to the metrics.
- Fix a typo in MemoryAllocatedToVirtualServers metric
(https://bugzilla.redhat.com/show_bug.cgi?id=532070#c7)
- %%{_sysconfdir}/sysconfig/vhostmd: Use libvirt default URI
(https://bugzilla.redhat.com/show_bug.cgi?id=537828)
- %%{_sysconfdir}/init.d/vhostmd: If using libvirt's default URI, then pass
the root URI to vhostmd (the default URI changes in some circumstances
when vhostmd switches to the non-root user).
* Wed Nov 11 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.8.gite9db007b
- Use fixed UID:GID 112:112 (RHBZ#534109).
* Tue Nov 10 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.7.gite9db007b
- vm-dump-metrics-devel package should require version and release of
base package.
* Mon Nov 2 2009 Richard W.M. Jones <rjones@redhat.com> - 0.4-0.6.gite9db007b
- Some changes to the default configuration file suggested by SAP to
make it more CIM standards compliant.

11
vhostmd.sysconfig Normal file
View file

@ -0,0 +1,11 @@
# Uncomment the following line to print verbose messages.
#VHOSTMD_VERBOSE=1
# Override the default configuration file path.
#VHOSTMD_CONFIG=/path/to/vhostmd.conf
# Set the user that the daemon runs as after dropping root privs.
VHOSTMD_USER=vhostmd
# Set the libvirt URI.
VHOSTMD_URI=qemu:///system