Initial SRPM import

Signed-off-by: Tomas Hozza <thozza@redhat.com>
This commit is contained in:
Tomas Hozza 2013-09-04 16:12:40 +02:00
parent 0c8ad59152
commit 8e8f9a7b03
11 changed files with 455 additions and 0 deletions

6
.gitignore vendored
View File

@ -0,0 +1,6 @@
/hv_get_dhcp_info.sh
/hv_get_dns_info.sh
/hv_kvp_daemon.c
/hv_set_ifconfig.sh
/hv_vss_daemon.c
/COPYING

229
hyperv-daemons.spec Normal file
View File

@ -0,0 +1,229 @@
# HyperV KVP daemon binary name
%global hv_kvp_daemon hypervkvpd
# HyperV VSS daemon binary name
%global hv_vss_daemon hypervvssd
# snapshot version
%global snapver .20130826git
# use hardened build
%global _hardened_build 1
Name: hyperv-daemons
Version: 0
Release: 0.1%{?snapver}%{?dist}
Summary: HyperV daemons suite
Group: System Environment/Daemons
License: GPLv2
URL: http://www.kernel.org
# Source files obtained from kernel upstream 2013-08-26.
# git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
# The daemon and scripts are located in "master branch - /tools/hv"
# COPYING -> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/plain/COPYING?id=refs/tags/next-20130822
Source0: COPYING
# HYPERV KVP DAEMON
# hv_kvp_daemon.c -> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/plain/tools/hv/hv_kvp_daemon.c?id=refs/tags/next-20130822
Source1: hv_kvp_daemon.c
# hv_get_dhcp_info.sh -> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/plain/tools/hv/hv_get_dhcp_info.sh?id=refs/tags/next-20130822
Source2: hv_get_dhcp_info.sh
# hv_get_dns_info.sh -> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/plain/tools/hv/hv_get_dns_info.sh?id=refs/tags/next-20130822
Source3: hv_get_dns_info.sh
# hv_set_ifconfig.sh -> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/plain/tools/hv/hv_set_ifconfig.sh?id=refs/tags/next-20130822
Source4: hv_set_ifconfig.sh
Source5: hypervkvpd.service
# HYPERV VSS DAEMON
# hv_vss_daemon.c -> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/plain/tools/hv/hv_vss_daemon.c?id=refs/tags/next-20130822
Source100: hv_vss_daemon.c
Source101: hypervvssd.service
# HYPERV KVP DAEMON
# Correct paths to external scripts ("/usr/libexec/hypervkvpd").
Patch0: hypervkvpd-0-corrected_paths_to_external_scripts.patch
# use quoted include for linux/hyperv.h because we use gcc option
# -iquote for include PATH where it is located. This is because
# some headers in system include PATH are also in kernel-devel
# package.
Patch1: hypervkvpd-0-include_fix.patch
# rhbz#872566
Patch2: hypervkvpd-0-long_file_names_from_readdir.patch
# Remove daemon() call and let systemd handle it
Patch3: hypervkvpd-0-dont_call_deamon.patch
# HYPERV VSS DAEMON
# use quoted include for linux/hyperv.h because we use gcc option
# -iquote for include PATH where it is located. This is because
# some headers in system include PATH are also in kernel-devel
# package.
Patch100: hypervvssd-0-fix_includes.patch
# Remove daemon() call and let systemd handle it
Patch101: hypervvssd-0-dont_call_daemon.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# HyperV is available only on x86 architectures
ExclusiveArch: i686 x86_64
Requires: hypervkvpd = %{version}-%{release}
Requires: hypervvssd = %{version}-%{release}
%description
Suite of daemons that are needed when Linux guest
is running on Windows Host with HyperV.
%package -n hypervkvpd
Summary: HyperV key value pair (KVP) daemon
Group: System Environment/Daemons
Requires: %{name}-license = %{version}-%{release}
BuildRequires: systemd, kernel-devel
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%description -n hypervkvpd
Hypervkvpd is an implementation of HyperV key value pair (KVP)
functionality for Linux. The daemon first registers with the
kernel driver. After this is done it collects information
requested by Windows Host about the Linux Guest. It also supports
IP injection functionality on the Guest.
%package -n hypervvssd
Summary: HyperV VSS daemon
Group: System Environment/Daemons
Requires: %{name}-license = %{version}-%{release}
BuildRequires: systemd, kernel-devel
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%description -n hypervvssd
Hypervvssd is an implementation of HyperV VSS functionality
for Linux. The daemon is used for host initiated guest snapshot
on HyperV hypervisor. The daemon first registers with the
kernel driver. After this is done it waits for instructions
from Windows Host if to "freeze" or "thaw" the filesystem
on the Linux Guest.
%package license
Summary: License of the HyperV daemons suite
Group: Applications/System
BuildArch: noarch
%description license
Contains license of the HyperV daemons suite.
%prep
%setup -Tc
cp -pvL %{SOURCE0} COPYING
cp -pvL %{SOURCE1} hv_kvp_daemon.c
cp -pvL %{SOURCE2} hv_get_dhcp_info.sh
cp -pvL %{SOURCE3} hv_get_dns_info.sh
cp -pvL %{SOURCE4} hv_set_ifconfig.sh
cp -pvL %{SOURCE5} hypervkvpd.service
cp -pvL %{SOURCE100} hv_vss_daemon.c
cp -pvL %{SOURCE101} hypervvssd.service
%patch0 -p1 -b .external_scripts
%patch1 -p1 -b .include
%patch2 -p1 -b .long_names
%patch3 -p1 -b .daemon
%patch100 -p1 -b .include
%patch101 -p1 -b .daemon
%build
# kernel-devel version
%{!?kversion: %global kversion `ls %{_usrsrc}/kernels | sort -dr | head -n 1`}
# HYPERV KVP DAEMON
gcc \
$RPM_OPT_FLAGS \
-iquote %{_usrsrc}/kernels/%{kversion}/include \
-c hv_kvp_daemon.c
gcc \
$RPM_LD_FLAGS \
hv_kvp_daemon.o \
-o %{hv_kvp_daemon}
# HYPERV VSS DAEMON
gcc \
$RPM_OPT_FLAGS \
-iquote %{_usrsrc}/kernels/%{kversion}/include \
-c hv_vss_daemon.c
gcc \
$RPM_LD_FLAGS \
hv_vss_daemon.o \
-o %{hv_vss_daemon}
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_sbindir}
install -p -m 0755 %{hv_kvp_daemon} %{buildroot}%{_sbindir}
install -p -m 0755 %{hv_vss_daemon} %{buildroot}%{_sbindir}
mkdir -p %{buildroot}%{_unitdir}
# Systemd unit file
install -p -m 0644 %{SOURCE5} %{buildroot}%{_unitdir}
install -p -m 0644 %{SOURCE101} %{buildroot}%{_unitdir}
# Shell scripts for the daemon
mkdir -p %{buildroot}%{_libexecdir}/%{name}
install -p -m 0755 hv_get_dhcp_info.sh %{buildroot}%{_libexecdir}/%{name}/hv_get_dhcp_info
install -p -m 0755 hv_get_dns_info.sh %{buildroot}%{_libexecdir}/%{name}/hv_get_dns_info
install -p -m 0755 hv_set_ifconfig.sh %{buildroot}%{_libexecdir}/%{name}/hv_set_ifconfig
# Directory for pool files
mkdir -p %{buildroot}%{_sharedstatedir}/hyperv
%post -n hypervkvpd
%systemd_post hypervkvpd.service
%preun -n hypervkvpd
%systemd_preun hypervkvpd.service
%postun -n hypervkvpd
# hypervkvpd daemon does NOT support restarting (driver, neither)
%systemd_postun hypervkvpd.service
# If removing the package, delete %%{_sharedstatedir}/hyperv directory
if [ "$1" -eq "0" ] ; then
rm -rf %{_sharedstatedir}/hyperv || :
fi
%post -n hypervvssd
%systemd_post hypervvssd.service
%postun -n hypervvssd
%systemd_postun hypervvssd.service
%preun -n hypervvssd
%systemd_preun hypervvssd.service
%files -n hypervkvpd
%{_sbindir}/%{hv_kvp_daemon}
%{_unitdir}/hypervkvpd.service
%dir %{_libexecdir}/%{name}
%{_libexecdir}/%{name}/hv_get_dhcp_info
%{_libexecdir}/%{name}/hv_get_dns_info
%{_libexecdir}/%{name}/hv_set_ifconfig
%dir %{_sharedstatedir}/hyperv
%files -n hypervvssd
%{_sbindir}/%{hv_vss_daemon}
%{_unitdir}/hypervvssd.service
%files license
%doc COPYING
%changelog
* Mon Aug 26 2013 Tomas Hozza <thozza@redhat.com> - 0-0.1.20130826git
- Initial package

View File

@ -0,0 +1,45 @@
From c8cec9f3f9c34aa824e652a01ae08e7e7a621daa Mon Sep 17 00:00:00 2001
From: Tomas Hozza <thozza@redhat.com>
Date: Wed, 26 Sep 2012 10:26:55 +0200
Subject: [PATCH] Corrected paths to hypervkvpd external scripts.
Corrected paths to hypervkvpd external scripts, because
they will be located in "/usr/libexec/hypervkvpd".
---
hv_kvp_daemon.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/hv_kvp_daemon.c b/hv_kvp_daemon.c
index 5959aff..3ea3af2 100644
--- a/hv_kvp_daemon.c
+++ b/hv_kvp_daemon.c
@@ -812,7 +812,7 @@ static void kvp_get_ipconfig_info(char *if_name,
* .
*/
- sprintf(cmd, "%s", "hv_get_dns_info");
+ sprintf(cmd, "%s", "/usr/libexec/hypervkvpd/hv_get_dns_info");
/*
* Execute the command to gather DNS info.
@@ -829,7 +829,7 @@ static void kvp_get_ipconfig_info(char *if_name,
* Enabled: DHCP enabled.
*/
- sprintf(cmd, "%s %s", "hv_get_dhcp_info", if_name);
+ sprintf(cmd, "%s %s", "/usr/libexec/hypervkvpd/hv_get_dhcp_info", if_name);
file = popen(cmd, "r");
if (file == NULL)
@@ -1331,7 +1331,7 @@ setval_done:
* invoke the external script to do its magic.
*/
- snprintf(cmd, sizeof(cmd), "%s %s", "hv_set_ifconfig", if_file);
+ snprintf(cmd, sizeof(cmd), "%s %s", "/usr/libexec/hypervkvpd/hv_set_ifconfig", if_file);
if (system(cmd)) {
syslog(LOG_ERR, "Failed to execute cmd '%s'; error: %d %s",
cmd, errno, strerror(errno));
--
1.7.11.4

View File

@ -0,0 +1,12 @@
diff -up hypervkvpd-0/hv_kvp_daemon.c.daemon hypervkvpd-0/hv_kvp_daemon.c
--- hypervkvpd-0/hv_kvp_daemon.c.daemon 2013-08-09 10:51:41.020041192 +0200
+++ hypervkvpd-0/hv_kvp_daemon.c 2013-08-09 10:53:23.217056215 +0200
@@ -1434,8 +1434,6 @@ int main(void)
char *kvp_recv_buffer;
size_t kvp_recv_buffer_len;
- if (daemon(1, 0))
- return 1;
openlog("KVP", 0, LOG_USER);
syslog(LOG_INFO, "KVP starting; pid is:%d", getpid());

View File

@ -0,0 +1,21 @@
diff -up hypervkvpd-0/hv_kvp_daemon.c.include hypervkvpd-0/hv_kvp_daemon.c
--- hypervkvpd-0/hv_kvp_daemon.c.include 2013-03-20 14:47:30.812899613 +0100
+++ hypervkvpd-0/hv_kvp_daemon.c 2013-03-20 14:47:42.337896971 +0100
@@ -26,7 +26,7 @@
#include <sys/socket.h>
#include <sys/poll.h>
#include <sys/utsname.h>
-#include <linux/types.h>
+/* #include <linux/types.h> */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -35,7 +35,7 @@
#include <errno.h>
#include <arpa/inet.h>
#include <linux/connector.h>
-#include <linux/hyperv.h>
+#include "linux/hyperv.h"
#include <linux/netlink.h>
#include <ifaddrs.h>
#include <netdb.h>

View File

@ -0,0 +1,92 @@
From 396ee697e4d5c7d10bacf6d4670fb4ddab357330 Mon Sep 17 00:00:00 2001
From: Tomas Hozza <thozza@redhat.com>
Date: Mon, 5 Nov 2012 13:56:02 +0100
Subject: [PATCH] Tools: hv: Fix for long file names from readdir
kvp_get_if_name and kvp_mac_to_if_name copy strings into statically
sized buffers which could be too small to store really long names.
Buffer sizes have been increased and length checks added via snprintf.
---
hv_kvp_daemon.c | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/hv_kvp_daemon.c b/hv_kvp_daemon.c
index 3ea3af2..4c2ab6a 100755
--- a/hv_kvp_daemon.c
+++ b/hv_kvp_daemon.c
@@ -44,6 +44,7 @@
#include <fcntl.h>
#include <dirent.h>
#include <net/if.h>
+#include <limits.h>
/*
* KVP protocol: The user mode component first registers with the
@@ -588,26 +589,22 @@ static char *kvp_get_if_name(char *guid)
DIR *dir;
struct dirent *entry;
FILE *file;
- char *p, *q, *x;
+ char *p, *x;
char *if_name = NULL;
char buf[256];
char *kvp_net_dir = "/sys/class/net/";
- char dev_id[256];
+ char dev_id[PATH_MAX];
dir = opendir(kvp_net_dir);
if (dir == NULL)
return NULL;
- snprintf(dev_id, sizeof(dev_id), "%s", kvp_net_dir);
- q = dev_id + strlen(kvp_net_dir);
-
while ((entry = readdir(dir)) != NULL) {
/*
* Set the state for the next pass.
*/
- *q = '\0';
- strcat(dev_id, entry->d_name);
- strcat(dev_id, "/device/device_id");
+ snprintf(dev_id, sizeof(dev_id), "%s%s/device/device_id", kvp_net_dir,
+ entry->d_name);
file = fopen(dev_id, "r");
if (file == NULL)
@@ -680,28 +677,23 @@ static char *kvp_mac_to_if_name(char *mac)
DIR *dir;
struct dirent *entry;
FILE *file;
- char *p, *q, *x;
+ char *p, *x;
char *if_name = NULL;
char buf[256];
char *kvp_net_dir = "/sys/class/net/";
- char dev_id[256];
+ char dev_id[PATH_MAX];
int i;
dir = opendir(kvp_net_dir);
if (dir == NULL)
return NULL;
- snprintf(dev_id, sizeof(dev_id), kvp_net_dir);
- q = dev_id + strlen(kvp_net_dir);
-
while ((entry = readdir(dir)) != NULL) {
/*
* Set the state for the next pass.
*/
- *q = '\0';
-
- strcat(dev_id, entry->d_name);
- strcat(dev_id, "/address");
+ snprintf(dev_id, sizeof(dev_id), "%s%s/address", kvp_net_dir,
+ entry->d_name);
file = fopen(dev_id, "r");
if (file == NULL)
--
1.7.11.7

10
hypervkvpd.service Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Description=Hyper-V KVP daemon
ConditionVirtualization=microsoft
[Service]
Type=simple
ExecStart=/usr/sbin/hypervkvpd
[Install]
WantedBy=basic.target

View File

@ -0,0 +1,13 @@
diff -up ./hv_vss_daemon.c.daemon ./hv_vss_daemon.c
--- ./hv_vss_daemon.c.daemon 2013-06-26 10:26:42.272419971 +0200
+++ ./hv_vss_daemon.c 2013-06-26 10:27:12.894443174 +0200
@@ -148,9 +148,6 @@ int main(void)
char *vss_recv_buffer;
size_t vss_recv_buffer_len;
- if (daemon(1, 0))
- return 1;
-
openlog("Hyper-V VSS", 0, LOG_USER);
syslog(LOG_INFO, "VSS starting; pid is:%d", getpid());

View File

@ -0,0 +1,12 @@
diff -up ./hv_vss_daemon.c.include ./hv_vss_daemon.c
--- ./hv_vss_daemon.c.include 2013-06-26 10:36:36.444910963 +0200
+++ ./hv_vss_daemon.c 2013-06-26 10:37:22.115951240 +0200
@@ -34,7 +34,7 @@
#include <arpa/inet.h>
#include <linux/fs.h>
#include <linux/connector.h>
-#include <linux/hyperv.h>
+#include "linux/hyperv.h"
#include <linux/netlink.h>
#include <syslog.h>

9
hypervvssd.service Normal file
View File

@ -0,0 +1,9 @@
[Unit]
Description=Hyper-V VSS daemon
ConditionVirtualization=microsoft
[Service]
ExecStart=/usr/sbin/hypervvssd
[Install]
WantedBy=basic.target

View File

@ -0,0 +1,6 @@
5a1b4a81be9d5bbbf8869976408354e8 hv_get_dhcp_info.sh
dbb5cc7ec83ccc7b1c39458a7521c9b4 hv_get_dns_info.sh
38064680ecf579444d853803ab265528 hv_kvp_daemon.c
da7f77aa7507e950851cbb53673ce5d4 hv_set_ifconfig.sh
8ae1875cc2bbf54e4a0b39f9f75a457d hv_vss_daemon.c
d7810fab7487fb0aad327b76f1be7cd7 COPYING