spice-html5 is present in almost all supported Linux distributions
(RHEL6.5, Fedora20 and Ubuntu 14.04). So in those cases we should not package
the spice-html5 code into Kimchi and instead of that uses the spice-html5 package
as dependency.
This patch change the build process to check the spice-html5 package
availability in order to decide to package or not the spice-html5 code.
spice-html5 package is not available for RHEL7 and openSUSE 13.1. So
for those distributions, you must run the following command to Kimchi
includes the spice-html5 into its package.
./autogen.sh --with-spice-html5
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
contrib/DEBIAN/control.in | 3 ++-
contrib/kimchi.spec.fedora.in | 8 ++++++++
contrib/kimchi.spec.suse.in | 2 +-
docs/README.md | 10 +++++++++-
src/kimchi/Makefile.am | 11 +++++++++--
src/kimchi/config.py.in | 42 ++++++++++++++++++++++++++++++++++--------
tests/test_config.py.in | 15 ++++++++++++++-
ui/js/src/kimchi.api.js | 2 +-
8 files changed, 78 insertions(+), 15 deletions(-)
diff --git a/contrib/DEBIAN/control.in b/contrib/DEBIAN/control.in
index 7372a58..08ef72d 100644
--- a/contrib/DEBIAN/control.in
+++ b/contrib/DEBIAN/control.in
@@ -27,7 +27,8 @@ Depends: python-cherrypy3 (>= 3.2.0),
firewalld,
nginx,
python-guestfs,
- libguestfs-tools
+ libguestfs-tools,
+ spice-html5
Build-Depends: libxslt,
python-libxml2,
python-requests
diff --git a/contrib/kimchi.spec.fedora.in b/contrib/kimchi.spec.fedora.in
index 4da08bc..a12471d 100644
--- a/contrib/kimchi.spec.fedora.in
+++ b/contrib/kimchi.spec.fedora.in
@@ -35,6 +35,10 @@ BuildRequires: libxslt
BuildRequires: libxml2-python
BuildRequires: python-requests
+%if 0%{?rhel} == 6 || 0%{?fedora} >= 19
+Requires: spice-html5
+%endif
+
%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
%global with_systemd 1
%endif
@@ -66,7 +70,11 @@ Web server application to manage KVM/Qemu virtual machines
%build
+%if 0%{?rhel} == 6 || 0%{?fedora} >= 19
%configure
+%else
+%configure --with-spice-html5
+%endif
make
diff --git a/contrib/kimchi.spec.suse.in b/contrib/kimchi.spec.suse.in
index 8411936..c366b60 100644
--- a/contrib/kimchi.spec.suse.in
+++ b/contrib/kimchi.spec.suse.in
@@ -45,7 +45,7 @@ Web server application to manage KVM/Qemu virtual machines
%setup
%build
-%configure
+%configure --with-spice-html5
make
%install
diff --git a/docs/README.md b/docs/README.md
index 7703037..432cb4e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -57,6 +57,10 @@ Install Dependencies
policycoreutils-python python-libguestfs \
libguestfs-tools python-requests python-websockify \
novnc
+
+ # If using RHEL6 or Fedora, install the following additional package:
+ $ sudo yum install spice-html5
+
# If using RHEL6, install the following additional packages:
$ sudo yum install python-unittest2 python-ordereddict
# Restart libvirt to allow configuration changes to take effect
@@ -80,7 +84,7 @@ for more information on how to configure your system to access this
repository.
sosreport python-ipaddr python-lxml nfs-common \
open-iscsi lvm2 xsltproc python-parted nginx \
firewalld python-guestfs libguestfs-tools \
- python-requests websockify novnc
+ python-requests websockify novnc spice-html5
Packages version requirement:
python-jsonschema >= 1.3.0
@@ -112,8 +116,12 @@ information on how configure your system to access this repository.
Build and Install
-----------------
+ For RHEL7 and openSUSE 13.1:
+ $ ./autogen.sh --with-spice-html5
+ Otherwise:
$ ./autogen.sh --system
+
$ make
$ sudo make install # Optional if running from the source tree
diff --git a/src/kimchi/Makefile.am b/src/kimchi/Makefile.am
index e2b5de8..84def58 100644
--- a/src/kimchi/Makefile.am
+++ b/src/kimchi/Makefile.am
@@ -27,6 +27,12 @@ EXTRA_DIST = \
API.json \
config.py.in
+if WITH_SPICE
+WITH_SPICE=yes
+else
+WITH_SPICE=no
+endif
+
kimchidir = $(pythondir)/kimchi
install-data-local:
@@ -38,13 +44,14 @@ uninstall-local:
do_substitution = \
sed -e 's,[@]prefix[@],$(prefix),g' \
- -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
-e 's,[@]sysconfdir[@],$(sysconfdir),g' \
-e 's,[@]localstatedir[@],$(localstatedir),g' \
-e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \
-e 's,[@]kimchidir[@],$(kimchidir),g' \
-e 's,[@]kimchiversion[@],$(PACKAGE_VERSION),g' \
- -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g'
+ -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g' \
+ -e 's,[@]withspice[@],$(WITH_SPICE),g'
config.py: config.py.in Makefile
diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in
index 097c017..e679c90 100644
--- a/src/kimchi/config.py.in
+++ b/src/kimchi/config.py.in
@@ -31,6 +31,7 @@ from kimchi.xmlutils import xpath_get_text
__version__ = "@kimchiversion@"
__release__ = "@kimchirelease@"
+__with_spice__ = "@withspice@"
DEFAULT_LOG_LEVEL = "debug"
@@ -87,6 +88,21 @@ class Paths(object):
def __init__(self):
self.prefix = self.get_prefix()
self.installed = (self.prefix == '@pkgdatadir@')
+ self.ui_dir = self.add_prefix('ui')
+ self.spice_file = os.path.join(self.ui_dir,
+ 'spice-html5/pages/spice_auto.html')
+
+ if __with_spice__ == 'yes':
+ self.spice_dir = self.add_prefix('ui/spice-html5')
+ elif os.path.exists('@datadir@/spice-html5'):
+ self.spice_dir = '@datadir@/spice-html5'
+ else:
+ self.spice_dir = '/usr/share/spice-html5'
+
+ if os.path.exists('@datadir@/novnc'):
+ self.novnc_dir = '@datadir@/novnc'
+ else:
+ self.novnc_dir = '/usr/share/novnc'
if self.installed:
self.state_dir = '@localstatedir@/lib/kimchi'
@@ -94,19 +110,16 @@ class Paths(object):
self.conf_dir = '@sysconfdir@/kimchi'
self.src_dir = '@kimchidir@'
self.plugins_dir = '@kimchidir@/plugins'
+ self.mo_dir = '@prefix@/share/locale'
+ self.spice_css_file = os.path.join(self.spice_dir, 'spice.css')
else:
self.state_dir = self.add_prefix('data')
self.log_dir = self.add_prefix('log')
self.conf_dir = self.add_prefix('src')
self.src_dir = self.add_prefix('src/kimchi')
self.plugins_dir = self.add_prefix('plugins')
-
- self.ui_dir = self.add_prefix('ui')
-
- if self.installed:
- self.mo_dir = '@prefix@/share/locale'
- else:
self.mo_dir = self.add_prefix('mo')
+ self.spice_css_file = os.path.join(self.spice_dir, 'css/spice.css')
def get_prefix(self):
if __file__.startswith("/"):
@@ -187,13 +200,26 @@ class KimchiConfig(dict):
},
'/novnc': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '@datadir@/novnc',
+ 'tools.staticdir.dir': paths.novnc_dir,
'tools.nocache.on': True,
'tools.kimchiauth.on': True
},
- '/spice.html': {
+ '/spice_auto.html': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': paths.spice_file,
+ 'tools.nocache.on': True,
'tools.kimchiauth.on': True
},
+ '/spice-html5': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': paths.spice_dir,
+ 'tools.nocache.on': True
+ },
+ '/spice-html5/spice.css': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': paths.spice_css_file,
+ 'tools.nocache.on': True,
+ },
'/kimchi-ui.html': {
'tools.kimchiauth.on': True
},
diff --git a/tests/test_config.py.in b/tests/test_config.py.in
index af7adc1..1145ffd 100644
--- a/tests/test_config.py.in
+++ b/tests/test_config.py.in
@@ -112,9 +112,22 @@ class ConfigTests(unittest.TestCase):
'tools.nocache.on': True,
'tools.kimchiauth.on': True
},
- '/spice.html': {
+ '/spice_auto.html': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': paths.spice_file,
+ 'tools.nocache.on': True,
'tools.kimchiauth.on': True
},
+ '/spice-html5': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': paths.spice_dir,
+ 'tools.nocache.on': True
+ },
+ '/spice-html5/spice.css': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': paths.spice_css_file,
+ 'tools.nocache.on': True,
+ },
'/kimchi-ui.html': {
'tools.kimchiauth.on': True
},
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
index 5895a07..8a6e416 100644
--- a/ui/js/src/kimchi.api.js
+++ b/ui/js/src/kimchi.api.js
@@ -385,7 +385,7 @@ var kimchi = {
dataType : "json"
}).done(function(data, textStatus, xhr) {
url = 'https://' + location.hostname + ':' + proxy_port;
- url += "/console.html?url=spice.html&port=" + proxy_port;
+ url += "/console.html?url=spice_auto.html&port=" +
proxy_port;
url += "&listen=" + location.hostname;
/*
* From python documentation base64.urlsafe_b64encode(s)
--
1.9.3