diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index e69de29..0000000 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..869264c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +vhostmd-0.4.tar.bz2 diff --git a/Makefile b/Makefile deleted file mode 100644 index 60aa6a2..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: vhostmd -# $Id$ -NAME := vhostmd -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/sources b/sources index e69de29..29cbdd2 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +139650528c154da52a65adedfb8e83cf vhostmd-0.4.tar.bz2 diff --git a/vhostmd.conf b/vhostmd.conf new file mode 100644 index 0000000..271e821 --- /dev/null +++ b/vhostmd.conf @@ -0,0 +1,154 @@ + + + + + + + + + host-metrics-disk + /dev/shm/vhostmd0 + + 256 + + 60 + /bin:/sbin:/usr/bin:/usr/sbin:/usr/share/vhostmd/scripts + vbd + + + + + HostName + hostname + + + Time + date +%s + + + VirtualizationVendor + rpm -qi libvirt| grep Vendor: |awk '{print substr($0, index($0,$5)) }' + + + + VirtProductInfo + virsh -r CONNECT version | grep API | gawk -F': ' '{print $2}' + + + + HostSystemInfo + hostname -s + + + + NumberOfPhysicalCPUsUtilized + virsh -r CONNECT nodeinfo | grep 'CPU(s):' | gawk -F': +' '{print $2}' + + + + MemoryAllocatedToVirtualServers + virsh -r CONNECT nodeinfo | grep 'Memory size:' | gawk -F' +' '{ printf "%d\n", $3/1024 }' + + + + FreePhysicalMemory + + free|egrep -i '^[[:space:]]*(Mem:)' \ + |awk 'BEGIN { sum = 0; } + { sum += $4; } + END { printf "%10d\n", sum/1024; }' + + + + UsedPhysicalMemory + + free|egrep -i '^[[:space:]]*(Mem:)' \ + |awk 'BEGIN { sum = 0; } + { sum += $3; } + END { printf "%10d\n", sum/1024; }' + + + + + FreeVirtualMemory + + free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \ + |awk 'BEGIN { sum = 0; } + { sum += $4; } + END { printf "%10d\n", sum/1024; }' + + + + + UsedVirtualMemory + + free|egrep -i '^[[:space:]]*(Mem:|Swap:)' \ + |awk 'BEGIN { sum = 0; } + { sum += $3; } + END { printf "%10d\n", sum/1024; }' + + + + PagedInMemory + echo "$((`vmstat -s | gawk '/pages paged in/ {print $1}'` / 1024))" + + + + + PagedOutMemory + echo "$((`vmstat -s | gawk '/pages paged out/ {print $1}'` / 1024))" + + + PageRates + pagerate.pl + + + + + + + + TotalCPUTime + virsh -r CONNECT dominfo NAME | sed 's/: */:/' | \ + gawk -F: '/CPU time/ {print $2;}' + + + NumberOfAssignedPhysicalCPUs + virsh -r CONNECT dominfo NAME | grep 'CPU(s):' | gawk -F': +' '{print $2}' + + + + PhysicalMemoryAllocatedToVirtualSystem + virsh -r CONNECT dominfo NAME | grep 'Max memory:' | gawk -F' +' '{printf "%d\n", $3/1024}' + + + + + + + diff --git a/vhostmd.init b/vhostmd.init new file mode 100644 index 0000000..ca3c587 --- /dev/null +++ b/vhostmd.init @@ -0,0 +1,118 @@ +#!/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" +elif virsh uri >/dev/null 2>&1; then + default_uri=$(virsh uri) + ARGS="$ARGS --connect '$default_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 $? diff --git a/vhostmd.spec b/vhostmd.spec new file mode 100644 index 0000000..e8e3718 --- /dev/null +++ b/vhostmd.spec @@ -0,0 +1,240 @@ +# 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: 0.4 +Release: 0.6.gite9db007b%{?dist}.1 +License: GPLv2+ +Group: System Environment/Daemons +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +URL: http://gitorious.org/vhostmd + +# 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 + +BuildRequires: chrpath +BuildRequires: pkgconfig +BuildRequires: libxml2-devel +BuildRequires: libvirt-devel + +%if %{have_xen} +BuildRequires: xen-devel +%endif + +Requires(post): chkconfig +Requires(preun): chkconfig +Requires(preun): initscripts +Requires(postun): initscripts +Requires(pre): shadow-utils + + +%description +vhostmd provides a "metrics communication channel" between a host and +its hosted virtual machines, allowing limited introspection of host +resource usage from within virtual machines. + + +%package -n vm-dump-metrics +Summary: Virtualization host metrics dump +Group: Applications/System + + +%description -n vm-dump-metrics +Executable to dump all available virtualization host metrics to stdout +or a file. + + +%package -n vm-dump-metrics-devel +Summary: Virtualization host metrics dump development +Group: Development/Libraries +Requires: vm-dump-metrics = %{version}-%{release} +Requires: pkgconfig + + +%description -n vm-dump-metrics-devel +Header and libraries necessary for metrics gathering development + + +%prep +%setup -q + + +%build +%configure \ +%if %{have_xen} == 0 + --without-xenstore \ +%endif + --enable-shared --disable-static +make %{_smp_mflags} + + +%install +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 + +# Remove docdir - we'll make a proper one ourselves. +rm -r $RPM_BUILD_ROOT%{_docdir}/vhostmd + +# Remove metric.dtd from /etc. +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. +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 + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%post +/sbin/chkconfig --add vhostmd + + +%preun +if [ $1 = 0 ] ; then + /sbin/service vhostmd stop >/dev/null 2>&1 + /sbin/chkconfig --del vhostmd +fi + + +%postun +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 +# UID:GID 112:112 reserved, see RHBZ#534109. +getent group vhostmd >/dev/null || groupadd -g 112 -r vhostmd +getent passwd vhostmd >/dev/null || \ +useradd -u 112 -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 + +%{_sbindir}/vhostmd + +%dir %{_sysconfdir}/vhostmd +%config(noreplace) %{_sysconfdir}/vhostmd/vhostmd.conf +%config(noreplace) %{_sysconfdir}/vhostmd/vhostmd.conf.for.xen +%config %{_sysconfdir}/vhostmd/vhostmd.dtd +%{_sysconfdir}/init.d/%{name} +%config(noreplace) %{_sysconfdir}/sysconfig/%{name} + +%dir %{_datadir}/vhostmd +%dir %{_datadir}/vhostmd/scripts +%{_datadir}/vhostmd/scripts/pagerate.pl + +%{_mandir}/man8/vhostmd.8.gz + + +%files -n vm-dump-metrics +%defattr(-,root,root,-) +%doc COPYING +%{_sbindir}/vm-dump-metrics +%{_libdir}/libmetrics.so.0 +%{_libdir}/libmetrics.so.0.0.0 +%{_mandir}/man1/vm-dump-metrics.1.gz + + +%files -n vm-dump-metrics-devel +%defattr(-,root,root,-) +%doc README +%{_libdir}/libmetrics.so +%dir %{_includedir}/vhostmd +%{_includedir}/vhostmd/libmetrics.h + + +%changelog +* Tue Nov 17 2009 Richard W.M. Jones - 0.4-0.6.gite9db007b.el5.1 +- 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). +- Use fixed UID:GID 112:112 (RHBZ#534109). +- vm-dump-metrics-devel package should require version and release of + base package. + +* Mon Nov 2 2009 Richard W.M. Jones - 0.4-0.6.gite9db007b +- Some changes to the default configuration file suggested by SAP to + make it more CIM standards compliant. + +* Fri Oct 16 2009 Richard W.M. Jones - 0.4-0.5.gite9db007b +- 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. + +* Fri Oct 16 2009 Richard W.M. Jones - 0.4-0.4.gitea2f772d +- Re-add xen-devel dependency. This is a bug in EPEL builders. + +* Thu Oct 15 2009 Richard W.M. Jones - 0.4-0.3.gitea2f772d +- Remove xen-devel dependency on ALL architectures. + +* Thu Oct 15 2009 Richard W.M. Jones - 0.4-0.2.gitea2f772d +- 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. + +* Tue Oct 13 2009 Richard W.M. Jones - 0.4-0.1.git326f0012172 +- Move to pre-release of 0.4, self-built tarball. +- Disable xenstore on non-x86 platforms. +- Add patch to fix --without-xenstore option. +- Use have_xen RPM macro. + +* Mon Oct 12 2009 Richard W.M. Jones - 0.3-3 +- Remove metric.dtd file from /etc (fixes rpmlint warning), but + vhostmd.dtd has to remain because it is needed to validate the + XML configuration file. +- Remove ExclusiveArch, instead conditionally depend on xen-devel. +- Use a better, less noisy, more minimal configuration file which + doesn't depend on Xen. + +* Thu Oct 8 2009 Richard W.M. Jones - 0.3-1 +- New upstream version 0.3. + +* Fri Aug 14 2009 Richard W.M. Jones - 0.2-1 +- Initial packaging for Fedora, based on SuSE package. diff --git a/vhostmd.sysconfig b/vhostmd.sysconfig new file mode 100644 index 0000000..f3d97c3 --- /dev/null +++ b/vhostmd.sysconfig @@ -0,0 +1,14 @@ +# 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. +# Uncomment one of these to force KVM or Xen, otherwise libvirt +# will try to choose a suitable default. +#VHOSTMD_URI=qemu:///system +#VHOSTMD_URI=xen:///